timelock-sdk 0.0.184 → 0.0.186

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,"file":"client.js","names":["defaultWrapper: SdkFunctionWrapper","#baseUrl","#request","strikeTickRounded","address","erc20Abi","hash","amounts0: bigint[]","amounts1: bigint[]"],"sources":["../src/generated/graphql.ts","../src/lib/perpsOperator.ts","../src/providers/TimelockProvider.tsx","../src/hooks/useLens.ts","../src/hooks/market/useMarketData.ts","../src/hooks/market/useMarketState.ts","../src/hooks/market/useMarketVolume.ts","../src/hooks/options/useMaxPositionSize.ts","../src/hooks/pool/useCurrentTick.ts","../src/hooks/pool/usePoolData.ts","../src/hooks/tokens/useApproval.ts","../src/lib/utils.ts","../src/hooks/options/useMintOption.ts","../src/hooks/pool/usePriceAtTick.ts","../src/hooks/pool/useCurrentPrice.ts","../src/hooks/options/useExerciseOption.ts","../src/hooks/options/useOptionPnl.ts","../src/hooks/options/useOptionPremium.ts","../src/hooks/options/useUserOptions.ts","../src/hooks/options/useExtendOption.ts","../src/hooks/options/useOptionTimeline.ts","../src/hooks/perps/usePerpsOperator.ts","../src/hooks/operators/useUserOperators.ts","../src/hooks/operators/useSetOperatorPerms.ts","../src/hooks/perps/useMintPerp.ts","../src/hooks/perps/useClosePerp.ts","../src/hooks/perps/useUserPerps.ts","../src/hooks/tokens/useTokenData.ts","../src/hooks/tokens/useTokenBalance.ts","../src/hooks/operators/useOperatorPerms.ts","../src/hooks/pool/usePriceHistory.ts","../src/hooks/vault/useVaultData.ts","../src/hooks/vault/useBurnLiquidity.ts","../src/hooks/vault/useLiquidityBlocks.ts","../src/hooks/vault/useMintLiquidity.ts","../src/hooks/vault/useVaultTVL.ts","../src/hooks/guardian/useGuardianGlobalState.ts","../src/hooks/guardian/usePauseGlobalTrading.ts","../src/hooks/guardian/usePauseMarketTrading.ts","../src/hooks/fees/useFeeRates.ts","../src/hooks/fees/useUpdateMarketFees.ts","../src/hooks/pricing/usePricingParams.ts","../src/hooks/pricing/useOptionPricingParams.ts","../src/hooks/pricing/useStaticPricingParams.ts","../src/hooks/pricing/useUpdateMarketPricing.ts"],"sourcesContent":["import {GraphQLClient, RequestOptions} from 'graphql-request';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends {[key: string]: unknown}> = {[K in keyof T]: T[K]};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<T extends {[key: string]: unknown}, K extends keyof T> = {\n [_ in K]?: never;\n};\nexport type Incremental<T> =\n | T\n | {[P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never};\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: {input: string; output: string};\n String: {input: string; output: string};\n Boolean: {input: boolean; output: boolean};\n Int: {input: number; output: number};\n Float: {input: number; output: number};\n jsonb: {input: any; output: any};\n numeric: {input: any; output: any};\n optiontype: {input: any; output: any};\n timestamptz: {input: any; output: any};\n};\n\n/** Boolean expression to compare columns of type \"Boolean\". All fields are combined with logical 'AND'. */\nexport type BooleanComparisonExp = {\n _eq?: InputMaybe<Scalars['Boolean']['input']>;\n _gt?: InputMaybe<Scalars['Boolean']['input']>;\n _gte?: InputMaybe<Scalars['Boolean']['input']>;\n _in?: InputMaybe<Array<Scalars['Boolean']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['Boolean']['input']>;\n _lte?: InputMaybe<Scalars['Boolean']['input']>;\n _neq?: InputMaybe<Scalars['Boolean']['input']>;\n _nin?: InputMaybe<Array<Scalars['Boolean']['input']>>;\n};\n\n/** columns and relationships of \"BorrowEvent\" */\nexport type BorrowEvent = {\n __typename: 'BorrowEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"BorrowEvent\". All fields are combined with a logical 'AND'. */\nexport type BorrowEventBoolExp = {\n _and?: InputMaybe<Array<BorrowEventBoolExp>>;\n _not?: InputMaybe<BorrowEventBoolExp>;\n _or?: InputMaybe<Array<BorrowEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"BorrowEvent\". */\nexport type BorrowEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"BorrowEvent\" */\nexport type BorrowEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"BorrowEvent\" */\nexport type BorrowEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: BorrowEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type BorrowEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"BurnEvent\" */\nexport type BurnEvent = {\n __typename: 'BurnEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"BurnEvent\". All fields are combined with a logical 'AND'. */\nexport type BurnEventBoolExp = {\n _and?: InputMaybe<Array<BurnEventBoolExp>>;\n _not?: InputMaybe<BurnEventBoolExp>;\n _or?: InputMaybe<Array<BurnEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"BurnEvent\". */\nexport type BurnEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"BurnEvent\" */\nexport type BurnEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"BurnEvent\" */\nexport type BurnEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: BurnEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type BurnEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEvent = {\n __typename: 'ExerciseOptionEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidities: Array<Scalars['String']['output']>;\n /** An object relationship */\n option?: Maybe<UserOption>;\n option_id: Scalars['String']['output'];\n payout: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"ExerciseOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type ExerciseOptionEventBoolExp = {\n _and?: InputMaybe<Array<ExerciseOptionEventBoolExp>>;\n _not?: InputMaybe<ExerciseOptionEventBoolExp>;\n _or?: InputMaybe<Array<ExerciseOptionEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidities?: InputMaybe<StringArrayComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n payout?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"ExerciseOptionEvent\". */\nexport type ExerciseOptionEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidities?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n option_id?: InputMaybe<OrderBy>;\n payout?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidities'\n /** column name */\n | 'option_id'\n /** column name */\n | 'payout'\n /** column name */\n | 'price'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ExerciseOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ExerciseOptionEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidities?: InputMaybe<Array<Scalars['String']['input']>>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n payout?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"ExtendOptionEvent\" */\nexport type ExtendOptionEvent = {\n __typename: 'ExtendOptionEvent';\n addedDuration: Scalars['numeric']['output'];\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n option?: Maybe<UserOption>;\n option_id: Scalars['String']['output'];\n premium: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"ExtendOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type ExtendOptionEventBoolExp = {\n _and?: InputMaybe<Array<ExtendOptionEventBoolExp>>;\n _not?: InputMaybe<ExtendOptionEventBoolExp>;\n _or?: InputMaybe<Array<ExtendOptionEventBoolExp>>;\n addedDuration?: InputMaybe<NumericComparisonExp>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"ExtendOptionEvent\". */\nexport type ExtendOptionEventOrderBy = {\n addedDuration?: InputMaybe<OrderBy>;\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n option_id?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"ExtendOptionEvent\" */\nexport type ExtendOptionEventSelectColumn =\n /** column name */\n | 'addedDuration'\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'option_id'\n /** column name */\n | 'premium'\n /** column name */\n | 'price'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"ExtendOptionEvent\" */\nexport type ExtendOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ExtendOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ExtendOptionEventStreamCursorValueInput = {\n addedDuration?: InputMaybe<Scalars['numeric']['input']>;\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to compare columns of type \"Int\". All fields are combined with logical 'AND'. */\nexport type IntComparisonExp = {\n _eq?: InputMaybe<Scalars['Int']['input']>;\n _gt?: InputMaybe<Scalars['Int']['input']>;\n _gte?: InputMaybe<Scalars['Int']['input']>;\n _in?: InputMaybe<Array<Scalars['Int']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['Int']['input']>;\n _lte?: InputMaybe<Scalars['Int']['input']>;\n _neq?: InputMaybe<Scalars['Int']['input']>;\n _nin?: InputMaybe<Array<Scalars['Int']['input']>>;\n};\n\n/** columns and relationships of \"MarketOperator\" */\nexport type MarketOperator = {\n __typename: 'MarketOperator';\n address: Scalars['String']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An array relationship */\n userPermissions: Array<UserMarketOperator>;\n};\n\n/** columns and relationships of \"MarketOperator\" */\nexport type MarketOperatorUserPermissionsArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** Boolean expression to filter rows from the table \"MarketOperator\". All fields are combined with a logical 'AND'. */\nexport type MarketOperatorBoolExp = {\n _and?: InputMaybe<Array<MarketOperatorBoolExp>>;\n _not?: InputMaybe<MarketOperatorBoolExp>;\n _or?: InputMaybe<Array<MarketOperatorBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n userPermissions?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** Ordering options when selecting data from \"MarketOperator\". */\nexport type MarketOperatorOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n userPermissions_aggregate?: InputMaybe<UserMarketOperatorAggregateOrderBy>;\n};\n\n/** select columns of table \"MarketOperator\" */\nexport type MarketOperatorSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id';\n\n/** Streaming cursor of the table \"MarketOperator\" */\nexport type MarketOperatorStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MarketOperatorStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MarketOperatorStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"MintEvent\" */\nexport type MintEvent = {\n __typename: 'MintEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"MintEvent\". All fields are combined with a logical 'AND'. */\nexport type MintEventBoolExp = {\n _and?: InputMaybe<Array<MintEventBoolExp>>;\n _not?: InputMaybe<MintEventBoolExp>;\n _or?: InputMaybe<Array<MintEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"MintEvent\". */\nexport type MintEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"MintEvent\" */\nexport type MintEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"MintEvent\" */\nexport type MintEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MintEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MintEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"MintOptionEvent\" */\nexport type MintOptionEvent = {\n __typename: 'MintOptionEvent';\n blockNumber: Scalars['numeric']['output'];\n expiresAt: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidities: Array<Scalars['String']['output']>;\n /** An object relationship */\n option?: Maybe<UserOption>;\n optionType: Scalars['Int']['output'];\n option_id: Scalars['String']['output'];\n owner: Scalars['String']['output'];\n premium: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n strikeTick: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"MintOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type MintOptionEventBoolExp = {\n _and?: InputMaybe<Array<MintOptionEventBoolExp>>;\n _not?: InputMaybe<MintOptionEventBoolExp>;\n _or?: InputMaybe<Array<MintOptionEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n expiresAt?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidities?: InputMaybe<StringArrayComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n optionType?: InputMaybe<IntComparisonExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n owner?: InputMaybe<StringComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n strikeTick?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"MintOptionEvent\". */\nexport type MintOptionEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidities?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n optionType?: InputMaybe<OrderBy>;\n option_id?: InputMaybe<OrderBy>;\n owner?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"MintOptionEvent\" */\nexport type MintOptionEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'expiresAt'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidities'\n /** column name */\n | 'optionType'\n /** column name */\n | 'option_id'\n /** column name */\n | 'owner'\n /** column name */\n | 'premium'\n /** column name */\n | 'price'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'strikeTick'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"MintOptionEvent\" */\nexport type MintOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MintOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MintOptionEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n expiresAt?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidities?: InputMaybe<Array<Scalars['String']['input']>>;\n optionType?: InputMaybe<Scalars['Int']['input']>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n owner?: InputMaybe<Scalars['String']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n strikeTick?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"RepayEvent\" */\nexport type RepayEvent = {\n __typename: 'RepayEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"RepayEvent\". All fields are combined with a logical 'AND'. */\nexport type RepayEventBoolExp = {\n _and?: InputMaybe<Array<RepayEventBoolExp>>;\n _not?: InputMaybe<RepayEventBoolExp>;\n _or?: InputMaybe<Array<RepayEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"RepayEvent\". */\nexport type RepayEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"RepayEvent\" */\nexport type RepayEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"RepayEvent\" */\nexport type RepayEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: RepayEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type RepayEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'. */\nexport type StringArrayComparisonExp = {\n /** is the array contained in the given array value */\n _contained_in?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the array contain the given value */\n _contains?: InputMaybe<Array<Scalars['String']['input']>>;\n _eq?: InputMaybe<Array<Scalars['String']['input']>>;\n _gt?: InputMaybe<Array<Scalars['String']['input']>>;\n _gte?: InputMaybe<Array<Scalars['String']['input']>>;\n _in?: InputMaybe<Array<Array<Scalars['String']['input']>>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Array<Scalars['String']['input']>>;\n _lte?: InputMaybe<Array<Scalars['String']['input']>>;\n _neq?: InputMaybe<Array<Scalars['String']['input']>>;\n _nin?: InputMaybe<Array<Array<Scalars['String']['input']>>>;\n};\n\n/** Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'. */\nexport type StringComparisonExp = {\n _eq?: InputMaybe<Scalars['String']['input']>;\n _gt?: InputMaybe<Scalars['String']['input']>;\n _gte?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given case-insensitive pattern */\n _ilike?: InputMaybe<Scalars['String']['input']>;\n _in?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the column match the given POSIX regular expression, case insensitive */\n _iregex?: InputMaybe<Scalars['String']['input']>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n /** does the column match the given pattern */\n _like?: InputMaybe<Scalars['String']['input']>;\n _lt?: InputMaybe<Scalars['String']['input']>;\n _lte?: InputMaybe<Scalars['String']['input']>;\n _neq?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given case-insensitive pattern */\n _nilike?: InputMaybe<Scalars['String']['input']>;\n _nin?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the column NOT match the given POSIX regular expression, case insensitive */\n _niregex?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given pattern */\n _nlike?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given POSIX regular expression, case sensitive */\n _nregex?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given SQL regular expression */\n _nsimilar?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given POSIX regular expression, case sensitive */\n _regex?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given SQL regular expression */\n _similar?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarket = {\n __typename: 'TimelockMarket';\n address: Scalars['String']['output'];\n currency0: Scalars['String']['output'];\n currency1: Scalars['String']['output'];\n fee: Scalars['Int']['output'];\n hooks: Scalars['String']['output'];\n id: Scalars['String']['output'];\n optionAsset: Scalars['String']['output'];\n optionAssetDecimals: Scalars['Int']['output'];\n optionAssetIsToken0: Scalars['Boolean']['output'];\n optionAssetName: Scalars['String']['output'];\n optionAssetSymbol: Scalars['String']['output'];\n /** An array relationship */\n options: Array<UserOption>;\n optionsCount: Scalars['numeric']['output'];\n payoutAsset: Scalars['String']['output'];\n payoutAssetDecimals: Scalars['Int']['output'];\n payoutAssetName: Scalars['String']['output'];\n payoutAssetSymbol: Scalars['String']['output'];\n poolManager: Scalars['String']['output'];\n tickSpacing: Scalars['Int']['output'];\n /** An array relationship */\n traders: Array<TimelockMarketUser>;\n tradersCount: Scalars['numeric']['output'];\n vault: Scalars['String']['output'];\n volume: Scalars['numeric']['output'];\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarketOptionsArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarketTradersArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUser = {\n __typename: 'TimelockMarketUser';\n address: Scalars['String']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An array relationship */\n operators: Array<UserMarketOperator>;\n /** An array relationship */\n options: Array<UserOption>;\n optionsCount: Scalars['numeric']['output'];\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUserOperatorsArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUserOptionsArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\n/** order by aggregate values of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserAggregateOrderBy = {\n avg?: InputMaybe<TimelockMarketUserAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<TimelockMarketUserMaxOrderBy>;\n min?: InputMaybe<TimelockMarketUserMinOrderBy>;\n stddev?: InputMaybe<TimelockMarketUserStddevOrderBy>;\n stddev_pop?: InputMaybe<TimelockMarketUserStddevPopOrderBy>;\n stddev_samp?: InputMaybe<TimelockMarketUserStddevSampOrderBy>;\n sum?: InputMaybe<TimelockMarketUserSumOrderBy>;\n var_pop?: InputMaybe<TimelockMarketUserVarPopOrderBy>;\n var_samp?: InputMaybe<TimelockMarketUserVarSampOrderBy>;\n variance?: InputMaybe<TimelockMarketUserVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserAvgOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"TimelockMarketUser\". All fields are combined with a logical 'AND'. */\nexport type TimelockMarketUserBoolExp = {\n _and?: InputMaybe<Array<TimelockMarketUserBoolExp>>;\n _not?: InputMaybe<TimelockMarketUserBoolExp>;\n _or?: InputMaybe<Array<TimelockMarketUserBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operators?: InputMaybe<UserMarketOperatorBoolExp>;\n options?: InputMaybe<UserOptionBoolExp>;\n optionsCount?: InputMaybe<NumericComparisonExp>;\n};\n\n/** order by max() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserMaxOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserMinOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"TimelockMarketUser\". */\nexport type TimelockMarketUserOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operators_aggregate?: InputMaybe<UserMarketOperatorAggregateOrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n options_aggregate?: InputMaybe<UserOptionAggregateOrderBy>;\n};\n\n/** select columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'optionsCount';\n\n/** order by stddev() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevPopOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevSampOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: TimelockMarketUserStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type TimelockMarketUserStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n optionsCount?: InputMaybe<Scalars['numeric']['input']>;\n};\n\n/** order by sum() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserSumOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarPopOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarSampOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarianceOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"TimelockMarket\". All fields are combined with a logical 'AND'. */\nexport type TimelockMarketBoolExp = {\n _and?: InputMaybe<Array<TimelockMarketBoolExp>>;\n _not?: InputMaybe<TimelockMarketBoolExp>;\n _or?: InputMaybe<Array<TimelockMarketBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n currency0?: InputMaybe<StringComparisonExp>;\n currency1?: InputMaybe<StringComparisonExp>;\n fee?: InputMaybe<IntComparisonExp>;\n hooks?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n optionAsset?: InputMaybe<StringComparisonExp>;\n optionAssetDecimals?: InputMaybe<IntComparisonExp>;\n optionAssetIsToken0?: InputMaybe<BooleanComparisonExp>;\n optionAssetName?: InputMaybe<StringComparisonExp>;\n optionAssetSymbol?: InputMaybe<StringComparisonExp>;\n options?: InputMaybe<UserOptionBoolExp>;\n optionsCount?: InputMaybe<NumericComparisonExp>;\n payoutAsset?: InputMaybe<StringComparisonExp>;\n payoutAssetDecimals?: InputMaybe<IntComparisonExp>;\n payoutAssetName?: InputMaybe<StringComparisonExp>;\n payoutAssetSymbol?: InputMaybe<StringComparisonExp>;\n poolManager?: InputMaybe<StringComparisonExp>;\n tickSpacing?: InputMaybe<IntComparisonExp>;\n traders?: InputMaybe<TimelockMarketUserBoolExp>;\n tradersCount?: InputMaybe<NumericComparisonExp>;\n vault?: InputMaybe<StringComparisonExp>;\n volume?: InputMaybe<NumericComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"TimelockMarket\". */\nexport type TimelockMarketOrderBy = {\n address?: InputMaybe<OrderBy>;\n currency0?: InputMaybe<OrderBy>;\n currency1?: InputMaybe<OrderBy>;\n fee?: InputMaybe<OrderBy>;\n hooks?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n optionAsset?: InputMaybe<OrderBy>;\n optionAssetDecimals?: InputMaybe<OrderBy>;\n optionAssetIsToken0?: InputMaybe<OrderBy>;\n optionAssetName?: InputMaybe<OrderBy>;\n optionAssetSymbol?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n options_aggregate?: InputMaybe<UserOptionAggregateOrderBy>;\n payoutAsset?: InputMaybe<OrderBy>;\n payoutAssetDecimals?: InputMaybe<OrderBy>;\n payoutAssetName?: InputMaybe<OrderBy>;\n payoutAssetSymbol?: InputMaybe<OrderBy>;\n poolManager?: InputMaybe<OrderBy>;\n tickSpacing?: InputMaybe<OrderBy>;\n tradersCount?: InputMaybe<OrderBy>;\n traders_aggregate?: InputMaybe<TimelockMarketUserAggregateOrderBy>;\n vault?: InputMaybe<OrderBy>;\n volume?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"TimelockMarket\" */\nexport type TimelockMarketSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'currency0'\n /** column name */\n | 'currency1'\n /** column name */\n | 'fee'\n /** column name */\n | 'hooks'\n /** column name */\n | 'id'\n /** column name */\n | 'optionAsset'\n /** column name */\n | 'optionAssetDecimals'\n /** column name */\n | 'optionAssetIsToken0'\n /** column name */\n | 'optionAssetName'\n /** column name */\n | 'optionAssetSymbol'\n /** column name */\n | 'optionsCount'\n /** column name */\n | 'payoutAsset'\n /** column name */\n | 'payoutAssetDecimals'\n /** column name */\n | 'payoutAssetName'\n /** column name */\n | 'payoutAssetSymbol'\n /** column name */\n | 'poolManager'\n /** column name */\n | 'tickSpacing'\n /** column name */\n | 'tradersCount'\n /** column name */\n | 'vault'\n /** column name */\n | 'volume';\n\n/** Streaming cursor of the table \"TimelockMarket\" */\nexport type TimelockMarketStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: TimelockMarketStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type TimelockMarketStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n currency0?: InputMaybe<Scalars['String']['input']>;\n currency1?: InputMaybe<Scalars['String']['input']>;\n fee?: InputMaybe<Scalars['Int']['input']>;\n hooks?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n optionAsset?: InputMaybe<Scalars['String']['input']>;\n optionAssetDecimals?: InputMaybe<Scalars['Int']['input']>;\n optionAssetIsToken0?: InputMaybe<Scalars['Boolean']['input']>;\n optionAssetName?: InputMaybe<Scalars['String']['input']>;\n optionAssetSymbol?: InputMaybe<Scalars['String']['input']>;\n optionsCount?: InputMaybe<Scalars['numeric']['input']>;\n payoutAsset?: InputMaybe<Scalars['String']['input']>;\n payoutAssetDecimals?: InputMaybe<Scalars['Int']['input']>;\n payoutAssetName?: InputMaybe<Scalars['String']['input']>;\n payoutAssetSymbol?: InputMaybe<Scalars['String']['input']>;\n poolManager?: InputMaybe<Scalars['String']['input']>;\n tickSpacing?: InputMaybe<Scalars['Int']['input']>;\n tradersCount?: InputMaybe<Scalars['numeric']['input']>;\n vault?: InputMaybe<Scalars['String']['input']>;\n volume?: InputMaybe<Scalars['numeric']['input']>;\n};\n\n/** columns and relationships of \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEvent = {\n __typename: 'UpdateOperatorPermsEvent';\n blockNumber: Scalars['numeric']['output'];\n canExercise: Scalars['Boolean']['output'];\n canExtend: Scalars['Boolean']['output'];\n canMint: Scalars['Boolean']['output'];\n canTransfer: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n operator: Scalars['String']['output'];\n /** An object relationship */\n owner?: Maybe<TimelockMarketUser>;\n owner_id: Scalars['String']['output'];\n spendingApproval: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"UpdateOperatorPermsEvent\". All fields are combined with a logical 'AND'. */\nexport type UpdateOperatorPermsEventBoolExp = {\n _and?: InputMaybe<Array<UpdateOperatorPermsEventBoolExp>>;\n _not?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n _or?: InputMaybe<Array<UpdateOperatorPermsEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n canExercise?: InputMaybe<BooleanComparisonExp>;\n canExtend?: InputMaybe<BooleanComparisonExp>;\n canMint?: InputMaybe<BooleanComparisonExp>;\n canTransfer?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operator?: InputMaybe<StringComparisonExp>;\n owner?: InputMaybe<TimelockMarketUserBoolExp>;\n owner_id?: InputMaybe<StringComparisonExp>;\n spendingApproval?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"UpdateOperatorPermsEvent\". */\nexport type UpdateOperatorPermsEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n canExercise?: InputMaybe<OrderBy>;\n canExtend?: InputMaybe<OrderBy>;\n canMint?: InputMaybe<OrderBy>;\n canTransfer?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator?: InputMaybe<OrderBy>;\n owner?: InputMaybe<TimelockMarketUserOrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'canExercise'\n /** column name */\n | 'canExtend'\n /** column name */\n | 'canMint'\n /** column name */\n | 'canTransfer'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'operator'\n /** column name */\n | 'owner_id'\n /** column name */\n | 'spendingApproval'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UpdateOperatorPermsEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UpdateOperatorPermsEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n canExercise?: InputMaybe<Scalars['Boolean']['input']>;\n canExtend?: InputMaybe<Scalars['Boolean']['input']>;\n canMint?: InputMaybe<Scalars['Boolean']['input']>;\n canTransfer?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n operator?: InputMaybe<Scalars['String']['input']>;\n owner_id?: InputMaybe<Scalars['String']['input']>;\n spendingApproval?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"UserMarketOperator\" */\nexport type UserMarketOperator = {\n __typename: 'UserMarketOperator';\n canExercise: Scalars['Boolean']['output'];\n canExtend: Scalars['Boolean']['output'];\n canMint: Scalars['Boolean']['output'];\n canTransfer: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An object relationship */\n operator?: Maybe<MarketOperator>;\n operator_id: Scalars['String']['output'];\n spendingApproval: Scalars['numeric']['output'];\n /** An object relationship */\n user?: Maybe<TimelockMarketUser>;\n user_id: Scalars['String']['output'];\n};\n\n/** order by aggregate values of table \"UserMarketOperator\" */\nexport type UserMarketOperatorAggregateOrderBy = {\n avg?: InputMaybe<UserMarketOperatorAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<UserMarketOperatorMaxOrderBy>;\n min?: InputMaybe<UserMarketOperatorMinOrderBy>;\n stddev?: InputMaybe<UserMarketOperatorStddevOrderBy>;\n stddev_pop?: InputMaybe<UserMarketOperatorStddevPopOrderBy>;\n stddev_samp?: InputMaybe<UserMarketOperatorStddevSampOrderBy>;\n sum?: InputMaybe<UserMarketOperatorSumOrderBy>;\n var_pop?: InputMaybe<UserMarketOperatorVarPopOrderBy>;\n var_samp?: InputMaybe<UserMarketOperatorVarSampOrderBy>;\n variance?: InputMaybe<UserMarketOperatorVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorAvgOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"UserMarketOperator\". All fields are combined with a logical 'AND'. */\nexport type UserMarketOperatorBoolExp = {\n _and?: InputMaybe<Array<UserMarketOperatorBoolExp>>;\n _not?: InputMaybe<UserMarketOperatorBoolExp>;\n _or?: InputMaybe<Array<UserMarketOperatorBoolExp>>;\n canExercise?: InputMaybe<BooleanComparisonExp>;\n canExtend?: InputMaybe<BooleanComparisonExp>;\n canMint?: InputMaybe<BooleanComparisonExp>;\n canTransfer?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operator?: InputMaybe<MarketOperatorBoolExp>;\n operator_id?: InputMaybe<StringComparisonExp>;\n spendingApproval?: InputMaybe<NumericComparisonExp>;\n user?: InputMaybe<TimelockMarketUserBoolExp>;\n user_id?: InputMaybe<StringComparisonExp>;\n};\n\n/** order by max() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorMaxOrderBy = {\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorMinOrderBy = {\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"UserMarketOperator\". */\nexport type UserMarketOperatorOrderBy = {\n canExercise?: InputMaybe<OrderBy>;\n canExtend?: InputMaybe<OrderBy>;\n canMint?: InputMaybe<OrderBy>;\n canTransfer?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator?: InputMaybe<MarketOperatorOrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user?: InputMaybe<TimelockMarketUserOrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorSelectColumn =\n /** column name */\n | 'canExercise'\n /** column name */\n | 'canExtend'\n /** column name */\n | 'canMint'\n /** column name */\n | 'canTransfer'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'operator_id'\n /** column name */\n | 'spendingApproval'\n /** column name */\n | 'user_id';\n\n/** order by stddev() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevPopOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevSampOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"UserMarketOperator\" */\nexport type UserMarketOperatorStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UserMarketOperatorStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UserMarketOperatorStreamCursorValueInput = {\n canExercise?: InputMaybe<Scalars['Boolean']['input']>;\n canExtend?: InputMaybe<Scalars['Boolean']['input']>;\n canMint?: InputMaybe<Scalars['Boolean']['input']>;\n canTransfer?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n operator_id?: InputMaybe<Scalars['String']['input']>;\n spendingApproval?: InputMaybe<Scalars['numeric']['input']>;\n user_id?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** order by sum() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorSumOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarPopOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarSampOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarianceOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** columns and relationships of \"UserOption\" */\nexport type UserOption = {\n __typename: 'UserOption';\n createdAt: Scalars['numeric']['output'];\n entryPrice: Scalars['numeric']['output'];\n expiresAt: Scalars['numeric']['output'];\n fullyExercised: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n liquiditiesAtOpen: Array<Scalars['String']['output']>;\n liquiditiesCurrent: Array<Scalars['String']['output']>;\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n optionId: Scalars['numeric']['output'];\n optionType: Scalars['optiontype']['output'];\n /** An object relationship */\n owner?: Maybe<TimelockMarketUser>;\n owner_id: Scalars['String']['output'];\n positionSizeAtOpen: Scalars['numeric']['output'];\n positionSizeCurrent: Scalars['numeric']['output'];\n premium: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n realizedPayout: Scalars['numeric']['output'];\n startTick: Scalars['Int']['output'];\n strikePrice: Scalars['numeric']['output'];\n strikeTick: Scalars['Int']['output'];\n};\n\n/** order by aggregate values of table \"UserOption\" */\nexport type UserOptionAggregateOrderBy = {\n avg?: InputMaybe<UserOptionAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<UserOptionMaxOrderBy>;\n min?: InputMaybe<UserOptionMinOrderBy>;\n stddev?: InputMaybe<UserOptionStddevOrderBy>;\n stddev_pop?: InputMaybe<UserOptionStddevPopOrderBy>;\n stddev_samp?: InputMaybe<UserOptionStddevSampOrderBy>;\n sum?: InputMaybe<UserOptionSumOrderBy>;\n var_pop?: InputMaybe<UserOptionVarPopOrderBy>;\n var_samp?: InputMaybe<UserOptionVarSampOrderBy>;\n variance?: InputMaybe<UserOptionVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"UserOption\" */\nexport type UserOptionAvgOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"UserOption\". All fields are combined with a logical 'AND'. */\nexport type UserOptionBoolExp = {\n _and?: InputMaybe<Array<UserOptionBoolExp>>;\n _not?: InputMaybe<UserOptionBoolExp>;\n _or?: InputMaybe<Array<UserOptionBoolExp>>;\n createdAt?: InputMaybe<NumericComparisonExp>;\n entryPrice?: InputMaybe<NumericComparisonExp>;\n expiresAt?: InputMaybe<NumericComparisonExp>;\n fullyExercised?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquiditiesAtOpen?: InputMaybe<StringArrayComparisonExp>;\n liquiditiesCurrent?: InputMaybe<StringArrayComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n optionId?: InputMaybe<NumericComparisonExp>;\n optionType?: InputMaybe<OptiontypeComparisonExp>;\n owner?: InputMaybe<TimelockMarketUserBoolExp>;\n owner_id?: InputMaybe<StringComparisonExp>;\n positionSizeAtOpen?: InputMaybe<NumericComparisonExp>;\n positionSizeCurrent?: InputMaybe<NumericComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n realizedPayout?: InputMaybe<NumericComparisonExp>;\n startTick?: InputMaybe<IntComparisonExp>;\n strikePrice?: InputMaybe<NumericComparisonExp>;\n strikeTick?: InputMaybe<IntComparisonExp>;\n};\n\n/** order by max() on columns of table \"UserOption\" */\nexport type UserOptionMaxOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"UserOption\" */\nexport type UserOptionMinOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"UserOption\". */\nexport type UserOptionOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n fullyExercised?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner?: InputMaybe<TimelockMarketUserOrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UserOption\" */\nexport type UserOptionSelectColumn =\n /** column name */\n | 'createdAt'\n /** column name */\n | 'entryPrice'\n /** column name */\n | 'expiresAt'\n /** column name */\n | 'fullyExercised'\n /** column name */\n | 'id'\n /** column name */\n | 'liquiditiesAtOpen'\n /** column name */\n | 'liquiditiesCurrent'\n /** column name */\n | 'market_id'\n /** column name */\n | 'optionId'\n /** column name */\n | 'optionType'\n /** column name */\n | 'owner_id'\n /** column name */\n | 'positionSizeAtOpen'\n /** column name */\n | 'positionSizeCurrent'\n /** column name */\n | 'premium'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'realizedPayout'\n /** column name */\n | 'startTick'\n /** column name */\n | 'strikePrice'\n /** column name */\n | 'strikeTick';\n\n/** order by stddev() on columns of table \"UserOption\" */\nexport type UserOptionStddevOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"UserOption\" */\nexport type UserOptionStddevPopOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"UserOption\" */\nexport type UserOptionStddevSampOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"UserOption\" */\nexport type UserOptionStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UserOptionStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UserOptionStreamCursorValueInput = {\n createdAt?: InputMaybe<Scalars['numeric']['input']>;\n entryPrice?: InputMaybe<Scalars['numeric']['input']>;\n expiresAt?: InputMaybe<Scalars['numeric']['input']>;\n fullyExercised?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquiditiesAtOpen?: InputMaybe<Array<Scalars['String']['input']>>;\n liquiditiesCurrent?: InputMaybe<Array<Scalars['String']['input']>>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n optionId?: InputMaybe<Scalars['numeric']['input']>;\n optionType?: InputMaybe<Scalars['optiontype']['input']>;\n owner_id?: InputMaybe<Scalars['String']['input']>;\n positionSizeAtOpen?: InputMaybe<Scalars['numeric']['input']>;\n positionSizeCurrent?: InputMaybe<Scalars['numeric']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n realizedPayout?: InputMaybe<Scalars['numeric']['input']>;\n startTick?: InputMaybe<Scalars['Int']['input']>;\n strikePrice?: InputMaybe<Scalars['numeric']['input']>;\n strikeTick?: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** order by sum() on columns of table \"UserOption\" */\nexport type UserOptionSumOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"UserOption\" */\nexport type UserOptionVarPopOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"UserOption\" */\nexport type UserOptionVarSampOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"UserOption\" */\nexport type UserOptionVarianceOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** columns and relationships of \"_meta\" */\nexport type Meta = {\n __typename: '_meta';\n bufferBlock?: Maybe<Scalars['Int']['output']>;\n chainId?: Maybe<Scalars['Int']['output']>;\n endBlock?: Maybe<Scalars['Int']['output']>;\n eventsProcessed?: Maybe<Scalars['Int']['output']>;\n firstEventBlock?: Maybe<Scalars['Int']['output']>;\n isReady?: Maybe<Scalars['Boolean']['output']>;\n progressBlock?: Maybe<Scalars['Int']['output']>;\n readyAt?: Maybe<Scalars['timestamptz']['output']>;\n sourceBlock?: Maybe<Scalars['Int']['output']>;\n startBlock?: Maybe<Scalars['Int']['output']>;\n};\n\n/** Boolean expression to filter rows from the table \"_meta\". All fields are combined with a logical 'AND'. */\nexport type MetaBoolExp = {\n _and?: InputMaybe<Array<MetaBoolExp>>;\n _not?: InputMaybe<MetaBoolExp>;\n _or?: InputMaybe<Array<MetaBoolExp>>;\n bufferBlock?: InputMaybe<IntComparisonExp>;\n chainId?: InputMaybe<IntComparisonExp>;\n endBlock?: InputMaybe<IntComparisonExp>;\n eventsProcessed?: InputMaybe<IntComparisonExp>;\n firstEventBlock?: InputMaybe<IntComparisonExp>;\n isReady?: InputMaybe<BooleanComparisonExp>;\n progressBlock?: InputMaybe<IntComparisonExp>;\n readyAt?: InputMaybe<TimestamptzComparisonExp>;\n sourceBlock?: InputMaybe<IntComparisonExp>;\n startBlock?: InputMaybe<IntComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"_meta\". */\nexport type MetaOrderBy = {\n bufferBlock?: InputMaybe<OrderBy>;\n chainId?: InputMaybe<OrderBy>;\n endBlock?: InputMaybe<OrderBy>;\n eventsProcessed?: InputMaybe<OrderBy>;\n firstEventBlock?: InputMaybe<OrderBy>;\n isReady?: InputMaybe<OrderBy>;\n progressBlock?: InputMaybe<OrderBy>;\n readyAt?: InputMaybe<OrderBy>;\n sourceBlock?: InputMaybe<OrderBy>;\n startBlock?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"_meta\" */\nexport type MetaSelectColumn =\n /** column name */\n | 'bufferBlock'\n /** column name */\n | 'chainId'\n /** column name */\n | 'endBlock'\n /** column name */\n | 'eventsProcessed'\n /** column name */\n | 'firstEventBlock'\n /** column name */\n | 'isReady'\n /** column name */\n | 'progressBlock'\n /** column name */\n | 'readyAt'\n /** column name */\n | 'sourceBlock'\n /** column name */\n | 'startBlock';\n\n/** Streaming cursor of the table \"_meta\" */\nexport type MetaStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MetaStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MetaStreamCursorValueInput = {\n bufferBlock?: InputMaybe<Scalars['Int']['input']>;\n chainId?: InputMaybe<Scalars['Int']['input']>;\n endBlock?: InputMaybe<Scalars['Int']['input']>;\n eventsProcessed?: InputMaybe<Scalars['Int']['input']>;\n firstEventBlock?: InputMaybe<Scalars['Int']['input']>;\n isReady?: InputMaybe<Scalars['Boolean']['input']>;\n progressBlock?: InputMaybe<Scalars['Int']['input']>;\n readyAt?: InputMaybe<Scalars['timestamptz']['input']>;\n sourceBlock?: InputMaybe<Scalars['Int']['input']>;\n startBlock?: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** columns and relationships of \"chain_metadata\" */\nexport type ChainMetadata = {\n __typename: 'chain_metadata';\n block_height?: Maybe<Scalars['Int']['output']>;\n chain_id?: Maybe<Scalars['Int']['output']>;\n end_block?: Maybe<Scalars['Int']['output']>;\n first_event_block_number?: Maybe<Scalars['Int']['output']>;\n is_hyper_sync?: Maybe<Scalars['Boolean']['output']>;\n latest_fetched_block_number?: Maybe<Scalars['Int']['output']>;\n latest_processed_block?: Maybe<Scalars['Int']['output']>;\n num_batches_fetched?: Maybe<Scalars['Int']['output']>;\n num_events_processed?: Maybe<Scalars['Int']['output']>;\n start_block?: Maybe<Scalars['Int']['output']>;\n timestamp_caught_up_to_head_or_endblock?: Maybe<\n Scalars['timestamptz']['output']\n >;\n};\n\n/** Boolean expression to filter rows from the table \"chain_metadata\". All fields are combined with a logical 'AND'. */\nexport type ChainMetadataBoolExp = {\n _and?: InputMaybe<Array<ChainMetadataBoolExp>>;\n _not?: InputMaybe<ChainMetadataBoolExp>;\n _or?: InputMaybe<Array<ChainMetadataBoolExp>>;\n block_height?: InputMaybe<IntComparisonExp>;\n chain_id?: InputMaybe<IntComparisonExp>;\n end_block?: InputMaybe<IntComparisonExp>;\n first_event_block_number?: InputMaybe<IntComparisonExp>;\n is_hyper_sync?: InputMaybe<BooleanComparisonExp>;\n latest_fetched_block_number?: InputMaybe<IntComparisonExp>;\n latest_processed_block?: InputMaybe<IntComparisonExp>;\n num_batches_fetched?: InputMaybe<IntComparisonExp>;\n num_events_processed?: InputMaybe<IntComparisonExp>;\n start_block?: InputMaybe<IntComparisonExp>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<TimestamptzComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"chain_metadata\". */\nexport type ChainMetadataOrderBy = {\n block_height?: InputMaybe<OrderBy>;\n chain_id?: InputMaybe<OrderBy>;\n end_block?: InputMaybe<OrderBy>;\n first_event_block_number?: InputMaybe<OrderBy>;\n is_hyper_sync?: InputMaybe<OrderBy>;\n latest_fetched_block_number?: InputMaybe<OrderBy>;\n latest_processed_block?: InputMaybe<OrderBy>;\n num_batches_fetched?: InputMaybe<OrderBy>;\n num_events_processed?: InputMaybe<OrderBy>;\n start_block?: InputMaybe<OrderBy>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"chain_metadata\" */\nexport type ChainMetadataSelectColumn =\n /** column name */\n | 'block_height'\n /** column name */\n | 'chain_id'\n /** column name */\n | 'end_block'\n /** column name */\n | 'first_event_block_number'\n /** column name */\n | 'is_hyper_sync'\n /** column name */\n | 'latest_fetched_block_number'\n /** column name */\n | 'latest_processed_block'\n /** column name */\n | 'num_batches_fetched'\n /** column name */\n | 'num_events_processed'\n /** column name */\n | 'start_block'\n /** column name */\n | 'timestamp_caught_up_to_head_or_endblock';\n\n/** Streaming cursor of the table \"chain_metadata\" */\nexport type ChainMetadataStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ChainMetadataStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ChainMetadataStreamCursorValueInput = {\n block_height?: InputMaybe<Scalars['Int']['input']>;\n chain_id?: InputMaybe<Scalars['Int']['input']>;\n end_block?: InputMaybe<Scalars['Int']['input']>;\n first_event_block_number?: InputMaybe<Scalars['Int']['input']>;\n is_hyper_sync?: InputMaybe<Scalars['Boolean']['input']>;\n latest_fetched_block_number?: InputMaybe<Scalars['Int']['input']>;\n latest_processed_block?: InputMaybe<Scalars['Int']['input']>;\n num_batches_fetched?: InputMaybe<Scalars['Int']['input']>;\n num_events_processed?: InputMaybe<Scalars['Int']['input']>;\n start_block?: InputMaybe<Scalars['Int']['input']>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<\n Scalars['timestamptz']['input']\n >;\n};\n\n/** ordering argument of a cursor */\nexport type CursorOrdering =\n /** ascending ordering of the cursor */\n | 'ASC'\n /** descending ordering of the cursor */\n | 'DESC';\n\nexport type JsonbCastExp = {\n String?: InputMaybe<StringComparisonExp>;\n};\n\n/** Boolean expression to compare columns of type \"jsonb\". All fields are combined with logical 'AND'. */\nexport type JsonbComparisonExp = {\n _cast?: InputMaybe<JsonbCastExp>;\n /** is the column contained in the given json value */\n _contained_in?: InputMaybe<Scalars['jsonb']['input']>;\n /** does the column contain the given json value at the top level */\n _contains?: InputMaybe<Scalars['jsonb']['input']>;\n _eq?: InputMaybe<Scalars['jsonb']['input']>;\n _gt?: InputMaybe<Scalars['jsonb']['input']>;\n _gte?: InputMaybe<Scalars['jsonb']['input']>;\n /** does the string exist as a top-level key in the column */\n _has_key?: InputMaybe<Scalars['String']['input']>;\n /** do all of these strings exist as top-level keys in the column */\n _has_keys_all?: InputMaybe<Array<Scalars['String']['input']>>;\n /** do any of these strings exist as top-level keys in the column */\n _has_keys_any?: InputMaybe<Array<Scalars['String']['input']>>;\n _in?: InputMaybe<Array<Scalars['jsonb']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['jsonb']['input']>;\n _lte?: InputMaybe<Scalars['jsonb']['input']>;\n _neq?: InputMaybe<Scalars['jsonb']['input']>;\n _nin?: InputMaybe<Array<Scalars['jsonb']['input']>>;\n};\n\n/** Boolean expression to compare columns of type \"numeric\". All fields are combined with logical 'AND'. */\nexport type NumericComparisonExp = {\n _eq?: InputMaybe<Scalars['numeric']['input']>;\n _gt?: InputMaybe<Scalars['numeric']['input']>;\n _gte?: InputMaybe<Scalars['numeric']['input']>;\n _in?: InputMaybe<Array<Scalars['numeric']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['numeric']['input']>;\n _lte?: InputMaybe<Scalars['numeric']['input']>;\n _neq?: InputMaybe<Scalars['numeric']['input']>;\n _nin?: InputMaybe<Array<Scalars['numeric']['input']>>;\n};\n\n/** Boolean expression to compare columns of type \"optiontype\". All fields are combined with logical 'AND'. */\nexport type OptiontypeComparisonExp = {\n _eq?: InputMaybe<Scalars['optiontype']['input']>;\n _gt?: InputMaybe<Scalars['optiontype']['input']>;\n _gte?: InputMaybe<Scalars['optiontype']['input']>;\n _in?: InputMaybe<Array<Scalars['optiontype']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['optiontype']['input']>;\n _lte?: InputMaybe<Scalars['optiontype']['input']>;\n _neq?: InputMaybe<Scalars['optiontype']['input']>;\n _nin?: InputMaybe<Array<Scalars['optiontype']['input']>>;\n};\n\n/** column ordering options */\nexport type OrderBy =\n /** in ascending order, nulls last */\n | 'asc'\n /** in ascending order, nulls first */\n | 'asc_nulls_first'\n /** in ascending order, nulls last */\n | 'asc_nulls_last'\n /** in descending order, nulls first */\n | 'desc'\n /** in descending order, nulls first */\n | 'desc_nulls_first'\n /** in descending order, nulls last */\n | 'desc_nulls_last';\n\nexport type QueryRoot = {\n __typename: 'query_root';\n /** fetch data from the table: \"BorrowEvent\" */\n BorrowEvent: Array<BorrowEvent>;\n /** fetch data from the table: \"BorrowEvent\" using primary key columns */\n BorrowEvent_by_pk?: Maybe<BorrowEvent>;\n /** fetch data from the table: \"BurnEvent\" */\n BurnEvent: Array<BurnEvent>;\n /** fetch data from the table: \"BurnEvent\" using primary key columns */\n BurnEvent_by_pk?: Maybe<BurnEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" using primary key columns */\n ExerciseOptionEvent_by_pk?: Maybe<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" */\n ExtendOptionEvent: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" using primary key columns */\n ExtendOptionEvent_by_pk?: Maybe<ExtendOptionEvent>;\n /** fetch data from the table: \"MarketOperator\" */\n MarketOperator: Array<MarketOperator>;\n /** fetch data from the table: \"MarketOperator\" using primary key columns */\n MarketOperator_by_pk?: Maybe<MarketOperator>;\n /** fetch data from the table: \"MintEvent\" */\n MintEvent: Array<MintEvent>;\n /** fetch data from the table: \"MintEvent\" using primary key columns */\n MintEvent_by_pk?: Maybe<MintEvent>;\n /** fetch data from the table: \"MintOptionEvent\" */\n MintOptionEvent: Array<MintOptionEvent>;\n /** fetch data from the table: \"MintOptionEvent\" using primary key columns */\n MintOptionEvent_by_pk?: Maybe<MintOptionEvent>;\n /** fetch data from the table: \"RepayEvent\" */\n RepayEvent: Array<RepayEvent>;\n /** fetch data from the table: \"RepayEvent\" using primary key columns */\n RepayEvent_by_pk?: Maybe<RepayEvent>;\n /** fetch data from the table: \"TimelockMarket\" */\n TimelockMarket: Array<TimelockMarket>;\n /** fetch data from the table: \"TimelockMarketUser\" */\n TimelockMarketUser: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarketUser\" using primary key columns */\n TimelockMarketUser_by_pk?: Maybe<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarket\" using primary key columns */\n TimelockMarket_by_pk?: Maybe<TimelockMarket>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" using primary key columns */\n UpdateOperatorPermsEvent_by_pk?: Maybe<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UserMarketOperator\" */\n UserMarketOperator: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserMarketOperator\" using primary key columns */\n UserMarketOperator_by_pk?: Maybe<UserMarketOperator>;\n /** fetch data from the table: \"UserOption\" */\n UserOption: Array<UserOption>;\n /** fetch data from the table: \"UserOption\" using primary key columns */\n UserOption_by_pk?: Maybe<UserOption>;\n /** fetch data from the table: \"_meta\" */\n _meta: Array<Meta>;\n /** fetch data from the table: \"chain_metadata\" */\n chain_metadata: Array<ChainMetadata>;\n /** fetch data from the table: \"raw_events\" */\n raw_events: Array<RawEvents>;\n /** fetch data from the table: \"raw_events\" using primary key columns */\n raw_events_by_pk?: Maybe<RawEvents>;\n};\n\nexport type QueryRootBorrowEventArgs = {\n distinct_on?: InputMaybe<Array<BorrowEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BorrowEventOrderBy>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type QueryRootBorrowEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootBurnEventArgs = {\n distinct_on?: InputMaybe<Array<BurnEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BurnEventOrderBy>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type QueryRootBurnEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootExerciseOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExerciseOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExerciseOptionEventOrderBy>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type QueryRootExerciseOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootExtendOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExtendOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExtendOptionEventOrderBy>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type QueryRootExtendOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<MarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MarketOperatorOrderBy>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type QueryRootMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMintEventArgs = {\n distinct_on?: InputMaybe<Array<MintEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintEventOrderBy>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type QueryRootMintEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMintOptionEventArgs = {\n distinct_on?: InputMaybe<Array<MintOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintOptionEventOrderBy>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type QueryRootMintOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootRepayEventArgs = {\n distinct_on?: InputMaybe<Array<RepayEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RepayEventOrderBy>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type QueryRootRepayEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootTimelockMarketArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketOrderBy>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type QueryRootTimelockMarketUserArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type QueryRootTimelockMarketUserByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootTimelockMarketByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUpdateOperatorPermsEventArgs = {\n distinct_on?: InputMaybe<Array<UpdateOperatorPermsEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UpdateOperatorPermsEventOrderBy>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type QueryRootUpdateOperatorPermsEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUserMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type QueryRootUserMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUserOptionArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type QueryRootUserOptionByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMetaArgs = {\n distinct_on?: InputMaybe<Array<MetaSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MetaOrderBy>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type QueryRootChainMetadataArgs = {\n distinct_on?: InputMaybe<Array<ChainMetadataSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ChainMetadataOrderBy>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type QueryRootRawEventsArgs = {\n distinct_on?: InputMaybe<Array<RawEventsSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RawEventsOrderBy>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\nexport type QueryRootRawEventsByPkArgs = {\n serial: Scalars['Int']['input'];\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEvents = {\n __typename: 'raw_events';\n block_fields: Scalars['jsonb']['output'];\n block_hash: Scalars['String']['output'];\n block_number: Scalars['Int']['output'];\n block_timestamp: Scalars['Int']['output'];\n chain_id: Scalars['Int']['output'];\n contract_name: Scalars['String']['output'];\n event_id: Scalars['numeric']['output'];\n event_name: Scalars['String']['output'];\n log_index: Scalars['Int']['output'];\n params: Scalars['jsonb']['output'];\n serial: Scalars['Int']['output'];\n src_address: Scalars['String']['output'];\n transaction_fields: Scalars['jsonb']['output'];\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsBlockFieldsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsParamsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsTransactionFieldsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to filter rows from the table \"raw_events\". All fields are combined with a logical 'AND'. */\nexport type RawEventsBoolExp = {\n _and?: InputMaybe<Array<RawEventsBoolExp>>;\n _not?: InputMaybe<RawEventsBoolExp>;\n _or?: InputMaybe<Array<RawEventsBoolExp>>;\n block_fields?: InputMaybe<JsonbComparisonExp>;\n block_hash?: InputMaybe<StringComparisonExp>;\n block_number?: InputMaybe<IntComparisonExp>;\n block_timestamp?: InputMaybe<IntComparisonExp>;\n chain_id?: InputMaybe<IntComparisonExp>;\n contract_name?: InputMaybe<StringComparisonExp>;\n event_id?: InputMaybe<NumericComparisonExp>;\n event_name?: InputMaybe<StringComparisonExp>;\n log_index?: InputMaybe<IntComparisonExp>;\n params?: InputMaybe<JsonbComparisonExp>;\n serial?: InputMaybe<IntComparisonExp>;\n src_address?: InputMaybe<StringComparisonExp>;\n transaction_fields?: InputMaybe<JsonbComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"raw_events\". */\nexport type RawEventsOrderBy = {\n block_fields?: InputMaybe<OrderBy>;\n block_hash?: InputMaybe<OrderBy>;\n block_number?: InputMaybe<OrderBy>;\n block_timestamp?: InputMaybe<OrderBy>;\n chain_id?: InputMaybe<OrderBy>;\n contract_name?: InputMaybe<OrderBy>;\n event_id?: InputMaybe<OrderBy>;\n event_name?: InputMaybe<OrderBy>;\n log_index?: InputMaybe<OrderBy>;\n params?: InputMaybe<OrderBy>;\n serial?: InputMaybe<OrderBy>;\n src_address?: InputMaybe<OrderBy>;\n transaction_fields?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"raw_events\" */\nexport type RawEventsSelectColumn =\n /** column name */\n | 'block_fields'\n /** column name */\n | 'block_hash'\n /** column name */\n | 'block_number'\n /** column name */\n | 'block_timestamp'\n /** column name */\n | 'chain_id'\n /** column name */\n | 'contract_name'\n /** column name */\n | 'event_id'\n /** column name */\n | 'event_name'\n /** column name */\n | 'log_index'\n /** column name */\n | 'params'\n /** column name */\n | 'serial'\n /** column name */\n | 'src_address'\n /** column name */\n | 'transaction_fields';\n\n/** Streaming cursor of the table \"raw_events\" */\nexport type RawEventsStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: RawEventsStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type RawEventsStreamCursorValueInput = {\n block_fields?: InputMaybe<Scalars['jsonb']['input']>;\n block_hash?: InputMaybe<Scalars['String']['input']>;\n block_number?: InputMaybe<Scalars['Int']['input']>;\n block_timestamp?: InputMaybe<Scalars['Int']['input']>;\n chain_id?: InputMaybe<Scalars['Int']['input']>;\n contract_name?: InputMaybe<Scalars['String']['input']>;\n event_id?: InputMaybe<Scalars['numeric']['input']>;\n event_name?: InputMaybe<Scalars['String']['input']>;\n log_index?: InputMaybe<Scalars['Int']['input']>;\n params?: InputMaybe<Scalars['jsonb']['input']>;\n serial?: InputMaybe<Scalars['Int']['input']>;\n src_address?: InputMaybe<Scalars['String']['input']>;\n transaction_fields?: InputMaybe<Scalars['jsonb']['input']>;\n};\n\nexport type SubscriptionRoot = {\n __typename: 'subscription_root';\n /** fetch data from the table: \"BorrowEvent\" */\n BorrowEvent: Array<BorrowEvent>;\n /** fetch data from the table: \"BorrowEvent\" using primary key columns */\n BorrowEvent_by_pk?: Maybe<BorrowEvent>;\n /** fetch data from the table in a streaming manner: \"BorrowEvent\" */\n BorrowEvent_stream: Array<BorrowEvent>;\n /** fetch data from the table: \"BurnEvent\" */\n BurnEvent: Array<BurnEvent>;\n /** fetch data from the table: \"BurnEvent\" using primary key columns */\n BurnEvent_by_pk?: Maybe<BurnEvent>;\n /** fetch data from the table in a streaming manner: \"BurnEvent\" */\n BurnEvent_stream: Array<BurnEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" using primary key columns */\n ExerciseOptionEvent_by_pk?: Maybe<ExerciseOptionEvent>;\n /** fetch data from the table in a streaming manner: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent_stream: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" */\n ExtendOptionEvent: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" using primary key columns */\n ExtendOptionEvent_by_pk?: Maybe<ExtendOptionEvent>;\n /** fetch data from the table in a streaming manner: \"ExtendOptionEvent\" */\n ExtendOptionEvent_stream: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"MarketOperator\" */\n MarketOperator: Array<MarketOperator>;\n /** fetch data from the table: \"MarketOperator\" using primary key columns */\n MarketOperator_by_pk?: Maybe<MarketOperator>;\n /** fetch data from the table in a streaming manner: \"MarketOperator\" */\n MarketOperator_stream: Array<MarketOperator>;\n /** fetch data from the table: \"MintEvent\" */\n MintEvent: Array<MintEvent>;\n /** fetch data from the table: \"MintEvent\" using primary key columns */\n MintEvent_by_pk?: Maybe<MintEvent>;\n /** fetch data from the table in a streaming manner: \"MintEvent\" */\n MintEvent_stream: Array<MintEvent>;\n /** fetch data from the table: \"MintOptionEvent\" */\n MintOptionEvent: Array<MintOptionEvent>;\n /** fetch data from the table: \"MintOptionEvent\" using primary key columns */\n MintOptionEvent_by_pk?: Maybe<MintOptionEvent>;\n /** fetch data from the table in a streaming manner: \"MintOptionEvent\" */\n MintOptionEvent_stream: Array<MintOptionEvent>;\n /** fetch data from the table: \"RepayEvent\" */\n RepayEvent: Array<RepayEvent>;\n /** fetch data from the table: \"RepayEvent\" using primary key columns */\n RepayEvent_by_pk?: Maybe<RepayEvent>;\n /** fetch data from the table in a streaming manner: \"RepayEvent\" */\n RepayEvent_stream: Array<RepayEvent>;\n /** fetch data from the table: \"TimelockMarket\" */\n TimelockMarket: Array<TimelockMarket>;\n /** fetch data from the table: \"TimelockMarketUser\" */\n TimelockMarketUser: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarketUser\" using primary key columns */\n TimelockMarketUser_by_pk?: Maybe<TimelockMarketUser>;\n /** fetch data from the table in a streaming manner: \"TimelockMarketUser\" */\n TimelockMarketUser_stream: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarket\" using primary key columns */\n TimelockMarket_by_pk?: Maybe<TimelockMarket>;\n /** fetch data from the table in a streaming manner: \"TimelockMarket\" */\n TimelockMarket_stream: Array<TimelockMarket>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" using primary key columns */\n UpdateOperatorPermsEvent_by_pk?: Maybe<UpdateOperatorPermsEvent>;\n /** fetch data from the table in a streaming manner: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent_stream: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UserMarketOperator\" */\n UserMarketOperator: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserMarketOperator\" using primary key columns */\n UserMarketOperator_by_pk?: Maybe<UserMarketOperator>;\n /** fetch data from the table in a streaming manner: \"UserMarketOperator\" */\n UserMarketOperator_stream: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserOption\" */\n UserOption: Array<UserOption>;\n /** fetch data from the table: \"UserOption\" using primary key columns */\n UserOption_by_pk?: Maybe<UserOption>;\n /** fetch data from the table in a streaming manner: \"UserOption\" */\n UserOption_stream: Array<UserOption>;\n /** fetch data from the table: \"_meta\" */\n _meta: Array<Meta>;\n /** fetch data from the table in a streaming manner: \"_meta\" */\n _meta_stream: Array<Meta>;\n /** fetch data from the table: \"chain_metadata\" */\n chain_metadata: Array<ChainMetadata>;\n /** fetch data from the table in a streaming manner: \"chain_metadata\" */\n chain_metadata_stream: Array<ChainMetadata>;\n /** fetch data from the table: \"raw_events\" */\n raw_events: Array<RawEvents>;\n /** fetch data from the table: \"raw_events\" using primary key columns */\n raw_events_by_pk?: Maybe<RawEvents>;\n /** fetch data from the table in a streaming manner: \"raw_events\" */\n raw_events_stream: Array<RawEvents>;\n};\n\nexport type SubscriptionRootBorrowEventArgs = {\n distinct_on?: InputMaybe<Array<BorrowEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BorrowEventOrderBy>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type SubscriptionRootBorrowEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootBorrowEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<BorrowEventStreamCursorInput>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type SubscriptionRootBurnEventArgs = {\n distinct_on?: InputMaybe<Array<BurnEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BurnEventOrderBy>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type SubscriptionRootBurnEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootBurnEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<BurnEventStreamCursorInput>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type SubscriptionRootExerciseOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExerciseOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExerciseOptionEventOrderBy>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExerciseOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootExerciseOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ExerciseOptionEventStreamCursorInput>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExtendOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExtendOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExtendOptionEventOrderBy>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExtendOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootExtendOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ExtendOptionEventStreamCursorInput>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<MarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MarketOperatorOrderBy>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMarketOperatorStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MarketOperatorStreamCursorInput>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootMintEventArgs = {\n distinct_on?: InputMaybe<Array<MintEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintEventOrderBy>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type SubscriptionRootMintEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMintEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MintEventStreamCursorInput>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type SubscriptionRootMintOptionEventArgs = {\n distinct_on?: InputMaybe<Array<MintOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintOptionEventOrderBy>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootMintOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMintOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MintOptionEventStreamCursorInput>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootRepayEventArgs = {\n distinct_on?: InputMaybe<Array<RepayEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RepayEventOrderBy>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type SubscriptionRootRepayEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootRepayEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<RepayEventStreamCursorInput>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketOrderBy>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketUserArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketUserByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootTimelockMarketUserStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<TimelockMarketUserStreamCursorInput>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootTimelockMarketStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<TimelockMarketStreamCursorInput>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventArgs = {\n distinct_on?: InputMaybe<Array<UpdateOperatorPermsEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UpdateOperatorPermsEventOrderBy>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UpdateOperatorPermsEventStreamCursorInput>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type SubscriptionRootUserMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootUserMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUserMarketOperatorStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UserMarketOperatorStreamCursorInput>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootUserOptionArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type SubscriptionRootUserOptionByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUserOptionStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UserOptionStreamCursorInput>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type SubscriptionRootMetaArgs = {\n distinct_on?: InputMaybe<Array<MetaSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MetaOrderBy>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type SubscriptionRootMetaStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MetaStreamCursorInput>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type SubscriptionRootChainMetadataArgs = {\n distinct_on?: InputMaybe<Array<ChainMetadataSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ChainMetadataOrderBy>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type SubscriptionRootChainMetadataStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ChainMetadataStreamCursorInput>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type SubscriptionRootRawEventsArgs = {\n distinct_on?: InputMaybe<Array<RawEventsSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RawEventsOrderBy>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\nexport type SubscriptionRootRawEventsByPkArgs = {\n serial: Scalars['Int']['input'];\n};\n\nexport type SubscriptionRootRawEventsStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<RawEventsStreamCursorInput>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\n/** Boolean expression to compare columns of type \"timestamptz\". All fields are combined with logical 'AND'. */\nexport type TimestamptzComparisonExp = {\n _eq?: InputMaybe<Scalars['timestamptz']['input']>;\n _gt?: InputMaybe<Scalars['timestamptz']['input']>;\n _gte?: InputMaybe<Scalars['timestamptz']['input']>;\n _in?: InputMaybe<Array<Scalars['timestamptz']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['timestamptz']['input']>;\n _lte?: InputMaybe<Scalars['timestamptz']['input']>;\n _neq?: InputMaybe<Scalars['timestamptz']['input']>;\n _nin?: InputMaybe<Array<Scalars['timestamptz']['input']>>;\n};\n\nexport type UserOptionFieldsFragment = {\n __typename: 'UserOption';\n id: string;\n optionId: any;\n optionType: any;\n strikeTick: number;\n startTick: number;\n strikePrice: any;\n entryPrice: any;\n expiresAt: any;\n createdAt: any;\n premium: any;\n protocolFee: any;\n realizedPayout: any;\n liquiditiesAtOpen: Array<string>;\n liquiditiesCurrent: Array<string>;\n positionSizeAtOpen: any;\n positionSizeCurrent: any;\n fullyExercised: boolean;\n owner?: {__typename: 'TimelockMarketUser'; address: string} | null;\n market?: {__typename: 'TimelockMarket'; address: string} | null;\n};\n\nexport type GetActiveUserOptionsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n}>;\n\nexport type GetActiveUserOptionsQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetActiveUserOptionsByMarketQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetActiveUserOptionsByMarketQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetClosedUserOptionsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n}>;\n\nexport type GetClosedUserOptionsQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetClosedUserOptionsByMarketQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetClosedUserOptionsByMarketQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetMarketDataQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetMarketDataQuery = {\n __typename: 'query_root';\n TimelockMarket: Array<{\n __typename: 'TimelockMarket';\n id: string;\n address: string;\n vault: string;\n tickSpacing: number;\n optionAssetIsToken0: boolean;\n optionAsset: string;\n payoutAsset: string;\n optionAssetDecimals: number;\n payoutAssetDecimals: number;\n optionAssetSymbol: string;\n payoutAssetSymbol: string;\n optionAssetName: string;\n payoutAssetName: string;\n poolManager: string;\n currency0: string;\n currency1: string;\n fee: number;\n hooks: string;\n }>;\n};\n\nexport type GetMarketVolumeQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetMarketVolumeQuery = {\n __typename: 'query_root';\n TimelockMarket: Array<{\n __typename: 'TimelockMarket';\n id: string;\n address: string;\n optionsCount: any;\n tradersCount: any;\n volume: any;\n }>;\n};\n\nexport type GetUserMarketOperatorsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetUserMarketOperatorsQuery = {\n __typename: 'query_root';\n UserMarketOperator: Array<{\n __typename: 'UserMarketOperator';\n id: string;\n canExtend: boolean;\n canExercise: boolean;\n canTransfer: boolean;\n canMint: boolean;\n spendingApproval: any;\n operator?: {__typename: 'MarketOperator'; address: string} | null;\n }>;\n};\n\nexport type GetOptionEventsQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n optionId: Scalars['numeric']['input'];\n}>;\n\nexport type GetOptionEventsQuery = {\n __typename: 'query_root';\n MintOptionEvent: Array<{\n __typename: 'MintOptionEvent';\n id: string;\n optionType: number;\n strikeTick: number;\n price: any;\n expiresAt: any;\n premium: any;\n protocolFee: any;\n liquidities: Array<string>;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n ExerciseOptionEvent: Array<{\n __typename: 'ExerciseOptionEvent';\n id: string;\n liquidities: Array<string>;\n price: any;\n payout: any;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n ExtendOptionEvent: Array<{\n __typename: 'ExtendOptionEvent';\n id: string;\n premium: any;\n protocolFee: any;\n price: any;\n addedDuration: any;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n};\n\nexport const UserOptionFieldsFragmentDoc = gql`\n fragment UserOptionFields on UserOption {\n id\n optionId\n owner {\n address\n }\n market {\n address\n }\n optionType\n strikeTick\n startTick\n strikePrice\n entryPrice\n expiresAt\n createdAt\n premium\n protocolFee\n realizedPayout\n liquiditiesAtOpen\n liquiditiesCurrent\n positionSizeAtOpen\n positionSizeCurrent\n fullyExercised\n }\n`;\nexport const GetActiveUserOptionsDocument = gql`\n query GetActiveUserOptions($userAddr: String!) {\n UserOption(\n where: {owner: {address: {_eq: $userAddr}}, fullyExercised: {_eq: false}}\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetActiveUserOptionsByMarketDocument = gql`\n query GetActiveUserOptionsByMarket($userAddr: String!, $marketAddr: String!) {\n UserOption(\n where: {\n owner: {address: {_eq: $userAddr}}\n fullyExercised: {_eq: false}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetClosedUserOptionsDocument = gql`\n query GetClosedUserOptions($userAddr: String!) {\n UserOption(\n where: {owner: {address: {_eq: $userAddr}}, fullyExercised: {_eq: true}}\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetClosedUserOptionsByMarketDocument = gql`\n query GetClosedUserOptionsByMarket($userAddr: String!, $marketAddr: String!) {\n UserOption(\n where: {\n owner: {address: {_eq: $userAddr}}\n fullyExercised: {_eq: true}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetMarketDataDocument = gql`\n query GetMarketData($marketAddr: String!) {\n TimelockMarket(where: {address: {_eq: $marketAddr}}, limit: 1) {\n id\n address\n vault\n tickSpacing\n optionAssetIsToken0\n optionAsset\n payoutAsset\n optionAssetDecimals\n payoutAssetDecimals\n optionAssetSymbol\n payoutAssetSymbol\n optionAssetName\n payoutAssetName\n poolManager\n currency0\n currency1\n fee\n hooks\n tickSpacing\n }\n }\n`;\nexport const GetMarketVolumeDocument = gql`\n query GetMarketVolume($marketAddr: String!) {\n TimelockMarket(where: {address: {_eq: $marketAddr}}, limit: 1) {\n id\n address\n optionsCount\n tradersCount\n volume\n }\n }\n`;\nexport const GetUserMarketOperatorsDocument = gql`\n query GetUserMarketOperators($userAddr: String!, $marketAddr: String!) {\n UserMarketOperator(\n where: {\n user: {address: {_eq: $userAddr}}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n id\n operator {\n address\n }\n canExtend\n canExercise\n canTransfer\n canMint\n spendingApproval\n }\n }\n`;\nexport const GetOptionEventsDocument = gql`\n query GetOptionEvents($marketAddr: String!, $optionId: numeric!) {\n MintOptionEvent(\n where: {\n option: {\n optionId: {_eq: $optionId}\n market: {address: {_eq: $marketAddr}}\n }\n }\n limit: 1000\n ) {\n id\n optionType\n strikeTick\n price\n expiresAt\n premium\n protocolFee\n liquidities\n timestamp\n blockNumber\n transactionHash\n }\n ExerciseOptionEvent(\n where: {\n option: {\n market: {address: {_eq: $marketAddr}}\n optionId: {_eq: $optionId}\n }\n }\n limit: 1000\n ) {\n id\n liquidities\n price\n payout\n timestamp\n blockNumber\n transactionHash\n }\n ExtendOptionEvent(\n where: {\n option: {\n market: {address: {_eq: $marketAddr}}\n optionId: {_eq: $optionId}\n }\n }\n limit: 1000\n ) {\n id\n premium\n protocolFee\n price\n addedDuration\n timestamp\n blockNumber\n transactionHash\n }\n }\n`;\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>;\n\nconst defaultWrapper: SdkFunctionWrapper = (\n action,\n _operationName,\n _operationType,\n _variables,\n) => action();\n\nexport function getSdk(\n client: GraphQLClient,\n withWrapper: SdkFunctionWrapper = defaultWrapper,\n) {\n return {\n GetActiveUserOptions(\n variables: GetActiveUserOptionsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetActiveUserOptionsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetActiveUserOptionsQuery>({\n document: GetActiveUserOptionsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetActiveUserOptions',\n 'query',\n variables,\n );\n },\n GetActiveUserOptionsByMarket(\n variables: GetActiveUserOptionsByMarketQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetActiveUserOptionsByMarketQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetActiveUserOptionsByMarketQuery>({\n document: GetActiveUserOptionsByMarketDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetActiveUserOptionsByMarket',\n 'query',\n variables,\n );\n },\n GetClosedUserOptions(\n variables: GetClosedUserOptionsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetClosedUserOptionsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetClosedUserOptionsQuery>({\n document: GetClosedUserOptionsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetClosedUserOptions',\n 'query',\n variables,\n );\n },\n GetClosedUserOptionsByMarket(\n variables: GetClosedUserOptionsByMarketQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetClosedUserOptionsByMarketQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetClosedUserOptionsByMarketQuery>({\n document: GetClosedUserOptionsByMarketDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetClosedUserOptionsByMarket',\n 'query',\n variables,\n );\n },\n GetMarketData(\n variables: GetMarketDataQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetMarketDataQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetMarketDataQuery>({\n document: GetMarketDataDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetMarketData',\n 'query',\n variables,\n );\n },\n GetMarketVolume(\n variables: GetMarketVolumeQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetMarketVolumeQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetMarketVolumeQuery>({\n document: GetMarketVolumeDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetMarketVolume',\n 'query',\n variables,\n );\n },\n GetUserMarketOperators(\n variables: GetUserMarketOperatorsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetUserMarketOperatorsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetUserMarketOperatorsQuery>({\n document: GetUserMarketOperatorsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetUserMarketOperators',\n 'query',\n variables,\n );\n },\n GetOptionEvents(\n variables: GetOptionEventsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetOptionEventsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetOptionEventsQuery>({\n document: GetOptionEventsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetOptionEvents',\n 'query',\n variables,\n );\n },\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;\n","import type {Address, Hex} from 'viem';\n\nexport type MintPerpBody = {\n marketAddr: Address;\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick: number;\n};\n\nexport type ExercisePerpBody = {\n marketAddr: Address;\n optionId: bigint;\n liquidities: bigint[];\n};\n\nexport class PerpsOperator {\n #baseUrl: string;\n auth?: {message: string; signature: Hex};\n\n constructor(baseUrl: string) {\n this.#baseUrl = baseUrl;\n }\n\n #request = async <T>(path: string, body?: unknown) => {\n const url = new URL(path, this.#baseUrl);\n const res = await fetch(url, {\n method: body ? 'POST' : 'GET',\n headers: {\n Connection: 'keep-alive',\n 'Content-Type': 'application/json',\n 'Keep-Alive': 'timeout=120',\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n if (res.ok) {\n const {data} = (await res.json()) as {data: T};\n return data;\n }\n const resText = await res.text();\n\n try {\n const error = JSON.parse(resText) as {error: string};\n throw new Error(`${res.status} ${res.statusText}: ${error.error}`);\n } catch (error) {\n throw new Error(`${res.status} ${res.statusText}: ${resText}`);\n }\n };\n\n getOperatorAddr = async (): Promise<Address> => {\n const {address} = await this.#request<{address: Address}>(\n 'api/operator/address',\n );\n return address;\n };\n\n genAuthMessage = async (userAddr: Address): Promise<string> => {\n const {message} = await this.#request<{message: string}>('api/auth/gen', {\n userAddr,\n });\n return message;\n };\n\n validateAuthMessage = async (message: string, signature: Hex) => {\n const {address, createdAt, validUntil} = await this.#request<{\n address: Address;\n createdAt: number;\n validUntil: number;\n }>('api/auth/validate', {message, signature});\n return {address, createdAt, validUntil};\n };\n\n setAuth = (message: string, signature: Hex) => {\n this.auth = {message, signature};\n };\n\n getUserPerps = async (\n userAddr: Address,\n marketAddr?: Address,\n type?: 'active' | 'closed',\n offset = 0,\n limit = 1000,\n ) => {\n const params = new URLSearchParams({\n offset: offset.toString(),\n limit: limit.toString(),\n });\n if (type) params.append('type', type);\n if (marketAddr) params.append('marketAddr', marketAddr);\n\n const url = `api/positions/${userAddr}?${params.toString()}`;\n\n const data = await this.#request<\n {\n id: string;\n ownerAddr: Address;\n marketAddr: Address;\n optionId: string;\n perpDuration: number;\n expiresAt: number;\n closed: boolean;\n }[]\n >(url);\n\n return data.map(p => ({...p, optionId: BigInt(p.optionId)}));\n };\n\n mintPerp = async (body: MintPerpBody) => {\n if (!this.auth) {\n throw new Error(\n 'Authentication required. Call setAuth() with authMessage and signature before exercising perps.',\n );\n }\n const {txHash, optionId} = await this.#request<{\n txHash: Hex;\n optionId: string;\n }>('api/positions/mint', {\n ...body,\n amount: body.amount.toString(),\n auth: this.auth,\n });\n return {txHash, optionId: BigInt(optionId)};\n };\n\n exercisePerp = async (body: ExercisePerpBody) => {\n if (!this.auth) {\n throw new Error(\n 'Authentication required. Call setAuth() with authMessage and signature before exercising perps.',\n );\n }\n const {txHash, optionId} = await this.#request<{\n txHash: Hex;\n optionId: string;\n }>('api/positions/exercise', {\n ...body,\n optionId: body.optionId.toString(),\n liquidities: body.liquidities.map(l => l.toString()),\n auth: this.auth,\n });\n return {txHash, optionId: BigInt(optionId)};\n };\n}\n","'use client';\nimport type {Address} from 'viem';\nimport React, {createContext, useContext, useMemo, type ReactNode} from 'react';\nimport {GraphQLClient} from 'graphql-request';\n\nimport {getSdk} from '~/generated/graphql';\nimport {type TimelockMarketData} from '~/lib/contracts';\nimport {PerpsOperator} from '~/lib/perpsOperator';\n\ntype TimelockContextValue = {\n marketData: Partial<TimelockMarketData>;\n lensAddr?: Address;\n uniswapMathLensAddr?: Address;\n envioGraphqlUrl?: string;\n graphqlClient?: ReturnType<typeof getSdk>;\n perpsOperator?: PerpsOperator;\n perpsOperatorUrl?: string;\n};\n\nconst TimelockContext = createContext<TimelockContextValue | undefined>(\n undefined,\n);\n\nexport const TimelockProvider = ({\n children,\n marketData,\n envioGraphqlUrl,\n perpsOperatorUrl,\n}: {\n children: ReactNode;\n marketData?: Partial<TimelockMarketData>;\n envioGraphqlUrl?: string;\n perpsOperatorUrl?: string;\n}) => {\n const graphqlClient = useMemo(() => {\n if (envioGraphqlUrl) {\n return getSdk(new GraphQLClient(envioGraphqlUrl));\n }\n return undefined;\n }, [envioGraphqlUrl]);\n\n const perpsOperator = useMemo(() => {\n if (perpsOperatorUrl) {\n return new PerpsOperator(perpsOperatorUrl);\n }\n return undefined;\n }, [perpsOperatorUrl]);\n\n const contextValue = useMemo(\n () => ({\n marketData: marketData || {},\n envioGraphqlUrl,\n perpsOperator,\n graphqlClient,\n perpsOperatorUrl,\n }),\n [\n marketData,\n envioGraphqlUrl,\n perpsOperator,\n graphqlClient,\n perpsOperatorUrl,\n ],\n );\n\n return (\n <TimelockContext.Provider value={contextValue}>\n {children}\n </TimelockContext.Provider>\n );\n};\n\nexport const useCurrentMarket = () => {\n const context = useContext(TimelockContext);\n\n if (context === undefined) {\n throw new Error('useCurrentMarket must be used within a TimelockProvider');\n }\n return context.marketData;\n};\n\nexport const useTimelockConfig = () => {\n const context = useContext(TimelockContext);\n\n if (context === undefined) {\n throw new Error('useConfig must be used within a TimelockProvider');\n }\n return context;\n};\n","import {useQuery} from '@tanstack/react-query';\nimport {usePublicClient} from 'wagmi';\nimport {getTimelockLens, getStateView} from '../lib/contracts';\n\nexport const useLens = () => {\n const client = usePublicClient();\n\n const {data: timelockLens} = useQuery({\n queryKey: ['timelockLens', client?.uid],\n queryFn: () => (client ? getTimelockLens(client) : undefined),\n enabled: !!client,\n });\n const {data: stateView} = useQuery({\n queryKey: ['stateView', client?.uid],\n queryFn: () => (client ? getStateView(client) : undefined),\n enabled: !!client,\n });\n return {timelockLens, stateView};\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\n\nimport {useLens} from '../useLens';\nimport {useReadContract} from 'wagmi';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMarketData = (marketAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getMarketData',\n args: marketAddr ? [marketAddr] : undefined,\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMarketState = (marketAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getMarketState',\n args: marketAddr ? [marketAddr] : undefined,\n });\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\n\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport const useMarketVolume = (marketAddr: Address | undefined) => {\n const {graphqlClient} = useTimelockConfig();\n\n return useQuery({\n queryKey: ['marketVolume', marketAddr?.toLowerCase() || '--'],\n queryFn: async () => {\n const result = await graphqlClient!.GetMarketVolume({\n marketAddr: marketAddr!.toLowerCase(),\n });\n return {\n ...result.TimelockMarket[0],\n address: result.TimelockMarket[0].address as Address,\n volume: BigInt(result.TimelockMarket[0].volume),\n optionsCount: BigInt(result.TimelockMarket[0].optionsCount),\n tradersCount: BigInt(result.TimelockMarket[0].tradersCount),\n };\n },\n enabled: !!marketAddr && !!graphqlClient,\n });\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\n\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useLens} from '~/hooks/useLens';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMaxPositionSize = (\n marketAddr: Address | undefined,\n strikeTick?: number,\n maxSteps = 100,\n) => {\n const {timelockLens} = useLens();\n const {optionAssetDecimals} = useMarketData(marketAddr);\n\n const {data, ...rest} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: strikeTick ? 'getMaxPositionSizes' : 'getMaxATMPositionSizes',\n args: marketAddr\n ? strikeTick\n ? [marketAddr, strikeTick, maxSteps]\n : [marketAddr, maxSteps]\n : undefined,\n query: {enabled: !!marketAddr && !!timelockLens},\n // @ts-ignore\n gas: 100_000_000n,\n });\n\n const maxCallSize =\n data && optionAssetDecimals\n ? wrapAmount(data[0], optionAssetDecimals)\n : undefined;\n const maxPutSize =\n data && optionAssetDecimals\n ? wrapAmount(data[1], optionAssetDecimals)\n : undefined;\n\n return {maxCallSize, maxPutSize, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport type {PoolKey} from './usePoolData';\nimport {useLens} from '~/hooks/useLens';\nimport {statelessStateViewAbi} from '~/abis/statelessStateView';\n\nexport const useCurrentTick = (poolManager?: Address, poolKey?: PoolKey) => {\n const {stateView} = useLens();\n\n return useReadContract({\n address: stateView?.address,\n abi: statelessStateViewAbi,\n functionName: 'getSlot0',\n args: poolManager && poolKey ? [poolManager, poolKey] : undefined,\n query: {\n enabled: !!poolManager && !!poolKey,\n refetchInterval: 3000,\n select: (raw: readonly [bigint, number, number, number]) => {\n const sqrtPriceX96 = raw[0];\n const currentTick = raw[1];\n return {currentTick, sqrtPriceX96};\n },\n },\n });\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type PoolKey = {\n currency0: Address;\n currency1: Address;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\nexport type UniswapPoolData = ReturnType<typeof usePoolData>;\n\nexport const usePoolData = (poolManager?: Address, poolKey?: PoolKey) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getPoolData',\n args: poolManager && poolKey ? [poolManager, poolKey] : undefined,\n query: {enabled: !!poolManager && !!poolKey},\n });\n const _default = useMemo(\n () => ({\n token0: poolKey?.currency0,\n token1: poolKey?.currency1,\n tickSpacing: poolKey?.tickSpacing,\n fee: poolKey?.fee,\n }),\n [poolKey],\n );\n return (data || _default) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, erc20Abi, maxUint256} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {getErc20} from '~/lib/contracts';\n\nexport const useApproval = () => {\n const client = useClient();\n const {address} = useConnection();\n const {\n writeContractAsync,\n data: hash,\n isPending,\n error,\n reset,\n } = useWriteContract();\n\n const askForApproval = async (\n tokenAddress: Address,\n spenderAddress: Address,\n amount: bigint,\n ) => {\n if (!client || !address) throw new Error('Wallet not connected');\n\n const tokenContract = getErc20(tokenAddress, client);\n\n const allowance = await tokenContract.read.allowance([\n address,\n spenderAddress,\n ]);\n\n if (allowance < amount) {\n const approvalHash = await writeContractAsync({\n address: tokenAddress,\n abi: erc20Abi,\n functionName: 'approve',\n args: [spenderAddress, maxUint256],\n });\n await waitForTransactionReceipt(client, {hash: approvalHash});\n }\n };\n return {askForApproval, hash, isPending, error, reset};\n};\n","export const sleep = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n","import type {Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useLens} from '~/hooks/useLens';\n\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {getNearestValidStrikeTick} from '~/lib/liquidityUtils';\nimport {sleep} from '~/lib/utils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useMintOption = (marketAddr: Address | undefined) => {\n const {payoutAsset, vault, poolManager, poolKey, optionAssetIsToken0} =\n useMarketData(marketAddr);\n\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n const {refetch: refetchCurrentTick} = useCurrentTick(poolManager, poolKey);\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n const {timelockLens} = useLens();\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const mintOption = async ({\n optionType,\n amount,\n duration,\n strikeTick,\n maxSteps = 100,\n }: {\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick?: number;\n maxSteps?: number;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n if (!timelockLens) throw new Error('Timelock lens not available');\n if (!tickSpacing) throw new Error('Pool data not available');\n\n if (!vault || !payoutAsset || optionAssetIsToken0 === undefined) {\n throw new Error('Market data not available');\n }\n const {data: {currentTick} = {}} = await refetchCurrentTick();\n\n if (currentTick === undefined) {\n throw new Error('Could not fetch current tick');\n }\n strikeTick = getNearestValidStrikeTick(\n optionType,\n optionAssetIsToken0,\n tickSpacing,\n currentTick,\n strikeTick,\n );\n const market = getTimelockMarket(marketAddr, client);\n\n const [premium, protocolFee] = await market.read.calculatePremium([\n optionType === 'CALL' ? 0 : 1,\n amount,\n strikeTick,\n duration,\n 0,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'mintOption',\n args: [\n address,\n optionType === 'CALL' ? 0 : 1,\n amount,\n strikeTick,\n duration,\n maxPremium,\n maxSteps,\n await timelockLens.read.getRefTick([vault, strikeTick]),\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: mintOption});\n};\n","import type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {usePoolData, type PoolKey} from './usePoolData';\n\nimport {getPriceAtTick, getPriceAtSqrtPriceX96} from '~/lib/liquidityUtils';\nimport {wrapPrice} from '~/lib/numberUtils';\n\nexport const usePriceAtTick = (\n poolManager?: Address,\n poolKey?: PoolKey,\n tick?: number,\n) => {\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const priceBigInt = useMemo(\n () => (tick !== undefined ? getPriceAtTick(tick) : undefined),\n [tick],\n );\n const price = useMemo(\n () =>\n priceBigInt && token0Decimals && token1Decimals\n ? wrapPrice(priceBigInt, token0Decimals, token1Decimals)\n : undefined,\n [priceBigInt, token0Decimals, token1Decimals],\n );\n return price;\n};\n\nexport const usePriceAtSqrtPriceX96 = (\n poolManager?: Address,\n poolKey?: PoolKey,\n sqrtPriceX96?: bigint,\n) => {\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const priceBigInt = useMemo(\n () =>\n sqrtPriceX96 !== undefined\n ? getPriceAtSqrtPriceX96(sqrtPriceX96)\n : undefined,\n [sqrtPriceX96],\n );\n const price = useMemo(\n () =>\n priceBigInt && token0Decimals && token1Decimals\n ? wrapPrice(priceBigInt, token0Decimals, token1Decimals)\n : undefined,\n [priceBigInt, token0Decimals, token1Decimals],\n );\n return price;\n};\n","import {useMemo} from 'react';\nimport type {Address} from 'viem';\nimport type {PoolKey} from './usePoolData';\nimport {usePriceAtSqrtPriceX96} from './usePriceAtTick';\nimport {useCurrentTick} from './useCurrentTick';\n\nexport const useCurrentPrice = (poolManager?: Address, poolKey?: PoolKey) => {\n const {data: {sqrtPriceX96, currentTick} = {}} = useCurrentTick(\n poolManager,\n poolKey,\n );\n const currentPrice = usePriceAtSqrtPriceX96(\n poolManager,\n poolKey,\n sqrtPriceX96,\n );\n return useMemo(\n () => ({currentPrice, sqrtPriceX96, currentTick}),\n [currentPrice, currentTick],\n );\n};\n","import {encodeAbiParameters, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentPrice} from '~/hooks/pool/useCurrentPrice';\nimport {useLens} from '~/hooks/useLens';\n\nimport {sleep} from '~/lib/utils';\nimport {swappers} from '~/lib/contracts';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useExerciseOption = (marketAddr: Address | undefined) => {\n const {vault, poolManager, poolKey} = useMarketData(marketAddr);\n const {timelockLens} = useLens();\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n const {writeContractAsync} = useWriteContract();\n\n const {sqrtPriceX96} = useCurrentPrice(poolManager, poolKey);\n\n const exerciseOption = async ({\n option,\n liquidities,\n }: {\n option: OptionData;\n liquidities: readonly bigint[];\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n if (!timelockLens) throw new Error('Timelock lens not available');\n if (!vault) throw new Error('Vault not available');\n if (!poolKey) throw new Error('Pool data not available');\n if (!sqrtPriceX96) throw new Error('Current price not available');\n\n const swapper = swappers[client.chain.id];\n if (!swapper) throw new Error('Swapper not available');\n\n const minSqrtPrice = (sqrtPriceX96 * 9n) / 10n;\n const maxSqrtPrice = (sqrtPriceX96 * 11n) / 10n;\n\n const refTick = await timelockLens.read.getRefTick([\n vault,\n option.startTick,\n ]);\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'exerciseOption',\n args: [\n option.optionId,\n liquidities,\n 0n,\n swapper,\n encodeAbiParameters(\n [\n {\n type: 'tuple',\n components: [\n {type: 'address', name: 'currency0'},\n {type: 'address', name: 'currency1'},\n {type: 'uint24', name: 'fee'},\n {type: 'int24', name: 'tickSpacing'},\n {type: 'address', name: 'hooks'},\n ],\n },\n {type: 'uint160'},\n {type: 'uint160'},\n ],\n [poolKey, minSqrtPrice, maxSqrtPrice],\n ),\n refTick,\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: exerciseOption});\n};\n","import {useMemo} from 'react';\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentPrice} from '~/hooks/pool/useCurrentPrice';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {\n token0ToToken1,\n token0ToToken1AtTick,\n token1ToToken0,\n token1ToToken0AtTick,\n} from '~/lib/liquidityUtils';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {getPayoutAtPrice} from '~/lib/optionUtils';\n\nexport const useOptionPnl = (option: OptionData) => {\n const {marketAddr, optionType, strikeTick, positionSizeCurrent} = option;\n\n const {poolManager, poolKey, optionAssetIsToken0, payoutAssetDecimals} =\n useMarketData(marketAddr);\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n\n const {currentPrice} = useCurrentPrice(poolManager, poolKey);\n\n const displayPnl = useMemo(() => {\n if (\n optionAssetIsToken0 === undefined ||\n currentPrice === undefined ||\n !payoutAssetDecimals\n )\n return undefined;\n\n const strikeSize = optionAssetIsToken0\n ? token0ToToken1AtTick(positionSizeCurrent, strikeTick)\n : token1ToToken0AtTick(positionSizeCurrent, strikeTick);\n\n const currentSize = optionAssetIsToken0\n ? token0ToToken1(positionSizeCurrent, currentPrice.scaled)\n : token1ToToken0(positionSizeCurrent, currentPrice.scaled);\n\n const delta = currentSize - strikeSize;\n const pnl = optionType === 'CALL' ? delta : -delta;\n\n return wrapAmount(pnl, payoutAssetDecimals);\n }, [\n strikeTick,\n optionType,\n optionAssetIsToken0,\n currentPrice,\n positionSizeCurrent,\n payoutAssetDecimals,\n ]);\n\n const unrealizedPayout = useMemo(() => {\n if (\n !payoutAssetDecimals ||\n !currentPrice ||\n !tickSpacing ||\n optionAssetIsToken0 === undefined\n )\n return undefined;\n\n const payout = getPayoutAtPrice(\n option,\n option.liquiditiesCurrent,\n currentPrice.scaled,\n tickSpacing,\n optionAssetIsToken0,\n );\n return wrapAmount(payout, payoutAssetDecimals);\n }, [\n currentPrice,\n tickSpacing,\n optionType,\n payoutAssetDecimals,\n optionAssetIsToken0,\n ]);\n\n return {unrealizedPayout, displayPnl};\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useMemo} from 'react';\n\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useMarketData} from '~/hooks/market/useMarketData';\n\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {roundTick} from '~/lib/liquidityUtils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useOptionPremium = (\n marketAddr: Address | undefined,\n optionType: 'CALL' | 'PUT',\n optionAmount?: bigint,\n addedDuration?: number,\n remainingDuration = 0,\n strikeTick?: number,\n) => {\n const {poolManager, poolKey, payoutAssetDecimals, optionAssetIsToken0} =\n useMarketData(marketAddr);\n\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n\n const strikeTickRounded = useMemo(() => {\n if (!tickSpacing || currentTick === undefined) {\n return undefined;\n }\n let strikeTickRounded = roundTick(strikeTick ?? currentTick, tickSpacing);\n\n if (\n (optionType === 'CALL' && optionAssetIsToken0) ||\n (optionType === 'PUT' && !optionAssetIsToken0)\n ) {\n strikeTickRounded += tickSpacing;\n }\n return strikeTickRounded;\n }, [currentTick, tickSpacing, optionType, optionAssetIsToken0, strikeTick]);\n\n const {data: [premium, protocolFee] = []} = useReadContract({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'calculatePremium',\n args:\n strikeTickRounded !== undefined &&\n optionAmount !== undefined &&\n addedDuration !== undefined\n ? [\n optionType === 'CALL' ? 0 : 1,\n optionAmount,\n strikeTickRounded,\n addedDuration,\n remainingDuration,\n ]\n : undefined,\n });\n\n return useMemo(() => {\n if (\n premium === undefined ||\n protocolFee === undefined ||\n payoutAssetDecimals === undefined\n ) {\n return {};\n }\n return {\n premium: wrapAmount(premium, payoutAssetDecimals),\n protocolFee: wrapAmount(protocolFee, payoutAssetDecimals),\n totalPremium: wrapAmount(premium + protocolFee, payoutAssetDecimals),\n };\n }, [premium, protocolFee, payoutAssetDecimals]);\n};\n","import type {Address} from 'viem';\nimport {useQuery, type NonUndefinedGuard} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport type OptionData = NonUndefinedGuard<\n ReturnType<typeof useUserOptions>['data']\n>[number];\n\nconst useUserOptions = (\n userAddr: Address | undefined,\n marketAddr: Address | '*' | undefined,\n active = false,\n) => {\n const {graphqlClient} = useTimelockConfig();\n\n userAddr = userAddr?.toLowerCase() as Address | undefined;\n marketAddr = marketAddr?.toLowerCase() as Address | '*' | undefined;\n\n return useQuery({\n queryKey: ['userOptions', userAddr || '--', active],\n queryFn: async () => {\n if (!graphqlClient || !userAddr || !marketAddr) return [];\n\n const data = await (marketAddr === '*'\n ? active\n ? graphqlClient.GetActiveUserOptions({userAddr})\n : graphqlClient.GetClosedUserOptions({userAddr})\n : active\n ? graphqlClient.GetActiveUserOptionsByMarket({\n userAddr,\n marketAddr,\n })\n : graphqlClient.GetClosedUserOptionsByMarket({\n userAddr,\n marketAddr,\n }));\n\n return data.UserOption.map(option => ({\n ...option,\n optionId: BigInt(option.optionId),\n marketAddr: option.market!.address as Address,\n ownerAddr: option.owner!.address as Address,\n optionType: option.optionType as 'CALL' | 'PUT',\n createdAt: new Date(Number(option.createdAt) * 1000),\n expiresAt: new Date(Number(option.expiresAt) * 1000),\n premium: BigInt(option.premium),\n protocolFee: BigInt(option.protocolFee),\n realizedPayout: BigInt(option.realizedPayout),\n liquiditiesAtOpen: option.liquiditiesAtOpen.map(l => BigInt(l)),\n liquiditiesCurrent: option.liquiditiesCurrent.map(l => BigInt(l)),\n positionSizeAtOpen: BigInt(option.positionSizeAtOpen),\n positionSizeCurrent: BigInt(option.positionSizeCurrent),\n strikePrice: BigInt(option.strikePrice),\n entryPrice: BigInt(option.entryPrice),\n })).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n },\n enabled: !!userAddr && !!marketAddr && !!graphqlClient,\n });\n};\n\nexport const useActiveUserOptions = (\n userAddr?: Address,\n marketAddr?: Address | '*',\n) => {\n return useUserOptions(userAddr, marketAddr, true);\n};\n\nexport const useClosedUserOptions = (\n userAddr?: Address,\n marketAddr?: Address | '*',\n) => {\n return useUserOptions(userAddr, marketAddr, false);\n};\n","import {maxUint256, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {sleep} from '~/lib/utils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useExtendOption = (marketAddr: Address | undefined) => {\n const {payoutAsset} = useMarketData(marketAddr);\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const extendOption = async ({\n option,\n duration,\n }: {\n option: OptionData;\n duration: number;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n\n if (!marketAddr || !payoutAsset) {\n throw new Error('Market address not available');\n }\n const market = getTimelockMarket(marketAddr, client);\n\n const remainingDuration = Math.max(\n 0,\n Math.floor((option.expiresAt.getTime() - Date.now()) / 1000),\n );\n const [premium, protocolFee] = await market.read.calculatePremium([\n option.optionType === 'CALL' ? 0 : 1,\n option.positionSizeCurrent,\n option.strikeTick,\n duration,\n remainingDuration,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'extendOption',\n args: [option.optionId, duration, maxUint256],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: extendOption});\n};\n","import type {Address} from 'viem';\nimport {useQuery, type NonUndefinedGuard} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport type OptionEvent = NonUndefinedGuard<\n ReturnType<typeof useOptionTimeline>['data']\n>[number];\nexport type MintOptionEvent = Extract<OptionEvent, {type: 'mint'}>;\nexport type ExerciseOptionEvent = Extract<OptionEvent, {type: 'exercise'}>;\nexport type ExtendEvent = Extract<OptionEvent, {type: 'extend'}>;\n\nexport const useOptionTimeline = (\n marketAddr: Address | undefined,\n optionId: bigint | undefined,\n) => {\n const {graphqlClient} = useTimelockConfig();\n marketAddr = marketAddr?.toLowerCase() as Address | undefined;\n\n return useQuery({\n queryKey: [\n 'optionTimeline',\n marketAddr || '--',\n optionId?.toString() || '--',\n ],\n queryFn: async () => {\n if (!graphqlClient || !marketAddr || optionId === undefined) {\n return [];\n }\n const result = await graphqlClient.GetOptionEvents({\n marketAddr: marketAddr,\n optionId: optionId.toString(),\n });\n\n const mintEvents = result.MintOptionEvent.map(event => ({\n id: event.id,\n optionType: event.optionType as 0 | 1,\n strikeTick: event.strikeTick,\n price: BigInt(event.price),\n premium: BigInt(event.premium),\n protocolFee: BigInt(event.protocolFee),\n liquidities: event.liquidities.map(l => BigInt(l)),\n timestamp: new Date(Number(event.timestamp) * 1000),\n expiresAt: new Date(Number(event.expiresAt) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n const exerciseEvents = result.ExerciseOptionEvent.map(event => ({\n id: event.id,\n payout: BigInt(event.payout),\n price: BigInt(event.price),\n liquidities: event.liquidities.map(l => BigInt(l)),\n timestamp: new Date(Number(event.timestamp) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n const extendEvents = result.ExtendOptionEvent.map(event => ({\n id: event.id,\n premium: BigInt(event.premium),\n protocolFee: BigInt(event.protocolFee),\n price: BigInt(event.price),\n addedDuration: BigInt(event.addedDuration),\n timestamp: new Date(Number(event.timestamp) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n\n type MintEvent = {type: 'mint'; data: (typeof mintEvents)[number]};\n type ExerciseEvent = {\n type: 'exercise';\n data: (typeof exerciseEvents)[number];\n };\n type ExtendEvent = {type: 'extend'; data: (typeof extendEvents)[number]};\n type OptionEvent = MintEvent | ExerciseEvent | ExtendEvent;\n\n const events: OptionEvent[] = [\n ...mintEvents.map(data => ({type: 'mint', data}) as const),\n ...exerciseEvents.map(data => ({type: 'exercise', data}) as const),\n ...extendEvents.map(data => ({type: 'extend', data}) as const),\n ];\n return events.sort(\n (a, b) => a.data.timestamp.getTime() - b.data.timestamp.getTime(),\n );\n },\n enabled: !!marketAddr && optionId !== undefined && !!graphqlClient,\n });\n};\n","import type {Address, Hex} from 'viem';\nimport {useEffect} from 'react';\nimport {useConnection, useSignMessage} from 'wagmi';\nimport {z} from 'zod';\nimport {useMutation, useQuery} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nconst ZHex = z\n .string()\n .regex(/^0x[a-fA-F0-9]+$/, 'Invalid hex string')\n .transform(v => v as Hex);\n\nconst ZSavedSignature = z.object({\n signature: ZHex,\n message: z.string(),\n});\n\nconst getSavedSignature = (userAddr: Address) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n const raw = localStorage.getItem(key);\n if (!raw) return;\n\n try {\n return ZSavedSignature.parse(JSON.parse(raw));\n } catch (error) {\n clearSignature(userAddr);\n throw new Error('Invalid stored signature: ' + raw);\n }\n};\n\nconst saveSignature = (userAddr: Address, message: string, signature: Hex) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n const data = JSON.stringify({message, signature});\n localStorage.setItem(key, data);\n};\n\nconst clearSignature = (userAddr: Address) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n localStorage.removeItem(key);\n};\n\nexport const usePerpsOperator = () => {\n const {address: userAddr} = useConnection();\n const {perpsOperatorUrl, perpsOperator: operator} = useTimelockConfig();\n const {signMessageAsync} = useSignMessage();\n\n const {data: address} = useQuery({\n queryKey: ['perpsOperatorAddr', perpsOperatorUrl || '--'],\n queryFn: () => operator?.getOperatorAddr(),\n staleTime: 10000,\n refetchInterval: 10000,\n enabled: !!operator,\n });\n\n const validateAndSetAuth = async (message: string, signature: Hex) => {\n if (!operator || !userAddr) return;\n\n try {\n const {address, validUntil} = await operator.validateAuthMessage(\n message,\n signature,\n );\n if (validUntil < Date.now()) {\n throw new Error('Signature expired');\n }\n if (address.toLowerCase() !== userAddr.toLowerCase()) {\n throw new Error('Valid signature but different user address');\n }\n operator.setAuth(message, signature);\n } catch (error) {\n clearSignature(userAddr);\n console.error(error);\n }\n };\n\n useEffect(() => {\n if (!userAddr || !operator) return;\n\n const sig = getSavedSignature(userAddr);\n if (!sig) return;\n\n void validateAndSetAuth(sig.message, sig.signature);\n }, [userAddr, operator]);\n\n const signMessage = useMutation({\n mutationFn: async () => {\n if (!operator) throw new Error('Operator not initialized');\n if (!userAddr) throw new Error('Wallet not connected');\n\n const message = await operator.genAuthMessage(userAddr);\n const signature = await signMessageAsync({message});\n\n saveSignature(userAddr, message, signature);\n operator.setAuth(message, signature);\n },\n });\n\n return {operator, address, signMessage};\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\n\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport const useUserOperators = (userAddr?: Address, marketAddr?: Address) => {\n const {graphqlClient} = useTimelockConfig();\n\n return useQuery({\n queryKey: [\n 'userOperators',\n userAddr?.toLowerCase() || '--',\n marketAddr?.toLowerCase() || '--',\n ],\n queryFn: async () => {\n if (!userAddr || !marketAddr) return undefined;\n\n const result = await graphqlClient!.GetUserMarketOperators({\n userAddr: userAddr.toLowerCase(),\n marketAddr: marketAddr.toLowerCase(),\n });\n return result.UserMarketOperator.map(operator => ({\n ...operator,\n spendingApproval: BigInt(operator.spendingApproval),\n operatorAddr: operator.operator!.address.toLowerCase(),\n }));\n },\n enabled: !!userAddr && !!marketAddr && !!graphqlClient,\n });\n};\n","import type {Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useSetOperatorPerms = (marketAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {writeContractAsync} = useWriteContract();\n\n const setOperatorPerms = async ({\n operator,\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n }: {\n operator: Address;\n canExtend: boolean;\n canExercise: boolean;\n canTransfer: boolean;\n canMint: boolean;\n spendingApproval: bigint;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'setOperatorPerms',\n args: [\n operator,\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n void queryClient.invalidateQueries({queryKey: ['userOperators']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return hash;\n };\n return useMutation({mutationFn: setOperatorPerms});\n};\n","import {maxUint256, type Address} from 'viem';\nimport {useConnection, useClient} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {usePerpsOperator} from './usePerpsOperator';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useUserOperators} from '~/hooks/operators/useUserOperators';\nimport {useSetOperatorPerms} from '~/hooks/operators/useSetOperatorPerms';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {getNearestValidStrikeTick} from '~/lib/liquidityUtils';\nimport {sleep} from '~/lib/utils';\n\nexport const useMintPerp = (marketAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {\n operator,\n address: operatorAddr,\n signMessage: {mutateAsync: signMessage},\n } = usePerpsOperator();\n\n const {poolManager, poolKey, optionAssetIsToken0, payoutAsset} =\n useMarketData(marketAddr);\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n\n const {askForApproval} = useApproval();\n const {mutateAsync: setOperatorPerms} = useSetOperatorPerms(marketAddr);\n\n const {refetch: refetchOperators} = useUserOperators(address, marketAddr);\n const {refetch: refetchCurrentTick} = useCurrentTick(poolManager, poolKey);\n\n const mintPerp = async (data: {\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick?: number;\n }) => {\n const {optionType, amount, duration, strikeTick} = data;\n\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not found');\n if (!tickSpacing) throw new Error('Pool data not found');\n\n if (!operator || !operatorAddr) {\n throw new Error('Operator address not found');\n }\n if (optionAssetIsToken0 === undefined || !payoutAsset) {\n throw new Error('Market data not found');\n }\n if (!operator.auth) await signMessage();\n\n const market = getTimelockMarket(marketAddr, client);\n\n const {data: {currentTick} = {}} = await refetchCurrentTick();\n\n if (currentTick === undefined) {\n throw new Error('Could not fetch current tick');\n }\n const {data: operators = []} = await refetchOperators();\n\n const userPerms = operatorAddr\n ? operators.find(\n o => o.operatorAddr.toLowerCase() === operatorAddr.toLowerCase(),\n )\n : undefined;\n\n const validStrikeTick = getNearestValidStrikeTick(\n optionType,\n optionAssetIsToken0,\n tickSpacing,\n currentTick,\n strikeTick,\n );\n const [premium, protocolFee] = await market.read.calculatePremium([\n optionType === 'CALL' ? 0 : 1,\n amount,\n validStrikeTick,\n duration,\n 0,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n\n const hasEnoughPerms =\n userPerms &&\n userPerms.canMint &&\n userPerms.canExtend &&\n userPerms.canExercise &&\n userPerms.spendingApproval > maxPremium;\n\n if (!hasEnoughPerms) {\n await setOperatorPerms({\n operator: operatorAddr,\n canMint: true,\n canExtend: true,\n canExercise: true,\n canTransfer: userPerms?.canTransfer || false,\n spendingApproval: maxUint256,\n });\n }\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n await operator.mintPerp({\n marketAddr: marketAddr,\n amount: amount,\n optionType: optionType,\n duration: duration,\n strikeTick: validStrikeTick,\n });\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n };\n return useMutation({mutationFn: mintPerp});\n};\n","import {useMutation, useQueryClient} from '@tanstack/react-query';\nimport {usePerpsOperator} from './usePerpsOperator';\nimport type {ExercisePerpBody} from '~/lib/perpsOperator';\nimport {sleep} from '~/lib/utils';\n\nexport const useClosePerp = () => {\n const queryClient = useQueryClient();\n const {\n operator,\n signMessage: {mutateAsync: signMessage},\n } = usePerpsOperator();\n\n return useMutation({\n mutationFn: async (body: ExercisePerpBody) => {\n if (!operator) throw new Error('Operator not connected');\n if (!operator.auth) await signMessage();\n await operator.exercisePerp(body);\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n },\n });\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\nimport {usePerpsOperator} from './usePerpsOperator';\n\nexport const useUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n type: 'active' | 'closed' | undefined,\n) => {\n const {operator} = usePerpsOperator();\n\n userAddr = userAddr?.toLowerCase() as Address;\n marketAddr = marketAddr?.toLowerCase() as Address;\n\n return useQuery({\n queryKey: ['userPerps', type, userAddr || '-', marketAddr || '-'],\n queryFn: () => operator?.getUserPerps(userAddr!, marketAddr, type),\n enabled: !!userAddr,\n staleTime: 10000,\n refetchInterval: 10000,\n });\n};\n\nexport const useActiveUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n) => {\n return useUserPerps(marketAddr, userAddr, 'active');\n};\n\nexport const useClosedUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n) => {\n return useUserPerps(marketAddr, userAddr, 'closed');\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useClient, useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type TokenData = ReturnType<typeof useTokenData>;\n\nexport const useTokenData = (tokenAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n const client = useClient();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getTokenData',\n args: tokenAddr ? [tokenAddr] : undefined,\n query: {enabled: !!tokenAddr && !!client},\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useMemo} from 'react';\nimport {useTokenData} from './useTokenData';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {erc20Abi} from '~/abis/erc20';\n\nexport const useTokenBalance = (token?: Address, user?: Address) => {\n const {decimals} = useTokenData(token);\n\n const {data: raw, ...rest} = useReadContract({\n address: token,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: user ? [user] : undefined,\n query: {enabled: !!token && !!user},\n });\n const balance = useMemo(\n () =>\n raw !== undefined && decimals !== undefined\n ? wrapAmount(raw, decimals)\n : undefined,\n [raw, decimals],\n );\n\n return {data: balance, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {useReadContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useTokenBalance} from '~/hooks/tokens/useTokenBalance';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useOperatorPerms = (\n marketAddr?: Address,\n userAddr?: Address,\n operatorAddr?: Address,\n) => {\n const {payoutAsset} = useMarketData(marketAddr);\n const {data: payoutAssetBalance} = useTokenBalance(payoutAsset, userAddr);\n\n const {data, ...rest} = useReadContract({\n abi: optionsMarketAbi,\n address: marketAddr,\n functionName: 'operatorPerms',\n args: [userAddr!, operatorAddr!],\n query: {\n enabled: !!userAddr && !!operatorAddr,\n refetchInterval: 5000,\n },\n });\n const [canExtend, canExercise, canTransfer, canMint, spendingApproval] =\n data || [];\n\n const min = (a: bigint, b: bigint) => (a < b ? a : b);\n\n const effectiveApproval =\n spendingApproval && payoutAssetBalance\n ? min(spendingApproval, payoutAssetBalance.scaled)\n : 0n;\n\n const d = useMemo(\n () => ({\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n effectiveApproval,\n }),\n [\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n effectiveApproval,\n ],\n );\n return {data: d, ...rest};\n};\n","import {useQuery} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useChainId} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {getPriceHistory, type PriceResolution} from '~/lib/price';\n\nexport const usePriceHistory = (\n pool: Address | undefined,\n token: 0 | 1,\n resolution: PriceResolution,\n startTimestamp: Date,\n endTimestamp: Date,\n) => {\n const chainId = useChainId();\n\n return useQuery({\n queryKey: [\n 'priceHistory',\n pool,\n chainId,\n token,\n resolution,\n startTimestamp,\n endTimestamp,\n ],\n queryFn: () =>\n getPriceHistory(pool!, token, resolution, startTimestamp, endTimestamp),\n enabled: !!pool && startTimestamp < endTimestamp,\n staleTime: 60 * 1000, // Consider data stale after 1 minute\n gcTime: 5 * 60 * 1000, // Keep in cache for 5 minutes\n retry: 2,\n });\n};\n\nexport const useMarketPriceHistory = (\n marketAddr: Address | undefined,\n resolution: PriceResolution,\n startTimestamp: Date,\n endTimestamp: Date,\n) => {\n const {pool, optionAssetIsToken0} = useMarketData(marketAddr);\n\n return usePriceHistory(\n pool!,\n optionAssetIsToken0 ? 0 : 1,\n resolution,\n startTimestamp,\n endTimestamp,\n );\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {lensAbi} from '~/abis/lens';\nimport {useLens} from '../useLens';\n\nexport const useVaultData = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getVaultData',\n args: vaultAddr ? [vaultAddr] : undefined,\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, encodeFunctionData} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useWaitForTransactionReceipt, useClient} from 'wagmi';\n\nimport {useCurrentTick} from '../pool/useCurrentTick';\nimport {useVaultData} from './useVaultData';\nimport {useLens} from '../useLens';\n\nimport {singleOwnerVaultAbi} from '~/abis/singleOwnerVault';\n\ninterface BurnPosition {\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}\n\nexport const useBurnLiquidity = (vaultAddr: Address | undefined) => {\n const client = useClient();\n const {timelockLens} = useLens();\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n\n const {writeContractAsync, data: hash, isPending, error} = useWriteContract();\n\n const {isLoading: isConfirming, isSuccess} = useWaitForTransactionReceipt({\n hash,\n });\n\n const burn = async (\n tickLower: number,\n tickUpper: number,\n liquidity: bigint,\n ) => {\n if (!client) throw new Error('Wallet not connected');\n\n if (!vaultAddr || !timelockLens) {\n throw new Error('Vault/lens not available');\n }\n const refTick = await timelockLens.read.getRefTick([vaultAddr, tickLower]);\n\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'burn',\n args: [tickLower, tickUpper, liquidity, refTick],\n });\n await waitForTransactionReceipt(client, {hash});\n return hash;\n };\n\n const burnMultiple = async (positions: BurnPosition[]) => {\n if (!client) throw new Error('Wallet not connected');\n\n if (!currentTick) {\n throw new Error('Current tick not available');\n }\n if (positions.length === 0) {\n throw new Error('No positions to burn');\n }\n if (!timelockLens || !vaultAddr) {\n throw new Error('Vault/lens not available');\n }\n if (positions.length === 1) {\n await burn(\n positions[0].tickLower,\n positions[0].tickUpper,\n positions[0].liquidity,\n );\n } else {\n const refTick = await timelockLens.read.getRefTick([\n vaultAddr,\n Math.min(...positions.map(p => p.tickLower)),\n ]);\n const multicallData = positions.map(p =>\n encodeFunctionData({\n abi: singleOwnerVaultAbi,\n functionName: 'burn',\n args: [p.tickLower, p.tickUpper, p.liquidity, refTick],\n }),\n );\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'multicall',\n args: [multicallData],\n });\n await waitForTransactionReceipt(client, {hash});\n }\n };\n\n return {\n burnMultiple,\n burn,\n hash,\n isPending,\n isConfirming,\n isSuccess,\n error,\n isLoading: isPending || isConfirming,\n };\n};\n","import {zeroAddress, type Address} from 'viem';\nimport {useReadContract} from 'wagmi';\n\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type LiquidityBlockData = ReturnType<\n typeof useLiquidityBlocks\n>['data'][0];\n\nexport const useLiquidityBlocks = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data: blocks = [], ...rest} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getAllBlocks',\n args: [vaultAddr || zeroAddress],\n query: {enabled: !!vaultAddr},\n });\n return {data: blocks, ...rest};\n};\n","import {encodeFunctionData, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {useVaultData} from './useVaultData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useLens} from '~/hooks/useLens';\n\nimport {getAmountsFromLiquidity} from '~/lib/liquidityUtils';\nimport {singleOwnerVaultAbi} from '~/abis/singleOwnerVault';\n\nexport const batchGetAmountsFromLiquidity = (\n tickLowers: number[],\n tickUppers: number[],\n liquidities: bigint[],\n currentTick: number,\n) => {\n let totalAmount0 = 0n;\n let totalAmount1 = 0n;\n\n const amounts0: bigint[] = [];\n const amounts1: bigint[] = [];\n\n for (const [i, tickLower] of tickLowers.entries()) {\n const [amount0, amount1] = getAmountsFromLiquidity(\n tickLower,\n tickUppers[i],\n liquidities[i],\n currentTick,\n );\n totalAmount0 += amount0;\n totalAmount1 += amount1;\n amounts0.push(amount0);\n amounts1.push(amount1);\n }\n return {totalAmount0, totalAmount1, amounts0, amounts1};\n};\n\ninterface MintPositionParams {\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}\n\nexport const useMintLiquidity = (vaultAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {timelockLens} = useLens();\n\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n const {token0, token1} = usePoolData(poolManager, poolKey);\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const processApproval = async (params: MintPositionParams[]) => {\n if (currentTick === undefined || !token0 || !token1 || !vaultAddr) {\n throw new Error('Current tick not available');\n }\n const {totalAmount0, totalAmount1} = batchGetAmountsFromLiquidity(\n params.map(p => p.tickLower),\n params.map(p => p.tickUpper),\n params.map(p => p.liquidity),\n currentTick,\n );\n await askForApproval(token0, vaultAddr, totalAmount0);\n await askForApproval(token1, vaultAddr, totalAmount1);\n };\n\n return useMutation({\n mutationFn: async (params: MintPositionParams | MintPositionParams[]) => {\n if (!client) throw new Error('Wallet not connected');\n if (currentTick === undefined) {\n throw new Error('Current tick not available');\n }\n if (!timelockLens || !vaultAddr) {\n throw new Error('Vault/lens not available');\n }\n if (!Array.isArray(params)) {\n params = [params];\n }\n if (params.length === 0) {\n throw new Error('No positions to mint');\n }\n await processApproval(params);\n\n const refTicks = await timelockLens.read.batchGetRefTick([\n vaultAddr,\n params.map(position => position.tickLower),\n ]);\n const multicallData = params.map((p, i) =>\n encodeFunctionData({\n abi: singleOwnerVaultAbi,\n functionName: 'mint',\n args: [p.tickLower, p.tickUpper, p.liquidity, refTicks[i]],\n }),\n );\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'multicall',\n args: [multicallData],\n });\n await waitForTransactionReceipt(client, {hash});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n },\n });\n};\n","import {useReadContract} from 'wagmi';\nimport type {Address} from 'viem';\n\nimport {useLens} from '../useLens';\nimport {useVaultData} from './useVaultData';\nimport {usePoolData} from '../pool/usePoolData';\n\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {lensAbi} from '~/abis/lens';\nimport {useMemo} from 'react';\n\nexport const useVaultTVL = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const {data, refetch} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getVaultTVL',\n args: [vaultAddr!],\n query: {enabled: !!vaultAddr && !!timelockLens},\n });\n\n return useMemo(() => {\n if (!token0Decimals || !token1Decimals || !data) return {};\n\n const total0 = wrapAmount(data[0], token0Decimals);\n const total1 = wrapAmount(data[1], token1Decimals);\n const borrowed0 = wrapAmount(data[2], token0Decimals);\n const borrowed1 = wrapAmount(data[3], token1Decimals);\n const tvlAs0 = wrapAmount(data[4], token0Decimals);\n const tvlAs1 = wrapAmount(data[5], token1Decimals);\n const blocksCount = data[6];\n\n return {\n tvlAs0,\n tvlAs1,\n total0,\n total1,\n borrowed0,\n borrowed1,\n blocksCount,\n refetch,\n };\n }, [data, token0Decimals, token1Decimals, refetch]);\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useGuardianGlobalState = (guardianAddr?: Address) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getGlobalGuardianState',\n args: guardianAddr ? [guardianAddr] : undefined,\n });\n};\n","import type {Address} from 'viem';\nimport {usePublicClient, useWriteContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {guardianAbi} from '~/abis/guardian';\nimport {useGuardianGlobalState} from './useGuardianGlobalState';\n\nexport const usePauseGlobalTrading = (marketAddr: Address | undefined) => {\n const {guardian} = useMarketData(marketAddr);\n const {data: {globalBurnPaused, globalMintPaused} = {}, refetch} =\n useGuardianGlobalState(guardian);\n\n const publicClient = usePublicClient();\n const {writeContractAsync, ...rest} = useWriteContract();\n\n const pauseGlobalTrading = async (paused: boolean) => {\n if (!marketAddr) {\n throw new Error('Market address is required');\n }\n if (!guardian) {\n throw new Error('Could not load guardian address');\n }\n if (!globalMintPaused || !globalBurnPaused) {\n throw new Error('Could not load global mint or burn paused state');\n }\n if (!publicClient) {\n throw new Error('Could not load public client');\n }\n const hash = await writeContractAsync({\n address: guardian,\n abi: guardianAbi,\n functionName: 'pauseGlobal',\n args: [globalMintPaused.paused, globalBurnPaused.paused, paused],\n });\n await publicClient.waitForTransactionReceipt({hash});\n void refetch();\n\n return hash;\n };\n return {pauseGlobalTrading, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useWriteContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {guardianAbi} from '~/abis/guardian';\n\nexport const usePauseMarketTrading = (marketAddr: Address | undefined) => {\n const {guardian} = useMarketData(marketAddr);\n const {writeContractAsync, ...rest} = useWriteContract();\n\n const pauseMarketTrading = async (paused: boolean) => {\n if (!marketAddr) {\n throw new Error('Market address is required');\n }\n if (!guardian) {\n throw new Error('Could not load guardian address');\n }\n return await writeContractAsync({\n address: guardian,\n abi: guardianAbi,\n functionName: 'pauseMarket',\n args: [marketAddr, paused],\n });\n };\n return {pauseMarketTrading, ...rest};\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useFeeRates = (feeStrategy?: Address) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: feeStrategy ? [feeStrategy] : undefined,\n functionName: 'getFeeRates',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, decodeEventLog} from 'viem';\nimport {useChainId, useWriteContract, usePublicClient} from 'wagmi';\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useMarketState} from '~/hooks/market/useMarketState';\nimport {useFeeRates} from './useFeeRates';\nimport {timelockFactories} from '~/lib/contracts';\nimport {factoryAbi} from '~/abis/factory';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useUpdateMarketFees = (marketAddr: Address) => {\n const {writeContractAsync, ...rest} = useWriteContract();\n const queryClient = useQueryClient();\n const publicClient = usePublicClient();\n const chainId = useChainId();\n\n const {data: {feeStrategy, optionPricing} = {}} = useMarketState(marketAddr);\n\n const {openingFeeRate, baseFeeRate, minOpeningFee, minBaseFee, feeRecipient} =\n useFeeRates(feeStrategy);\n\n const updateMarketFees = async (rates: {\n openingFeeRate?: number;\n baseFeeRate?: number;\n minOpeningFee?: bigint;\n minBaseFee?: bigint;\n feeRecipient?: Address;\n }) => {\n if (\n openingFeeRate === undefined ||\n baseFeeRate === undefined ||\n minOpeningFee === undefined ||\n minBaseFee === undefined ||\n feeRecipient === undefined\n ) {\n throw new Error('Missing current fee rates');\n }\n if (!optionPricing) {\n throw new Error('Could not load market state');\n }\n if (!publicClient) {\n throw new Error('Public client not available');\n }\n const factoryAddr = timelockFactories[chainId].toLowerCase() as Address;\n\n const hash = await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployFeeStrategy',\n args: [\n rates.openingFeeRate ?? openingFeeRate,\n rates.baseFeeRate ?? baseFeeRate,\n rates.minOpeningFee ?? minOpeningFee,\n rates.minBaseFee ?? minBaseFee,\n rates.feeRecipient ?? feeRecipient,\n ],\n });\n const receipt = await publicClient.waitForTransactionReceipt({hash});\n\n const deployEvent = receipt.logs.find(\n log => log.address.toLowerCase() === factoryAddr,\n );\n if (!deployEvent) {\n throw new Error('DeployFeeStrategy event not found');\n }\n\n const decodedEvent = decodeEventLog({\n abi: factoryAbi,\n data: deployEvent.data,\n topics: deployEvent.topics,\n });\n if (decodedEvent.eventName !== 'DeployFeeStrategy') {\n throw new Error('Unexpected event');\n }\n const newFeeStrategy = decodedEvent.args.feeStrategy;\n\n const hash2 = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'updateAddresses',\n args: [optionPricing, newFeeStrategy],\n });\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return {deployHash: hash, updateHash: hash2, newFeeStrategy};\n };\n\n return {updateMarketFees, ...rest};\n};\n","import {type Address, decodeAbiParameters} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type StaticPricingParams = {\n model: 'static';\n dailyFundingRate: number;\n minFundingAmount: bigint;\n};\n\nexport type OptionPricingParams = {\n model: 'bsm';\n logicContract: Address;\n iv: number;\n riskFreeRate: number;\n minPremiumDailyRate: number;\n minPremiumAmount: bigint;\n};\nexport type PricingParams = StaticPricingParams | OptionPricingParams;\n\nexport const usePricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getPricingParams',\n args: pricingAddr ? [pricingAddr] : undefined,\n query: {\n select: ([pricingModel, rawData]): PricingParams => {\n if (pricingModel === 0) {\n // OptionPricing: (uint8, address, uint32, uint32, uint32, uint256)\n const [\n logicContract,\n iv,\n riskFreeRate,\n minPremiumDailyRate,\n minPremiumAmount,\n ] = decodeAbiParameters(\n [\n {name: 'logicContract', type: 'address'},\n {name: 'iv', type: 'uint32'},\n {name: 'riskFreeRate', type: 'uint32'},\n {name: 'minPremiumDailyRate', type: 'uint32'},\n {name: 'minPremiumAmount', type: 'uint256'},\n ],\n rawData as `0x${string}`,\n );\n\n return {\n model: 'bsm',\n logicContract,\n iv,\n riskFreeRate,\n minPremiumDailyRate,\n minPremiumAmount,\n };\n } else if (pricingModel === 1) {\n const [dailyFundingRate, minFundingAmount] = decodeAbiParameters(\n [\n {name: 'dailyFundingRate', type: 'uint32'},\n {name: 'minFundingAmount', type: 'uint128'},\n ],\n rawData as `0x${string}`,\n );\n return {model: 'static', dailyFundingRate, minFundingAmount};\n }\n throw new Error('Unknown pricing model');\n },\n },\n });\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useOptionPricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: pricingAddr ? [pricingAddr] : undefined,\n functionName: 'getOptionPricingParams',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useStaticPricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: pricingAddr ? [pricingAddr] : undefined,\n functionName: 'getStaticPricingParams',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, decodeEventLog} from 'viem';\nimport {useChainId, useWriteContract, usePublicClient} from 'wagmi';\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useMarketState} from '~/hooks/market/useMarketState';\nimport {\n usePricingParams,\n type OptionPricingParams,\n type StaticPricingParams,\n} from './usePricingParams';\nimport {timelockFactories} from '~/lib/contracts';\nimport {factoryAbi} from '~/abis/factory';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useUpdateMarketPricing = (marketAddr: Address | undefined) => {\n const {writeContractAsync, ...rest} = useWriteContract();\n const queryClient = useQueryClient();\n const publicClient = usePublicClient();\n const chainId = useChainId();\n\n const {data: {feeStrategy, optionPricing} = {}, error: stateError} =\n useMarketState(marketAddr);\n\n const {data: pricingData, error: pricingError} =\n usePricingParams(optionPricing);\n\n const updateMarketPricing = async <T extends 'static' | 'bsm'>(\n data: T extends 'static'\n ? Partial<StaticPricingParams> & {model: 'static'}\n : Partial<OptionPricingParams> & {model: 'bsm'},\n ) => {\n if (!marketAddr) {\n throw new Error('Market address not found');\n }\n if (!pricingData) {\n throw new Error(\n 'Market pricing data not available: ' + pricingError?.message,\n );\n }\n if (!publicClient) {\n throw new Error('Public client not available');\n }\n if (!feeStrategy) {\n throw new Error('Fee strategy not available: ' + stateError?.message);\n }\n const factoryAddr = timelockFactories[chainId].toLowerCase() as Address;\n\n if (data.model === 'static' && pricingData.model === 'static') {\n data.dailyFundingRate ??= pricingData.dailyFundingRate;\n data.minFundingAmount ??= pricingData.minFundingAmount;\n }\n if (data.model === 'bsm' && pricingData.model === 'bsm') {\n data.logicContract ??= pricingData.logicContract;\n data.iv ??= pricingData.iv;\n data.riskFreeRate ??= pricingData.riskFreeRate;\n data.minPremiumDailyRate ??= pricingData.minPremiumDailyRate;\n data.minPremiumAmount ??= pricingData.minPremiumAmount;\n }\n if (data.model !== pricingData.model) {\n if (data.model === 'static') {\n if (data.dailyFundingRate === undefined) {\n throw new Error(\n 'dailyFundingRate is required when switching to static model',\n );\n }\n if (data.minFundingAmount === undefined) {\n throw new Error(\n 'minFundingAmount is required when switching to static model',\n );\n }\n } else {\n if (data.logicContract === undefined) {\n throw new Error(\n 'logicContract is required when switching to option model',\n );\n }\n if (data.iv === undefined) {\n throw new Error('iv is required when switching to option model');\n }\n if (data.riskFreeRate === undefined) {\n throw new Error(\n 'riskFreeRate is required when switching to option model',\n );\n }\n if (data.minPremiumDailyRate === undefined) {\n throw new Error(\n 'minPremiumDailyRate is required when switching to option model',\n );\n }\n if (data.minPremiumAmount === undefined) {\n throw new Error(\n 'minPremiumAmount is required when switching to option model',\n );\n }\n }\n }\n\n const hash =\n data.model === 'static'\n ? await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployStaticPerpsPricing',\n args: [data.dailyFundingRate!, data.minFundingAmount!],\n })\n : await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployOptionPricing',\n args: [\n data.logicContract!,\n data.iv!,\n data.riskFreeRate!,\n data.minPremiumDailyRate!,\n data.minPremiumAmount!,\n ],\n });\n const receipt = await publicClient.waitForTransactionReceipt({hash});\n\n const deployEvent = receipt.logs.find(\n log => log.address.toLowerCase() === factoryAddr,\n );\n if (!deployEvent) {\n throw new Error('DeployFeeStrategy event not found');\n }\n\n const decodedEvent = decodeEventLog({\n abi: factoryAbi,\n data: deployEvent.data,\n topics: deployEvent.topics,\n });\n\n if (\n decodedEvent.eventName !== 'DeployStaticPerpsPricing' &&\n decodedEvent.eventName !== 'DeployOptionPricing'\n ) {\n throw new Error('Unexpected event');\n }\n const pricingAddr = decodedEvent.args.pricing;\n\n const hash2 = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'updateAddresses',\n args: [pricingAddr, feeStrategy],\n });\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return {deployHash: hash, updateHash: hash2, newPricingAddr: pricingAddr};\n };\n\n return {updateMarketPricing, ...rest};\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["defaultWrapper: SdkFunctionWrapper","#baseUrl","#request","strikeTickRounded","address","erc20Abi","hash","amounts0: bigint[]","amounts1: bigint[]"],"sources":["../src/generated/graphql.ts","../src/lib/perpsOperator.ts","../src/providers/TimelockProvider.tsx","../src/hooks/useLens.ts","../src/hooks/market/useMarketData.ts","../src/hooks/market/useMarketState.ts","../src/hooks/market/useMarketVolume.ts","../src/hooks/options/useMaxPositionSize.ts","../src/hooks/pool/useCurrentTick.ts","../src/hooks/pool/usePoolData.ts","../src/hooks/tokens/useApproval.ts","../src/lib/utils.ts","../src/hooks/options/useMintOption.ts","../src/hooks/pool/usePriceAtTick.ts","../src/hooks/pool/useCurrentPrice.ts","../src/hooks/options/useExerciseOption.ts","../src/hooks/options/useOptionPnl.ts","../src/hooks/options/useOptionPremium.ts","../src/hooks/options/useUserOptions.ts","../src/hooks/options/useExtendOption.ts","../src/hooks/options/useOptionTimeline.ts","../src/hooks/perps/usePerpsOperator.ts","../src/hooks/operators/useUserOperators.ts","../src/hooks/operators/useSetOperatorPerms.ts","../src/hooks/perps/useMintPerp.ts","../src/hooks/perps/useClosePerp.ts","../src/hooks/perps/useUserPerps.ts","../src/hooks/tokens/useTokenData.ts","../src/hooks/tokens/useTokenBalance.ts","../src/hooks/operators/useOperatorPerms.ts","../src/hooks/pool/usePriceHistory.ts","../src/hooks/vault/useVaultData.ts","../src/hooks/vault/useBurnLiquidity.ts","../src/hooks/vault/useLiquidityBlocks.ts","../src/hooks/vault/useMintLiquidity.ts","../src/hooks/vault/useVaultTVL.ts","../src/hooks/guardian/useGuardianGlobalState.ts","../src/hooks/guardian/usePauseGlobalTrading.ts","../src/hooks/guardian/usePauseMarketTrading.ts","../src/hooks/fees/useFeeRates.ts","../src/hooks/fees/useUpdateMarketFees.ts","../src/hooks/pricing/usePricingParams.ts","../src/hooks/pricing/useOptionPricingParams.ts","../src/hooks/pricing/useStaticPricingParams.ts","../src/hooks/pricing/useUpdateMarketPricing.ts"],"sourcesContent":["import {GraphQLClient, RequestOptions} from 'graphql-request';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends {[key: string]: unknown}> = {[K in keyof T]: T[K]};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<T extends {[key: string]: unknown}, K extends keyof T> = {\n [_ in K]?: never;\n};\nexport type Incremental<T> =\n | T\n | {[P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never};\ntype GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: {input: string; output: string};\n String: {input: string; output: string};\n Boolean: {input: boolean; output: boolean};\n Int: {input: number; output: number};\n Float: {input: number; output: number};\n jsonb: {input: any; output: any};\n numeric: {input: any; output: any};\n optiontype: {input: any; output: any};\n timestamptz: {input: any; output: any};\n};\n\n/** Boolean expression to compare columns of type \"Boolean\". All fields are combined with logical 'AND'. */\nexport type BooleanComparisonExp = {\n _eq?: InputMaybe<Scalars['Boolean']['input']>;\n _gt?: InputMaybe<Scalars['Boolean']['input']>;\n _gte?: InputMaybe<Scalars['Boolean']['input']>;\n _in?: InputMaybe<Array<Scalars['Boolean']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['Boolean']['input']>;\n _lte?: InputMaybe<Scalars['Boolean']['input']>;\n _neq?: InputMaybe<Scalars['Boolean']['input']>;\n _nin?: InputMaybe<Array<Scalars['Boolean']['input']>>;\n};\n\n/** columns and relationships of \"BorrowEvent\" */\nexport type BorrowEvent = {\n __typename: 'BorrowEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"BorrowEvent\". All fields are combined with a logical 'AND'. */\nexport type BorrowEventBoolExp = {\n _and?: InputMaybe<Array<BorrowEventBoolExp>>;\n _not?: InputMaybe<BorrowEventBoolExp>;\n _or?: InputMaybe<Array<BorrowEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"BorrowEvent\". */\nexport type BorrowEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"BorrowEvent\" */\nexport type BorrowEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"BorrowEvent\" */\nexport type BorrowEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: BorrowEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type BorrowEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"BurnEvent\" */\nexport type BurnEvent = {\n __typename: 'BurnEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"BurnEvent\". All fields are combined with a logical 'AND'. */\nexport type BurnEventBoolExp = {\n _and?: InputMaybe<Array<BurnEventBoolExp>>;\n _not?: InputMaybe<BurnEventBoolExp>;\n _or?: InputMaybe<Array<BurnEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"BurnEvent\". */\nexport type BurnEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"BurnEvent\" */\nexport type BurnEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"BurnEvent\" */\nexport type BurnEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: BurnEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type BurnEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEvent = {\n __typename: 'ExerciseOptionEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidities: Array<Scalars['String']['output']>;\n /** An object relationship */\n option?: Maybe<UserOption>;\n option_id: Scalars['String']['output'];\n payout: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"ExerciseOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type ExerciseOptionEventBoolExp = {\n _and?: InputMaybe<Array<ExerciseOptionEventBoolExp>>;\n _not?: InputMaybe<ExerciseOptionEventBoolExp>;\n _or?: InputMaybe<Array<ExerciseOptionEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidities?: InputMaybe<StringArrayComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n payout?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"ExerciseOptionEvent\". */\nexport type ExerciseOptionEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidities?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n option_id?: InputMaybe<OrderBy>;\n payout?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidities'\n /** column name */\n | 'option_id'\n /** column name */\n | 'payout'\n /** column name */\n | 'price'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"ExerciseOptionEvent\" */\nexport type ExerciseOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ExerciseOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ExerciseOptionEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidities?: InputMaybe<Array<Scalars['String']['input']>>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n payout?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"ExtendOptionEvent\" */\nexport type ExtendOptionEvent = {\n __typename: 'ExtendOptionEvent';\n addedDuration: Scalars['numeric']['output'];\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n option?: Maybe<UserOption>;\n option_id: Scalars['String']['output'];\n premium: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"ExtendOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type ExtendOptionEventBoolExp = {\n _and?: InputMaybe<Array<ExtendOptionEventBoolExp>>;\n _not?: InputMaybe<ExtendOptionEventBoolExp>;\n _or?: InputMaybe<Array<ExtendOptionEventBoolExp>>;\n addedDuration?: InputMaybe<NumericComparisonExp>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"ExtendOptionEvent\". */\nexport type ExtendOptionEventOrderBy = {\n addedDuration?: InputMaybe<OrderBy>;\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n option_id?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"ExtendOptionEvent\" */\nexport type ExtendOptionEventSelectColumn =\n /** column name */\n | 'addedDuration'\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'option_id'\n /** column name */\n | 'premium'\n /** column name */\n | 'price'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"ExtendOptionEvent\" */\nexport type ExtendOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ExtendOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ExtendOptionEventStreamCursorValueInput = {\n addedDuration?: InputMaybe<Scalars['numeric']['input']>;\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to compare columns of type \"Int\". All fields are combined with logical 'AND'. */\nexport type IntComparisonExp = {\n _eq?: InputMaybe<Scalars['Int']['input']>;\n _gt?: InputMaybe<Scalars['Int']['input']>;\n _gte?: InputMaybe<Scalars['Int']['input']>;\n _in?: InputMaybe<Array<Scalars['Int']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['Int']['input']>;\n _lte?: InputMaybe<Scalars['Int']['input']>;\n _neq?: InputMaybe<Scalars['Int']['input']>;\n _nin?: InputMaybe<Array<Scalars['Int']['input']>>;\n};\n\n/** columns and relationships of \"MarketOperator\" */\nexport type MarketOperator = {\n __typename: 'MarketOperator';\n address: Scalars['String']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An array relationship */\n userPermissions: Array<UserMarketOperator>;\n};\n\n/** columns and relationships of \"MarketOperator\" */\nexport type MarketOperatorUserPermissionsArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** Boolean expression to filter rows from the table \"MarketOperator\". All fields are combined with a logical 'AND'. */\nexport type MarketOperatorBoolExp = {\n _and?: InputMaybe<Array<MarketOperatorBoolExp>>;\n _not?: InputMaybe<MarketOperatorBoolExp>;\n _or?: InputMaybe<Array<MarketOperatorBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n userPermissions?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** Ordering options when selecting data from \"MarketOperator\". */\nexport type MarketOperatorOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n userPermissions_aggregate?: InputMaybe<UserMarketOperatorAggregateOrderBy>;\n};\n\n/** select columns of table \"MarketOperator\" */\nexport type MarketOperatorSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id';\n\n/** Streaming cursor of the table \"MarketOperator\" */\nexport type MarketOperatorStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MarketOperatorStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MarketOperatorStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"MintEvent\" */\nexport type MintEvent = {\n __typename: 'MintEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"MintEvent\". All fields are combined with a logical 'AND'. */\nexport type MintEventBoolExp = {\n _and?: InputMaybe<Array<MintEventBoolExp>>;\n _not?: InputMaybe<MintEventBoolExp>;\n _or?: InputMaybe<Array<MintEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"MintEvent\". */\nexport type MintEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"MintEvent\" */\nexport type MintEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"MintEvent\" */\nexport type MintEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MintEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MintEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"MintOptionEvent\" */\nexport type MintOptionEvent = {\n __typename: 'MintOptionEvent';\n blockNumber: Scalars['numeric']['output'];\n expiresAt: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidities: Array<Scalars['String']['output']>;\n /** An object relationship */\n option?: Maybe<UserOption>;\n optionType: Scalars['Int']['output'];\n option_id: Scalars['String']['output'];\n owner: Scalars['String']['output'];\n premium: Scalars['numeric']['output'];\n price: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n strikeTick: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"MintOptionEvent\". All fields are combined with a logical 'AND'. */\nexport type MintOptionEventBoolExp = {\n _and?: InputMaybe<Array<MintOptionEventBoolExp>>;\n _not?: InputMaybe<MintOptionEventBoolExp>;\n _or?: InputMaybe<Array<MintOptionEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n expiresAt?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidities?: InputMaybe<StringArrayComparisonExp>;\n option?: InputMaybe<UserOptionBoolExp>;\n optionType?: InputMaybe<IntComparisonExp>;\n option_id?: InputMaybe<StringComparisonExp>;\n owner?: InputMaybe<StringComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n price?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n strikeTick?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"MintOptionEvent\". */\nexport type MintOptionEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidities?: InputMaybe<OrderBy>;\n option?: InputMaybe<UserOptionOrderBy>;\n optionType?: InputMaybe<OrderBy>;\n option_id?: InputMaybe<OrderBy>;\n owner?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n price?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"MintOptionEvent\" */\nexport type MintOptionEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'expiresAt'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidities'\n /** column name */\n | 'optionType'\n /** column name */\n | 'option_id'\n /** column name */\n | 'owner'\n /** column name */\n | 'premium'\n /** column name */\n | 'price'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'strikeTick'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"MintOptionEvent\" */\nexport type MintOptionEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MintOptionEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MintOptionEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n expiresAt?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidities?: InputMaybe<Array<Scalars['String']['input']>>;\n optionType?: InputMaybe<Scalars['Int']['input']>;\n option_id?: InputMaybe<Scalars['String']['input']>;\n owner?: InputMaybe<Scalars['String']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n price?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n strikeTick?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"RepayEvent\" */\nexport type RepayEvent = {\n __typename: 'RepayEvent';\n blockNumber: Scalars['numeric']['output'];\n id: Scalars['String']['output'];\n liquidity: Scalars['numeric']['output'];\n tickLower: Scalars['Int']['output'];\n tickUpper: Scalars['Int']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n userAddr: Scalars['String']['output'];\n vaultAddr: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"RepayEvent\". All fields are combined with a logical 'AND'. */\nexport type RepayEventBoolExp = {\n _and?: InputMaybe<Array<RepayEventBoolExp>>;\n _not?: InputMaybe<RepayEventBoolExp>;\n _or?: InputMaybe<Array<RepayEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquidity?: InputMaybe<NumericComparisonExp>;\n tickLower?: InputMaybe<IntComparisonExp>;\n tickUpper?: InputMaybe<IntComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n userAddr?: InputMaybe<StringComparisonExp>;\n vaultAddr?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"RepayEvent\". */\nexport type RepayEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquidity?: InputMaybe<OrderBy>;\n tickLower?: InputMaybe<OrderBy>;\n tickUpper?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n userAddr?: InputMaybe<OrderBy>;\n vaultAddr?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"RepayEvent\" */\nexport type RepayEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'id'\n /** column name */\n | 'liquidity'\n /** column name */\n | 'tickLower'\n /** column name */\n | 'tickUpper'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash'\n /** column name */\n | 'userAddr'\n /** column name */\n | 'vaultAddr';\n\n/** Streaming cursor of the table \"RepayEvent\" */\nexport type RepayEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: RepayEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type RepayEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquidity?: InputMaybe<Scalars['numeric']['input']>;\n tickLower?: InputMaybe<Scalars['Int']['input']>;\n tickUpper?: InputMaybe<Scalars['Int']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n userAddr?: InputMaybe<Scalars['String']['input']>;\n vaultAddr?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'. */\nexport type StringArrayComparisonExp = {\n /** is the array contained in the given array value */\n _contained_in?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the array contain the given value */\n _contains?: InputMaybe<Array<Scalars['String']['input']>>;\n _eq?: InputMaybe<Array<Scalars['String']['input']>>;\n _gt?: InputMaybe<Array<Scalars['String']['input']>>;\n _gte?: InputMaybe<Array<Scalars['String']['input']>>;\n _in?: InputMaybe<Array<Array<Scalars['String']['input']>>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Array<Scalars['String']['input']>>;\n _lte?: InputMaybe<Array<Scalars['String']['input']>>;\n _neq?: InputMaybe<Array<Scalars['String']['input']>>;\n _nin?: InputMaybe<Array<Array<Scalars['String']['input']>>>;\n};\n\n/** Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'. */\nexport type StringComparisonExp = {\n _eq?: InputMaybe<Scalars['String']['input']>;\n _gt?: InputMaybe<Scalars['String']['input']>;\n _gte?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given case-insensitive pattern */\n _ilike?: InputMaybe<Scalars['String']['input']>;\n _in?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the column match the given POSIX regular expression, case insensitive */\n _iregex?: InputMaybe<Scalars['String']['input']>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n /** does the column match the given pattern */\n _like?: InputMaybe<Scalars['String']['input']>;\n _lt?: InputMaybe<Scalars['String']['input']>;\n _lte?: InputMaybe<Scalars['String']['input']>;\n _neq?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given case-insensitive pattern */\n _nilike?: InputMaybe<Scalars['String']['input']>;\n _nin?: InputMaybe<Array<Scalars['String']['input']>>;\n /** does the column NOT match the given POSIX regular expression, case insensitive */\n _niregex?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given pattern */\n _nlike?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given POSIX regular expression, case sensitive */\n _nregex?: InputMaybe<Scalars['String']['input']>;\n /** does the column NOT match the given SQL regular expression */\n _nsimilar?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given POSIX regular expression, case sensitive */\n _regex?: InputMaybe<Scalars['String']['input']>;\n /** does the column match the given SQL regular expression */\n _similar?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarket = {\n __typename: 'TimelockMarket';\n address: Scalars['String']['output'];\n currency0: Scalars['String']['output'];\n currency1: Scalars['String']['output'];\n fee: Scalars['Int']['output'];\n hooks: Scalars['String']['output'];\n id: Scalars['String']['output'];\n optionAsset: Scalars['String']['output'];\n optionAssetDecimals: Scalars['Int']['output'];\n optionAssetIsToken0: Scalars['Boolean']['output'];\n optionAssetName: Scalars['String']['output'];\n optionAssetSymbol: Scalars['String']['output'];\n /** An array relationship */\n options: Array<UserOption>;\n optionsCount: Scalars['numeric']['output'];\n payoutAsset: Scalars['String']['output'];\n payoutAssetDecimals: Scalars['Int']['output'];\n payoutAssetName: Scalars['String']['output'];\n payoutAssetSymbol: Scalars['String']['output'];\n poolManager: Scalars['String']['output'];\n tickSpacing: Scalars['Int']['output'];\n /** An array relationship */\n traders: Array<TimelockMarketUser>;\n tradersCount: Scalars['numeric']['output'];\n vault: Scalars['String']['output'];\n volume: Scalars['numeric']['output'];\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarketOptionsArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarket\" */\nexport type TimelockMarketTradersArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUser = {\n __typename: 'TimelockMarketUser';\n address: Scalars['String']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An array relationship */\n operators: Array<UserMarketOperator>;\n /** An array relationship */\n options: Array<UserOption>;\n optionsCount: Scalars['numeric']['output'];\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUserOperatorsArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\n/** columns and relationships of \"TimelockMarketUser\" */\nexport type TimelockMarketUserOptionsArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\n/** order by aggregate values of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserAggregateOrderBy = {\n avg?: InputMaybe<TimelockMarketUserAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<TimelockMarketUserMaxOrderBy>;\n min?: InputMaybe<TimelockMarketUserMinOrderBy>;\n stddev?: InputMaybe<TimelockMarketUserStddevOrderBy>;\n stddev_pop?: InputMaybe<TimelockMarketUserStddevPopOrderBy>;\n stddev_samp?: InputMaybe<TimelockMarketUserStddevSampOrderBy>;\n sum?: InputMaybe<TimelockMarketUserSumOrderBy>;\n var_pop?: InputMaybe<TimelockMarketUserVarPopOrderBy>;\n var_samp?: InputMaybe<TimelockMarketUserVarSampOrderBy>;\n variance?: InputMaybe<TimelockMarketUserVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserAvgOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"TimelockMarketUser\". All fields are combined with a logical 'AND'. */\nexport type TimelockMarketUserBoolExp = {\n _and?: InputMaybe<Array<TimelockMarketUserBoolExp>>;\n _not?: InputMaybe<TimelockMarketUserBoolExp>;\n _or?: InputMaybe<Array<TimelockMarketUserBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operators?: InputMaybe<UserMarketOperatorBoolExp>;\n options?: InputMaybe<UserOptionBoolExp>;\n optionsCount?: InputMaybe<NumericComparisonExp>;\n};\n\n/** order by max() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserMaxOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserMinOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"TimelockMarketUser\". */\nexport type TimelockMarketUserOrderBy = {\n address?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operators_aggregate?: InputMaybe<UserMarketOperatorAggregateOrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n options_aggregate?: InputMaybe<UserOptionAggregateOrderBy>;\n};\n\n/** select columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'optionsCount';\n\n/** order by stddev() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevPopOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStddevSampOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"TimelockMarketUser\" */\nexport type TimelockMarketUserStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: TimelockMarketUserStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type TimelockMarketUserStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n optionsCount?: InputMaybe<Scalars['numeric']['input']>;\n};\n\n/** order by sum() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserSumOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarPopOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarSampOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"TimelockMarketUser\" */\nexport type TimelockMarketUserVarianceOrderBy = {\n optionsCount?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"TimelockMarket\". All fields are combined with a logical 'AND'. */\nexport type TimelockMarketBoolExp = {\n _and?: InputMaybe<Array<TimelockMarketBoolExp>>;\n _not?: InputMaybe<TimelockMarketBoolExp>;\n _or?: InputMaybe<Array<TimelockMarketBoolExp>>;\n address?: InputMaybe<StringComparisonExp>;\n currency0?: InputMaybe<StringComparisonExp>;\n currency1?: InputMaybe<StringComparisonExp>;\n fee?: InputMaybe<IntComparisonExp>;\n hooks?: InputMaybe<StringComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n optionAsset?: InputMaybe<StringComparisonExp>;\n optionAssetDecimals?: InputMaybe<IntComparisonExp>;\n optionAssetIsToken0?: InputMaybe<BooleanComparisonExp>;\n optionAssetName?: InputMaybe<StringComparisonExp>;\n optionAssetSymbol?: InputMaybe<StringComparisonExp>;\n options?: InputMaybe<UserOptionBoolExp>;\n optionsCount?: InputMaybe<NumericComparisonExp>;\n payoutAsset?: InputMaybe<StringComparisonExp>;\n payoutAssetDecimals?: InputMaybe<IntComparisonExp>;\n payoutAssetName?: InputMaybe<StringComparisonExp>;\n payoutAssetSymbol?: InputMaybe<StringComparisonExp>;\n poolManager?: InputMaybe<StringComparisonExp>;\n tickSpacing?: InputMaybe<IntComparisonExp>;\n traders?: InputMaybe<TimelockMarketUserBoolExp>;\n tradersCount?: InputMaybe<NumericComparisonExp>;\n vault?: InputMaybe<StringComparisonExp>;\n volume?: InputMaybe<NumericComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"TimelockMarket\". */\nexport type TimelockMarketOrderBy = {\n address?: InputMaybe<OrderBy>;\n currency0?: InputMaybe<OrderBy>;\n currency1?: InputMaybe<OrderBy>;\n fee?: InputMaybe<OrderBy>;\n hooks?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n optionAsset?: InputMaybe<OrderBy>;\n optionAssetDecimals?: InputMaybe<OrderBy>;\n optionAssetIsToken0?: InputMaybe<OrderBy>;\n optionAssetName?: InputMaybe<OrderBy>;\n optionAssetSymbol?: InputMaybe<OrderBy>;\n optionsCount?: InputMaybe<OrderBy>;\n options_aggregate?: InputMaybe<UserOptionAggregateOrderBy>;\n payoutAsset?: InputMaybe<OrderBy>;\n payoutAssetDecimals?: InputMaybe<OrderBy>;\n payoutAssetName?: InputMaybe<OrderBy>;\n payoutAssetSymbol?: InputMaybe<OrderBy>;\n poolManager?: InputMaybe<OrderBy>;\n tickSpacing?: InputMaybe<OrderBy>;\n tradersCount?: InputMaybe<OrderBy>;\n traders_aggregate?: InputMaybe<TimelockMarketUserAggregateOrderBy>;\n vault?: InputMaybe<OrderBy>;\n volume?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"TimelockMarket\" */\nexport type TimelockMarketSelectColumn =\n /** column name */\n | 'address'\n /** column name */\n | 'currency0'\n /** column name */\n | 'currency1'\n /** column name */\n | 'fee'\n /** column name */\n | 'hooks'\n /** column name */\n | 'id'\n /** column name */\n | 'optionAsset'\n /** column name */\n | 'optionAssetDecimals'\n /** column name */\n | 'optionAssetIsToken0'\n /** column name */\n | 'optionAssetName'\n /** column name */\n | 'optionAssetSymbol'\n /** column name */\n | 'optionsCount'\n /** column name */\n | 'payoutAsset'\n /** column name */\n | 'payoutAssetDecimals'\n /** column name */\n | 'payoutAssetName'\n /** column name */\n | 'payoutAssetSymbol'\n /** column name */\n | 'poolManager'\n /** column name */\n | 'tickSpacing'\n /** column name */\n | 'tradersCount'\n /** column name */\n | 'vault'\n /** column name */\n | 'volume';\n\n/** Streaming cursor of the table \"TimelockMarket\" */\nexport type TimelockMarketStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: TimelockMarketStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type TimelockMarketStreamCursorValueInput = {\n address?: InputMaybe<Scalars['String']['input']>;\n currency0?: InputMaybe<Scalars['String']['input']>;\n currency1?: InputMaybe<Scalars['String']['input']>;\n fee?: InputMaybe<Scalars['Int']['input']>;\n hooks?: InputMaybe<Scalars['String']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n optionAsset?: InputMaybe<Scalars['String']['input']>;\n optionAssetDecimals?: InputMaybe<Scalars['Int']['input']>;\n optionAssetIsToken0?: InputMaybe<Scalars['Boolean']['input']>;\n optionAssetName?: InputMaybe<Scalars['String']['input']>;\n optionAssetSymbol?: InputMaybe<Scalars['String']['input']>;\n optionsCount?: InputMaybe<Scalars['numeric']['input']>;\n payoutAsset?: InputMaybe<Scalars['String']['input']>;\n payoutAssetDecimals?: InputMaybe<Scalars['Int']['input']>;\n payoutAssetName?: InputMaybe<Scalars['String']['input']>;\n payoutAssetSymbol?: InputMaybe<Scalars['String']['input']>;\n poolManager?: InputMaybe<Scalars['String']['input']>;\n tickSpacing?: InputMaybe<Scalars['Int']['input']>;\n tradersCount?: InputMaybe<Scalars['numeric']['input']>;\n vault?: InputMaybe<Scalars['String']['input']>;\n volume?: InputMaybe<Scalars['numeric']['input']>;\n};\n\n/** columns and relationships of \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEvent = {\n __typename: 'UpdateOperatorPermsEvent';\n blockNumber: Scalars['numeric']['output'];\n canExercise: Scalars['Boolean']['output'];\n canExtend: Scalars['Boolean']['output'];\n canMint: Scalars['Boolean']['output'];\n canTransfer: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n operator: Scalars['String']['output'];\n /** An object relationship */\n owner?: Maybe<TimelockMarketUser>;\n owner_id: Scalars['String']['output'];\n spendingApproval: Scalars['numeric']['output'];\n timestamp: Scalars['numeric']['output'];\n transactionHash: Scalars['String']['output'];\n};\n\n/** Boolean expression to filter rows from the table \"UpdateOperatorPermsEvent\". All fields are combined with a logical 'AND'. */\nexport type UpdateOperatorPermsEventBoolExp = {\n _and?: InputMaybe<Array<UpdateOperatorPermsEventBoolExp>>;\n _not?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n _or?: InputMaybe<Array<UpdateOperatorPermsEventBoolExp>>;\n blockNumber?: InputMaybe<NumericComparisonExp>;\n canExercise?: InputMaybe<BooleanComparisonExp>;\n canExtend?: InputMaybe<BooleanComparisonExp>;\n canMint?: InputMaybe<BooleanComparisonExp>;\n canTransfer?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operator?: InputMaybe<StringComparisonExp>;\n owner?: InputMaybe<TimelockMarketUserBoolExp>;\n owner_id?: InputMaybe<StringComparisonExp>;\n spendingApproval?: InputMaybe<NumericComparisonExp>;\n timestamp?: InputMaybe<NumericComparisonExp>;\n transactionHash?: InputMaybe<StringComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"UpdateOperatorPermsEvent\". */\nexport type UpdateOperatorPermsEventOrderBy = {\n blockNumber?: InputMaybe<OrderBy>;\n canExercise?: InputMaybe<OrderBy>;\n canExtend?: InputMaybe<OrderBy>;\n canMint?: InputMaybe<OrderBy>;\n canTransfer?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator?: InputMaybe<OrderBy>;\n owner?: InputMaybe<TimelockMarketUserOrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n timestamp?: InputMaybe<OrderBy>;\n transactionHash?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEventSelectColumn =\n /** column name */\n | 'blockNumber'\n /** column name */\n | 'canExercise'\n /** column name */\n | 'canExtend'\n /** column name */\n | 'canMint'\n /** column name */\n | 'canTransfer'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'operator'\n /** column name */\n | 'owner_id'\n /** column name */\n | 'spendingApproval'\n /** column name */\n | 'timestamp'\n /** column name */\n | 'transactionHash';\n\n/** Streaming cursor of the table \"UpdateOperatorPermsEvent\" */\nexport type UpdateOperatorPermsEventStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UpdateOperatorPermsEventStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UpdateOperatorPermsEventStreamCursorValueInput = {\n blockNumber?: InputMaybe<Scalars['numeric']['input']>;\n canExercise?: InputMaybe<Scalars['Boolean']['input']>;\n canExtend?: InputMaybe<Scalars['Boolean']['input']>;\n canMint?: InputMaybe<Scalars['Boolean']['input']>;\n canTransfer?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n operator?: InputMaybe<Scalars['String']['input']>;\n owner_id?: InputMaybe<Scalars['String']['input']>;\n spendingApproval?: InputMaybe<Scalars['numeric']['input']>;\n timestamp?: InputMaybe<Scalars['numeric']['input']>;\n transactionHash?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"UserMarketOperator\" */\nexport type UserMarketOperator = {\n __typename: 'UserMarketOperator';\n canExercise: Scalars['Boolean']['output'];\n canExtend: Scalars['Boolean']['output'];\n canMint: Scalars['Boolean']['output'];\n canTransfer: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n /** An object relationship */\n operator?: Maybe<MarketOperator>;\n operator_id: Scalars['String']['output'];\n spendingApproval: Scalars['numeric']['output'];\n /** An object relationship */\n user?: Maybe<TimelockMarketUser>;\n user_id: Scalars['String']['output'];\n};\n\n/** order by aggregate values of table \"UserMarketOperator\" */\nexport type UserMarketOperatorAggregateOrderBy = {\n avg?: InputMaybe<UserMarketOperatorAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<UserMarketOperatorMaxOrderBy>;\n min?: InputMaybe<UserMarketOperatorMinOrderBy>;\n stddev?: InputMaybe<UserMarketOperatorStddevOrderBy>;\n stddev_pop?: InputMaybe<UserMarketOperatorStddevPopOrderBy>;\n stddev_samp?: InputMaybe<UserMarketOperatorStddevSampOrderBy>;\n sum?: InputMaybe<UserMarketOperatorSumOrderBy>;\n var_pop?: InputMaybe<UserMarketOperatorVarPopOrderBy>;\n var_samp?: InputMaybe<UserMarketOperatorVarSampOrderBy>;\n variance?: InputMaybe<UserMarketOperatorVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorAvgOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"UserMarketOperator\". All fields are combined with a logical 'AND'. */\nexport type UserMarketOperatorBoolExp = {\n _and?: InputMaybe<Array<UserMarketOperatorBoolExp>>;\n _not?: InputMaybe<UserMarketOperatorBoolExp>;\n _or?: InputMaybe<Array<UserMarketOperatorBoolExp>>;\n canExercise?: InputMaybe<BooleanComparisonExp>;\n canExtend?: InputMaybe<BooleanComparisonExp>;\n canMint?: InputMaybe<BooleanComparisonExp>;\n canTransfer?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n operator?: InputMaybe<MarketOperatorBoolExp>;\n operator_id?: InputMaybe<StringComparisonExp>;\n spendingApproval?: InputMaybe<NumericComparisonExp>;\n user?: InputMaybe<TimelockMarketUserBoolExp>;\n user_id?: InputMaybe<StringComparisonExp>;\n};\n\n/** order by max() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorMaxOrderBy = {\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorMinOrderBy = {\n id?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"UserMarketOperator\". */\nexport type UserMarketOperatorOrderBy = {\n canExercise?: InputMaybe<OrderBy>;\n canExtend?: InputMaybe<OrderBy>;\n canMint?: InputMaybe<OrderBy>;\n canTransfer?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n operator?: InputMaybe<MarketOperatorOrderBy>;\n operator_id?: InputMaybe<OrderBy>;\n spendingApproval?: InputMaybe<OrderBy>;\n user?: InputMaybe<TimelockMarketUserOrderBy>;\n user_id?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorSelectColumn =\n /** column name */\n | 'canExercise'\n /** column name */\n | 'canExtend'\n /** column name */\n | 'canMint'\n /** column name */\n | 'canTransfer'\n /** column name */\n | 'id'\n /** column name */\n | 'market_id'\n /** column name */\n | 'operator_id'\n /** column name */\n | 'spendingApproval'\n /** column name */\n | 'user_id';\n\n/** order by stddev() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevPopOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorStddevSampOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"UserMarketOperator\" */\nexport type UserMarketOperatorStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UserMarketOperatorStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UserMarketOperatorStreamCursorValueInput = {\n canExercise?: InputMaybe<Scalars['Boolean']['input']>;\n canExtend?: InputMaybe<Scalars['Boolean']['input']>;\n canMint?: InputMaybe<Scalars['Boolean']['input']>;\n canTransfer?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n operator_id?: InputMaybe<Scalars['String']['input']>;\n spendingApproval?: InputMaybe<Scalars['numeric']['input']>;\n user_id?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** order by sum() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorSumOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarPopOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarSampOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"UserMarketOperator\" */\nexport type UserMarketOperatorVarianceOrderBy = {\n spendingApproval?: InputMaybe<OrderBy>;\n};\n\n/** columns and relationships of \"UserOption\" */\nexport type UserOption = {\n __typename: 'UserOption';\n createdAt: Scalars['numeric']['output'];\n entryPrice: Scalars['numeric']['output'];\n expiresAt: Scalars['numeric']['output'];\n fullyExercised: Scalars['Boolean']['output'];\n id: Scalars['String']['output'];\n liquiditiesAtOpen: Array<Scalars['String']['output']>;\n liquiditiesCurrent: Array<Scalars['String']['output']>;\n /** An object relationship */\n market?: Maybe<TimelockMarket>;\n market_id: Scalars['String']['output'];\n optionId: Scalars['numeric']['output'];\n optionType: Scalars['optiontype']['output'];\n /** An object relationship */\n owner?: Maybe<TimelockMarketUser>;\n owner_id: Scalars['String']['output'];\n positionSizeAtOpen: Scalars['numeric']['output'];\n positionSizeCurrent: Scalars['numeric']['output'];\n premium: Scalars['numeric']['output'];\n protocolFee: Scalars['numeric']['output'];\n realizedPayout: Scalars['numeric']['output'];\n startTick: Scalars['Int']['output'];\n strikePrice: Scalars['numeric']['output'];\n strikeTick: Scalars['Int']['output'];\n};\n\n/** order by aggregate values of table \"UserOption\" */\nexport type UserOptionAggregateOrderBy = {\n avg?: InputMaybe<UserOptionAvgOrderBy>;\n count?: InputMaybe<OrderBy>;\n max?: InputMaybe<UserOptionMaxOrderBy>;\n min?: InputMaybe<UserOptionMinOrderBy>;\n stddev?: InputMaybe<UserOptionStddevOrderBy>;\n stddev_pop?: InputMaybe<UserOptionStddevPopOrderBy>;\n stddev_samp?: InputMaybe<UserOptionStddevSampOrderBy>;\n sum?: InputMaybe<UserOptionSumOrderBy>;\n var_pop?: InputMaybe<UserOptionVarPopOrderBy>;\n var_samp?: InputMaybe<UserOptionVarSampOrderBy>;\n variance?: InputMaybe<UserOptionVarianceOrderBy>;\n};\n\n/** order by avg() on columns of table \"UserOption\" */\nexport type UserOptionAvgOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Boolean expression to filter rows from the table \"UserOption\". All fields are combined with a logical 'AND'. */\nexport type UserOptionBoolExp = {\n _and?: InputMaybe<Array<UserOptionBoolExp>>;\n _not?: InputMaybe<UserOptionBoolExp>;\n _or?: InputMaybe<Array<UserOptionBoolExp>>;\n createdAt?: InputMaybe<NumericComparisonExp>;\n entryPrice?: InputMaybe<NumericComparisonExp>;\n expiresAt?: InputMaybe<NumericComparisonExp>;\n fullyExercised?: InputMaybe<BooleanComparisonExp>;\n id?: InputMaybe<StringComparisonExp>;\n liquiditiesAtOpen?: InputMaybe<StringArrayComparisonExp>;\n liquiditiesCurrent?: InputMaybe<StringArrayComparisonExp>;\n market?: InputMaybe<TimelockMarketBoolExp>;\n market_id?: InputMaybe<StringComparisonExp>;\n optionId?: InputMaybe<NumericComparisonExp>;\n optionType?: InputMaybe<OptiontypeComparisonExp>;\n owner?: InputMaybe<TimelockMarketUserBoolExp>;\n owner_id?: InputMaybe<StringComparisonExp>;\n positionSizeAtOpen?: InputMaybe<NumericComparisonExp>;\n positionSizeCurrent?: InputMaybe<NumericComparisonExp>;\n premium?: InputMaybe<NumericComparisonExp>;\n protocolFee?: InputMaybe<NumericComparisonExp>;\n realizedPayout?: InputMaybe<NumericComparisonExp>;\n startTick?: InputMaybe<IntComparisonExp>;\n strikePrice?: InputMaybe<NumericComparisonExp>;\n strikeTick?: InputMaybe<IntComparisonExp>;\n};\n\n/** order by max() on columns of table \"UserOption\" */\nexport type UserOptionMaxOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by min() on columns of table \"UserOption\" */\nexport type UserOptionMinOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Ordering options when selecting data from \"UserOption\". */\nexport type UserOptionOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n fullyExercised?: InputMaybe<OrderBy>;\n id?: InputMaybe<OrderBy>;\n liquiditiesAtOpen?: InputMaybe<OrderBy>;\n liquiditiesCurrent?: InputMaybe<OrderBy>;\n market?: InputMaybe<TimelockMarketOrderBy>;\n market_id?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n optionType?: InputMaybe<OrderBy>;\n owner?: InputMaybe<TimelockMarketUserOrderBy>;\n owner_id?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"UserOption\" */\nexport type UserOptionSelectColumn =\n /** column name */\n | 'createdAt'\n /** column name */\n | 'entryPrice'\n /** column name */\n | 'expiresAt'\n /** column name */\n | 'fullyExercised'\n /** column name */\n | 'id'\n /** column name */\n | 'liquiditiesAtOpen'\n /** column name */\n | 'liquiditiesCurrent'\n /** column name */\n | 'market_id'\n /** column name */\n | 'optionId'\n /** column name */\n | 'optionType'\n /** column name */\n | 'owner_id'\n /** column name */\n | 'positionSizeAtOpen'\n /** column name */\n | 'positionSizeCurrent'\n /** column name */\n | 'premium'\n /** column name */\n | 'protocolFee'\n /** column name */\n | 'realizedPayout'\n /** column name */\n | 'startTick'\n /** column name */\n | 'strikePrice'\n /** column name */\n | 'strikeTick';\n\n/** order by stddev() on columns of table \"UserOption\" */\nexport type UserOptionStddevOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_pop() on columns of table \"UserOption\" */\nexport type UserOptionStddevPopOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by stddev_samp() on columns of table \"UserOption\" */\nexport type UserOptionStddevSampOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** Streaming cursor of the table \"UserOption\" */\nexport type UserOptionStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: UserOptionStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type UserOptionStreamCursorValueInput = {\n createdAt?: InputMaybe<Scalars['numeric']['input']>;\n entryPrice?: InputMaybe<Scalars['numeric']['input']>;\n expiresAt?: InputMaybe<Scalars['numeric']['input']>;\n fullyExercised?: InputMaybe<Scalars['Boolean']['input']>;\n id?: InputMaybe<Scalars['String']['input']>;\n liquiditiesAtOpen?: InputMaybe<Array<Scalars['String']['input']>>;\n liquiditiesCurrent?: InputMaybe<Array<Scalars['String']['input']>>;\n market_id?: InputMaybe<Scalars['String']['input']>;\n optionId?: InputMaybe<Scalars['numeric']['input']>;\n optionType?: InputMaybe<Scalars['optiontype']['input']>;\n owner_id?: InputMaybe<Scalars['String']['input']>;\n positionSizeAtOpen?: InputMaybe<Scalars['numeric']['input']>;\n positionSizeCurrent?: InputMaybe<Scalars['numeric']['input']>;\n premium?: InputMaybe<Scalars['numeric']['input']>;\n protocolFee?: InputMaybe<Scalars['numeric']['input']>;\n realizedPayout?: InputMaybe<Scalars['numeric']['input']>;\n startTick?: InputMaybe<Scalars['Int']['input']>;\n strikePrice?: InputMaybe<Scalars['numeric']['input']>;\n strikeTick?: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** order by sum() on columns of table \"UserOption\" */\nexport type UserOptionSumOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by var_pop() on columns of table \"UserOption\" */\nexport type UserOptionVarPopOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by var_samp() on columns of table \"UserOption\" */\nexport type UserOptionVarSampOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** order by variance() on columns of table \"UserOption\" */\nexport type UserOptionVarianceOrderBy = {\n createdAt?: InputMaybe<OrderBy>;\n entryPrice?: InputMaybe<OrderBy>;\n expiresAt?: InputMaybe<OrderBy>;\n optionId?: InputMaybe<OrderBy>;\n positionSizeAtOpen?: InputMaybe<OrderBy>;\n positionSizeCurrent?: InputMaybe<OrderBy>;\n premium?: InputMaybe<OrderBy>;\n protocolFee?: InputMaybe<OrderBy>;\n realizedPayout?: InputMaybe<OrderBy>;\n startTick?: InputMaybe<OrderBy>;\n strikePrice?: InputMaybe<OrderBy>;\n strikeTick?: InputMaybe<OrderBy>;\n};\n\n/** columns and relationships of \"_meta\" */\nexport type Meta = {\n __typename: '_meta';\n bufferBlock?: Maybe<Scalars['Int']['output']>;\n chainId?: Maybe<Scalars['Int']['output']>;\n endBlock?: Maybe<Scalars['Int']['output']>;\n eventsProcessed?: Maybe<Scalars['Int']['output']>;\n firstEventBlock?: Maybe<Scalars['Int']['output']>;\n isReady?: Maybe<Scalars['Boolean']['output']>;\n progressBlock?: Maybe<Scalars['Int']['output']>;\n readyAt?: Maybe<Scalars['timestamptz']['output']>;\n sourceBlock?: Maybe<Scalars['Int']['output']>;\n startBlock?: Maybe<Scalars['Int']['output']>;\n};\n\n/** Boolean expression to filter rows from the table \"_meta\". All fields are combined with a logical 'AND'. */\nexport type MetaBoolExp = {\n _and?: InputMaybe<Array<MetaBoolExp>>;\n _not?: InputMaybe<MetaBoolExp>;\n _or?: InputMaybe<Array<MetaBoolExp>>;\n bufferBlock?: InputMaybe<IntComparisonExp>;\n chainId?: InputMaybe<IntComparisonExp>;\n endBlock?: InputMaybe<IntComparisonExp>;\n eventsProcessed?: InputMaybe<IntComparisonExp>;\n firstEventBlock?: InputMaybe<IntComparisonExp>;\n isReady?: InputMaybe<BooleanComparisonExp>;\n progressBlock?: InputMaybe<IntComparisonExp>;\n readyAt?: InputMaybe<TimestamptzComparisonExp>;\n sourceBlock?: InputMaybe<IntComparisonExp>;\n startBlock?: InputMaybe<IntComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"_meta\". */\nexport type MetaOrderBy = {\n bufferBlock?: InputMaybe<OrderBy>;\n chainId?: InputMaybe<OrderBy>;\n endBlock?: InputMaybe<OrderBy>;\n eventsProcessed?: InputMaybe<OrderBy>;\n firstEventBlock?: InputMaybe<OrderBy>;\n isReady?: InputMaybe<OrderBy>;\n progressBlock?: InputMaybe<OrderBy>;\n readyAt?: InputMaybe<OrderBy>;\n sourceBlock?: InputMaybe<OrderBy>;\n startBlock?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"_meta\" */\nexport type MetaSelectColumn =\n /** column name */\n | 'bufferBlock'\n /** column name */\n | 'chainId'\n /** column name */\n | 'endBlock'\n /** column name */\n | 'eventsProcessed'\n /** column name */\n | 'firstEventBlock'\n /** column name */\n | 'isReady'\n /** column name */\n | 'progressBlock'\n /** column name */\n | 'readyAt'\n /** column name */\n | 'sourceBlock'\n /** column name */\n | 'startBlock';\n\n/** Streaming cursor of the table \"_meta\" */\nexport type MetaStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: MetaStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type MetaStreamCursorValueInput = {\n bufferBlock?: InputMaybe<Scalars['Int']['input']>;\n chainId?: InputMaybe<Scalars['Int']['input']>;\n endBlock?: InputMaybe<Scalars['Int']['input']>;\n eventsProcessed?: InputMaybe<Scalars['Int']['input']>;\n firstEventBlock?: InputMaybe<Scalars['Int']['input']>;\n isReady?: InputMaybe<Scalars['Boolean']['input']>;\n progressBlock?: InputMaybe<Scalars['Int']['input']>;\n readyAt?: InputMaybe<Scalars['timestamptz']['input']>;\n sourceBlock?: InputMaybe<Scalars['Int']['input']>;\n startBlock?: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** columns and relationships of \"chain_metadata\" */\nexport type ChainMetadata = {\n __typename: 'chain_metadata';\n block_height?: Maybe<Scalars['Int']['output']>;\n chain_id?: Maybe<Scalars['Int']['output']>;\n end_block?: Maybe<Scalars['Int']['output']>;\n first_event_block_number?: Maybe<Scalars['Int']['output']>;\n is_hyper_sync?: Maybe<Scalars['Boolean']['output']>;\n latest_fetched_block_number?: Maybe<Scalars['Int']['output']>;\n latest_processed_block?: Maybe<Scalars['Int']['output']>;\n num_batches_fetched?: Maybe<Scalars['Int']['output']>;\n num_events_processed?: Maybe<Scalars['Int']['output']>;\n start_block?: Maybe<Scalars['Int']['output']>;\n timestamp_caught_up_to_head_or_endblock?: Maybe<\n Scalars['timestamptz']['output']\n >;\n};\n\n/** Boolean expression to filter rows from the table \"chain_metadata\". All fields are combined with a logical 'AND'. */\nexport type ChainMetadataBoolExp = {\n _and?: InputMaybe<Array<ChainMetadataBoolExp>>;\n _not?: InputMaybe<ChainMetadataBoolExp>;\n _or?: InputMaybe<Array<ChainMetadataBoolExp>>;\n block_height?: InputMaybe<IntComparisonExp>;\n chain_id?: InputMaybe<IntComparisonExp>;\n end_block?: InputMaybe<IntComparisonExp>;\n first_event_block_number?: InputMaybe<IntComparisonExp>;\n is_hyper_sync?: InputMaybe<BooleanComparisonExp>;\n latest_fetched_block_number?: InputMaybe<IntComparisonExp>;\n latest_processed_block?: InputMaybe<IntComparisonExp>;\n num_batches_fetched?: InputMaybe<IntComparisonExp>;\n num_events_processed?: InputMaybe<IntComparisonExp>;\n start_block?: InputMaybe<IntComparisonExp>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<TimestamptzComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"chain_metadata\". */\nexport type ChainMetadataOrderBy = {\n block_height?: InputMaybe<OrderBy>;\n chain_id?: InputMaybe<OrderBy>;\n end_block?: InputMaybe<OrderBy>;\n first_event_block_number?: InputMaybe<OrderBy>;\n is_hyper_sync?: InputMaybe<OrderBy>;\n latest_fetched_block_number?: InputMaybe<OrderBy>;\n latest_processed_block?: InputMaybe<OrderBy>;\n num_batches_fetched?: InputMaybe<OrderBy>;\n num_events_processed?: InputMaybe<OrderBy>;\n start_block?: InputMaybe<OrderBy>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"chain_metadata\" */\nexport type ChainMetadataSelectColumn =\n /** column name */\n | 'block_height'\n /** column name */\n | 'chain_id'\n /** column name */\n | 'end_block'\n /** column name */\n | 'first_event_block_number'\n /** column name */\n | 'is_hyper_sync'\n /** column name */\n | 'latest_fetched_block_number'\n /** column name */\n | 'latest_processed_block'\n /** column name */\n | 'num_batches_fetched'\n /** column name */\n | 'num_events_processed'\n /** column name */\n | 'start_block'\n /** column name */\n | 'timestamp_caught_up_to_head_or_endblock';\n\n/** Streaming cursor of the table \"chain_metadata\" */\nexport type ChainMetadataStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: ChainMetadataStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type ChainMetadataStreamCursorValueInput = {\n block_height?: InputMaybe<Scalars['Int']['input']>;\n chain_id?: InputMaybe<Scalars['Int']['input']>;\n end_block?: InputMaybe<Scalars['Int']['input']>;\n first_event_block_number?: InputMaybe<Scalars['Int']['input']>;\n is_hyper_sync?: InputMaybe<Scalars['Boolean']['input']>;\n latest_fetched_block_number?: InputMaybe<Scalars['Int']['input']>;\n latest_processed_block?: InputMaybe<Scalars['Int']['input']>;\n num_batches_fetched?: InputMaybe<Scalars['Int']['input']>;\n num_events_processed?: InputMaybe<Scalars['Int']['input']>;\n start_block?: InputMaybe<Scalars['Int']['input']>;\n timestamp_caught_up_to_head_or_endblock?: InputMaybe<\n Scalars['timestamptz']['input']\n >;\n};\n\n/** ordering argument of a cursor */\nexport type CursorOrdering =\n /** ascending ordering of the cursor */\n | 'ASC'\n /** descending ordering of the cursor */\n | 'DESC';\n\nexport type JsonbCastExp = {\n String?: InputMaybe<StringComparisonExp>;\n};\n\n/** Boolean expression to compare columns of type \"jsonb\". All fields are combined with logical 'AND'. */\nexport type JsonbComparisonExp = {\n _cast?: InputMaybe<JsonbCastExp>;\n /** is the column contained in the given json value */\n _contained_in?: InputMaybe<Scalars['jsonb']['input']>;\n /** does the column contain the given json value at the top level */\n _contains?: InputMaybe<Scalars['jsonb']['input']>;\n _eq?: InputMaybe<Scalars['jsonb']['input']>;\n _gt?: InputMaybe<Scalars['jsonb']['input']>;\n _gte?: InputMaybe<Scalars['jsonb']['input']>;\n /** does the string exist as a top-level key in the column */\n _has_key?: InputMaybe<Scalars['String']['input']>;\n /** do all of these strings exist as top-level keys in the column */\n _has_keys_all?: InputMaybe<Array<Scalars['String']['input']>>;\n /** do any of these strings exist as top-level keys in the column */\n _has_keys_any?: InputMaybe<Array<Scalars['String']['input']>>;\n _in?: InputMaybe<Array<Scalars['jsonb']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['jsonb']['input']>;\n _lte?: InputMaybe<Scalars['jsonb']['input']>;\n _neq?: InputMaybe<Scalars['jsonb']['input']>;\n _nin?: InputMaybe<Array<Scalars['jsonb']['input']>>;\n};\n\n/** Boolean expression to compare columns of type \"numeric\". All fields are combined with logical 'AND'. */\nexport type NumericComparisonExp = {\n _eq?: InputMaybe<Scalars['numeric']['input']>;\n _gt?: InputMaybe<Scalars['numeric']['input']>;\n _gte?: InputMaybe<Scalars['numeric']['input']>;\n _in?: InputMaybe<Array<Scalars['numeric']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['numeric']['input']>;\n _lte?: InputMaybe<Scalars['numeric']['input']>;\n _neq?: InputMaybe<Scalars['numeric']['input']>;\n _nin?: InputMaybe<Array<Scalars['numeric']['input']>>;\n};\n\n/** Boolean expression to compare columns of type \"optiontype\". All fields are combined with logical 'AND'. */\nexport type OptiontypeComparisonExp = {\n _eq?: InputMaybe<Scalars['optiontype']['input']>;\n _gt?: InputMaybe<Scalars['optiontype']['input']>;\n _gte?: InputMaybe<Scalars['optiontype']['input']>;\n _in?: InputMaybe<Array<Scalars['optiontype']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['optiontype']['input']>;\n _lte?: InputMaybe<Scalars['optiontype']['input']>;\n _neq?: InputMaybe<Scalars['optiontype']['input']>;\n _nin?: InputMaybe<Array<Scalars['optiontype']['input']>>;\n};\n\n/** column ordering options */\nexport type OrderBy =\n /** in ascending order, nulls last */\n | 'asc'\n /** in ascending order, nulls first */\n | 'asc_nulls_first'\n /** in ascending order, nulls last */\n | 'asc_nulls_last'\n /** in descending order, nulls first */\n | 'desc'\n /** in descending order, nulls first */\n | 'desc_nulls_first'\n /** in descending order, nulls last */\n | 'desc_nulls_last';\n\nexport type QueryRoot = {\n __typename: 'query_root';\n /** fetch data from the table: \"BorrowEvent\" */\n BorrowEvent: Array<BorrowEvent>;\n /** fetch data from the table: \"BorrowEvent\" using primary key columns */\n BorrowEvent_by_pk?: Maybe<BorrowEvent>;\n /** fetch data from the table: \"BurnEvent\" */\n BurnEvent: Array<BurnEvent>;\n /** fetch data from the table: \"BurnEvent\" using primary key columns */\n BurnEvent_by_pk?: Maybe<BurnEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" using primary key columns */\n ExerciseOptionEvent_by_pk?: Maybe<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" */\n ExtendOptionEvent: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" using primary key columns */\n ExtendOptionEvent_by_pk?: Maybe<ExtendOptionEvent>;\n /** fetch data from the table: \"MarketOperator\" */\n MarketOperator: Array<MarketOperator>;\n /** fetch data from the table: \"MarketOperator\" using primary key columns */\n MarketOperator_by_pk?: Maybe<MarketOperator>;\n /** fetch data from the table: \"MintEvent\" */\n MintEvent: Array<MintEvent>;\n /** fetch data from the table: \"MintEvent\" using primary key columns */\n MintEvent_by_pk?: Maybe<MintEvent>;\n /** fetch data from the table: \"MintOptionEvent\" */\n MintOptionEvent: Array<MintOptionEvent>;\n /** fetch data from the table: \"MintOptionEvent\" using primary key columns */\n MintOptionEvent_by_pk?: Maybe<MintOptionEvent>;\n /** fetch data from the table: \"RepayEvent\" */\n RepayEvent: Array<RepayEvent>;\n /** fetch data from the table: \"RepayEvent\" using primary key columns */\n RepayEvent_by_pk?: Maybe<RepayEvent>;\n /** fetch data from the table: \"TimelockMarket\" */\n TimelockMarket: Array<TimelockMarket>;\n /** fetch data from the table: \"TimelockMarketUser\" */\n TimelockMarketUser: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarketUser\" using primary key columns */\n TimelockMarketUser_by_pk?: Maybe<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarket\" using primary key columns */\n TimelockMarket_by_pk?: Maybe<TimelockMarket>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" using primary key columns */\n UpdateOperatorPermsEvent_by_pk?: Maybe<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UserMarketOperator\" */\n UserMarketOperator: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserMarketOperator\" using primary key columns */\n UserMarketOperator_by_pk?: Maybe<UserMarketOperator>;\n /** fetch data from the table: \"UserOption\" */\n UserOption: Array<UserOption>;\n /** fetch data from the table: \"UserOption\" using primary key columns */\n UserOption_by_pk?: Maybe<UserOption>;\n /** fetch data from the table: \"_meta\" */\n _meta: Array<Meta>;\n /** fetch data from the table: \"chain_metadata\" */\n chain_metadata: Array<ChainMetadata>;\n /** fetch data from the table: \"raw_events\" */\n raw_events: Array<RawEvents>;\n /** fetch data from the table: \"raw_events\" using primary key columns */\n raw_events_by_pk?: Maybe<RawEvents>;\n};\n\nexport type QueryRootBorrowEventArgs = {\n distinct_on?: InputMaybe<Array<BorrowEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BorrowEventOrderBy>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type QueryRootBorrowEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootBurnEventArgs = {\n distinct_on?: InputMaybe<Array<BurnEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BurnEventOrderBy>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type QueryRootBurnEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootExerciseOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExerciseOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExerciseOptionEventOrderBy>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type QueryRootExerciseOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootExtendOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExtendOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExtendOptionEventOrderBy>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type QueryRootExtendOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<MarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MarketOperatorOrderBy>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type QueryRootMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMintEventArgs = {\n distinct_on?: InputMaybe<Array<MintEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintEventOrderBy>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type QueryRootMintEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMintOptionEventArgs = {\n distinct_on?: InputMaybe<Array<MintOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintOptionEventOrderBy>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type QueryRootMintOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootRepayEventArgs = {\n distinct_on?: InputMaybe<Array<RepayEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RepayEventOrderBy>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type QueryRootRepayEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootTimelockMarketArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketOrderBy>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type QueryRootTimelockMarketUserArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type QueryRootTimelockMarketUserByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootTimelockMarketByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUpdateOperatorPermsEventArgs = {\n distinct_on?: InputMaybe<Array<UpdateOperatorPermsEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UpdateOperatorPermsEventOrderBy>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type QueryRootUpdateOperatorPermsEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUserMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type QueryRootUserMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootUserOptionArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type QueryRootUserOptionByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type QueryRootMetaArgs = {\n distinct_on?: InputMaybe<Array<MetaSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MetaOrderBy>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type QueryRootChainMetadataArgs = {\n distinct_on?: InputMaybe<Array<ChainMetadataSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ChainMetadataOrderBy>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type QueryRootRawEventsArgs = {\n distinct_on?: InputMaybe<Array<RawEventsSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RawEventsOrderBy>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\nexport type QueryRootRawEventsByPkArgs = {\n serial: Scalars['Int']['input'];\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEvents = {\n __typename: 'raw_events';\n block_fields: Scalars['jsonb']['output'];\n block_hash: Scalars['String']['output'];\n block_number: Scalars['Int']['output'];\n block_timestamp: Scalars['Int']['output'];\n chain_id: Scalars['Int']['output'];\n contract_name: Scalars['String']['output'];\n event_id: Scalars['numeric']['output'];\n event_name: Scalars['String']['output'];\n log_index: Scalars['Int']['output'];\n params: Scalars['jsonb']['output'];\n serial: Scalars['Int']['output'];\n src_address: Scalars['String']['output'];\n transaction_fields: Scalars['jsonb']['output'];\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsBlockFieldsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsParamsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** columns and relationships of \"raw_events\" */\nexport type RawEventsTransactionFieldsArgs = {\n path?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** Boolean expression to filter rows from the table \"raw_events\". All fields are combined with a logical 'AND'. */\nexport type RawEventsBoolExp = {\n _and?: InputMaybe<Array<RawEventsBoolExp>>;\n _not?: InputMaybe<RawEventsBoolExp>;\n _or?: InputMaybe<Array<RawEventsBoolExp>>;\n block_fields?: InputMaybe<JsonbComparisonExp>;\n block_hash?: InputMaybe<StringComparisonExp>;\n block_number?: InputMaybe<IntComparisonExp>;\n block_timestamp?: InputMaybe<IntComparisonExp>;\n chain_id?: InputMaybe<IntComparisonExp>;\n contract_name?: InputMaybe<StringComparisonExp>;\n event_id?: InputMaybe<NumericComparisonExp>;\n event_name?: InputMaybe<StringComparisonExp>;\n log_index?: InputMaybe<IntComparisonExp>;\n params?: InputMaybe<JsonbComparisonExp>;\n serial?: InputMaybe<IntComparisonExp>;\n src_address?: InputMaybe<StringComparisonExp>;\n transaction_fields?: InputMaybe<JsonbComparisonExp>;\n};\n\n/** Ordering options when selecting data from \"raw_events\". */\nexport type RawEventsOrderBy = {\n block_fields?: InputMaybe<OrderBy>;\n block_hash?: InputMaybe<OrderBy>;\n block_number?: InputMaybe<OrderBy>;\n block_timestamp?: InputMaybe<OrderBy>;\n chain_id?: InputMaybe<OrderBy>;\n contract_name?: InputMaybe<OrderBy>;\n event_id?: InputMaybe<OrderBy>;\n event_name?: InputMaybe<OrderBy>;\n log_index?: InputMaybe<OrderBy>;\n params?: InputMaybe<OrderBy>;\n serial?: InputMaybe<OrderBy>;\n src_address?: InputMaybe<OrderBy>;\n transaction_fields?: InputMaybe<OrderBy>;\n};\n\n/** select columns of table \"raw_events\" */\nexport type RawEventsSelectColumn =\n /** column name */\n | 'block_fields'\n /** column name */\n | 'block_hash'\n /** column name */\n | 'block_number'\n /** column name */\n | 'block_timestamp'\n /** column name */\n | 'chain_id'\n /** column name */\n | 'contract_name'\n /** column name */\n | 'event_id'\n /** column name */\n | 'event_name'\n /** column name */\n | 'log_index'\n /** column name */\n | 'params'\n /** column name */\n | 'serial'\n /** column name */\n | 'src_address'\n /** column name */\n | 'transaction_fields';\n\n/** Streaming cursor of the table \"raw_events\" */\nexport type RawEventsStreamCursorInput = {\n /** Stream column input with initial value */\n initial_value: RawEventsStreamCursorValueInput;\n /** cursor ordering */\n ordering?: InputMaybe<CursorOrdering>;\n};\n\n/** Initial value of the column from where the streaming should start */\nexport type RawEventsStreamCursorValueInput = {\n block_fields?: InputMaybe<Scalars['jsonb']['input']>;\n block_hash?: InputMaybe<Scalars['String']['input']>;\n block_number?: InputMaybe<Scalars['Int']['input']>;\n block_timestamp?: InputMaybe<Scalars['Int']['input']>;\n chain_id?: InputMaybe<Scalars['Int']['input']>;\n contract_name?: InputMaybe<Scalars['String']['input']>;\n event_id?: InputMaybe<Scalars['numeric']['input']>;\n event_name?: InputMaybe<Scalars['String']['input']>;\n log_index?: InputMaybe<Scalars['Int']['input']>;\n params?: InputMaybe<Scalars['jsonb']['input']>;\n serial?: InputMaybe<Scalars['Int']['input']>;\n src_address?: InputMaybe<Scalars['String']['input']>;\n transaction_fields?: InputMaybe<Scalars['jsonb']['input']>;\n};\n\nexport type SubscriptionRoot = {\n __typename: 'subscription_root';\n /** fetch data from the table: \"BorrowEvent\" */\n BorrowEvent: Array<BorrowEvent>;\n /** fetch data from the table: \"BorrowEvent\" using primary key columns */\n BorrowEvent_by_pk?: Maybe<BorrowEvent>;\n /** fetch data from the table in a streaming manner: \"BorrowEvent\" */\n BorrowEvent_stream: Array<BorrowEvent>;\n /** fetch data from the table: \"BurnEvent\" */\n BurnEvent: Array<BurnEvent>;\n /** fetch data from the table: \"BurnEvent\" using primary key columns */\n BurnEvent_by_pk?: Maybe<BurnEvent>;\n /** fetch data from the table in a streaming manner: \"BurnEvent\" */\n BurnEvent_stream: Array<BurnEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExerciseOptionEvent\" using primary key columns */\n ExerciseOptionEvent_by_pk?: Maybe<ExerciseOptionEvent>;\n /** fetch data from the table in a streaming manner: \"ExerciseOptionEvent\" */\n ExerciseOptionEvent_stream: Array<ExerciseOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" */\n ExtendOptionEvent: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"ExtendOptionEvent\" using primary key columns */\n ExtendOptionEvent_by_pk?: Maybe<ExtendOptionEvent>;\n /** fetch data from the table in a streaming manner: \"ExtendOptionEvent\" */\n ExtendOptionEvent_stream: Array<ExtendOptionEvent>;\n /** fetch data from the table: \"MarketOperator\" */\n MarketOperator: Array<MarketOperator>;\n /** fetch data from the table: \"MarketOperator\" using primary key columns */\n MarketOperator_by_pk?: Maybe<MarketOperator>;\n /** fetch data from the table in a streaming manner: \"MarketOperator\" */\n MarketOperator_stream: Array<MarketOperator>;\n /** fetch data from the table: \"MintEvent\" */\n MintEvent: Array<MintEvent>;\n /** fetch data from the table: \"MintEvent\" using primary key columns */\n MintEvent_by_pk?: Maybe<MintEvent>;\n /** fetch data from the table in a streaming manner: \"MintEvent\" */\n MintEvent_stream: Array<MintEvent>;\n /** fetch data from the table: \"MintOptionEvent\" */\n MintOptionEvent: Array<MintOptionEvent>;\n /** fetch data from the table: \"MintOptionEvent\" using primary key columns */\n MintOptionEvent_by_pk?: Maybe<MintOptionEvent>;\n /** fetch data from the table in a streaming manner: \"MintOptionEvent\" */\n MintOptionEvent_stream: Array<MintOptionEvent>;\n /** fetch data from the table: \"RepayEvent\" */\n RepayEvent: Array<RepayEvent>;\n /** fetch data from the table: \"RepayEvent\" using primary key columns */\n RepayEvent_by_pk?: Maybe<RepayEvent>;\n /** fetch data from the table in a streaming manner: \"RepayEvent\" */\n RepayEvent_stream: Array<RepayEvent>;\n /** fetch data from the table: \"TimelockMarket\" */\n TimelockMarket: Array<TimelockMarket>;\n /** fetch data from the table: \"TimelockMarketUser\" */\n TimelockMarketUser: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarketUser\" using primary key columns */\n TimelockMarketUser_by_pk?: Maybe<TimelockMarketUser>;\n /** fetch data from the table in a streaming manner: \"TimelockMarketUser\" */\n TimelockMarketUser_stream: Array<TimelockMarketUser>;\n /** fetch data from the table: \"TimelockMarket\" using primary key columns */\n TimelockMarket_by_pk?: Maybe<TimelockMarket>;\n /** fetch data from the table in a streaming manner: \"TimelockMarket\" */\n TimelockMarket_stream: Array<TimelockMarket>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UpdateOperatorPermsEvent\" using primary key columns */\n UpdateOperatorPermsEvent_by_pk?: Maybe<UpdateOperatorPermsEvent>;\n /** fetch data from the table in a streaming manner: \"UpdateOperatorPermsEvent\" */\n UpdateOperatorPermsEvent_stream: Array<UpdateOperatorPermsEvent>;\n /** fetch data from the table: \"UserMarketOperator\" */\n UserMarketOperator: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserMarketOperator\" using primary key columns */\n UserMarketOperator_by_pk?: Maybe<UserMarketOperator>;\n /** fetch data from the table in a streaming manner: \"UserMarketOperator\" */\n UserMarketOperator_stream: Array<UserMarketOperator>;\n /** fetch data from the table: \"UserOption\" */\n UserOption: Array<UserOption>;\n /** fetch data from the table: \"UserOption\" using primary key columns */\n UserOption_by_pk?: Maybe<UserOption>;\n /** fetch data from the table in a streaming manner: \"UserOption\" */\n UserOption_stream: Array<UserOption>;\n /** fetch data from the table: \"_meta\" */\n _meta: Array<Meta>;\n /** fetch data from the table in a streaming manner: \"_meta\" */\n _meta_stream: Array<Meta>;\n /** fetch data from the table: \"chain_metadata\" */\n chain_metadata: Array<ChainMetadata>;\n /** fetch data from the table in a streaming manner: \"chain_metadata\" */\n chain_metadata_stream: Array<ChainMetadata>;\n /** fetch data from the table: \"raw_events\" */\n raw_events: Array<RawEvents>;\n /** fetch data from the table: \"raw_events\" using primary key columns */\n raw_events_by_pk?: Maybe<RawEvents>;\n /** fetch data from the table in a streaming manner: \"raw_events\" */\n raw_events_stream: Array<RawEvents>;\n};\n\nexport type SubscriptionRootBorrowEventArgs = {\n distinct_on?: InputMaybe<Array<BorrowEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BorrowEventOrderBy>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type SubscriptionRootBorrowEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootBorrowEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<BorrowEventStreamCursorInput>>;\n where?: InputMaybe<BorrowEventBoolExp>;\n};\n\nexport type SubscriptionRootBurnEventArgs = {\n distinct_on?: InputMaybe<Array<BurnEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<BurnEventOrderBy>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type SubscriptionRootBurnEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootBurnEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<BurnEventStreamCursorInput>>;\n where?: InputMaybe<BurnEventBoolExp>;\n};\n\nexport type SubscriptionRootExerciseOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExerciseOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExerciseOptionEventOrderBy>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExerciseOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootExerciseOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ExerciseOptionEventStreamCursorInput>>;\n where?: InputMaybe<ExerciseOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExtendOptionEventArgs = {\n distinct_on?: InputMaybe<Array<ExtendOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ExtendOptionEventOrderBy>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootExtendOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootExtendOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ExtendOptionEventStreamCursorInput>>;\n where?: InputMaybe<ExtendOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<MarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MarketOperatorOrderBy>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMarketOperatorStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MarketOperatorStreamCursorInput>>;\n where?: InputMaybe<MarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootMintEventArgs = {\n distinct_on?: InputMaybe<Array<MintEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintEventOrderBy>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type SubscriptionRootMintEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMintEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MintEventStreamCursorInput>>;\n where?: InputMaybe<MintEventBoolExp>;\n};\n\nexport type SubscriptionRootMintOptionEventArgs = {\n distinct_on?: InputMaybe<Array<MintOptionEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MintOptionEventOrderBy>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootMintOptionEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootMintOptionEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MintOptionEventStreamCursorInput>>;\n where?: InputMaybe<MintOptionEventBoolExp>;\n};\n\nexport type SubscriptionRootRepayEventArgs = {\n distinct_on?: InputMaybe<Array<RepayEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RepayEventOrderBy>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type SubscriptionRootRepayEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootRepayEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<RepayEventStreamCursorInput>>;\n where?: InputMaybe<RepayEventBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketOrderBy>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketUserArgs = {\n distinct_on?: InputMaybe<Array<TimelockMarketUserSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<TimelockMarketUserOrderBy>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketUserByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootTimelockMarketUserStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<TimelockMarketUserStreamCursorInput>>;\n where?: InputMaybe<TimelockMarketUserBoolExp>;\n};\n\nexport type SubscriptionRootTimelockMarketByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootTimelockMarketStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<TimelockMarketStreamCursorInput>>;\n where?: InputMaybe<TimelockMarketBoolExp>;\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventArgs = {\n distinct_on?: InputMaybe<Array<UpdateOperatorPermsEventSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UpdateOperatorPermsEventOrderBy>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUpdateOperatorPermsEventStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UpdateOperatorPermsEventStreamCursorInput>>;\n where?: InputMaybe<UpdateOperatorPermsEventBoolExp>;\n};\n\nexport type SubscriptionRootUserMarketOperatorArgs = {\n distinct_on?: InputMaybe<Array<UserMarketOperatorSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserMarketOperatorOrderBy>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootUserMarketOperatorByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUserMarketOperatorStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UserMarketOperatorStreamCursorInput>>;\n where?: InputMaybe<UserMarketOperatorBoolExp>;\n};\n\nexport type SubscriptionRootUserOptionArgs = {\n distinct_on?: InputMaybe<Array<UserOptionSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<UserOptionOrderBy>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type SubscriptionRootUserOptionByPkArgs = {\n id: Scalars['String']['input'];\n};\n\nexport type SubscriptionRootUserOptionStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<UserOptionStreamCursorInput>>;\n where?: InputMaybe<UserOptionBoolExp>;\n};\n\nexport type SubscriptionRootMetaArgs = {\n distinct_on?: InputMaybe<Array<MetaSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<MetaOrderBy>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type SubscriptionRootMetaStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<MetaStreamCursorInput>>;\n where?: InputMaybe<MetaBoolExp>;\n};\n\nexport type SubscriptionRootChainMetadataArgs = {\n distinct_on?: InputMaybe<Array<ChainMetadataSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<ChainMetadataOrderBy>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type SubscriptionRootChainMetadataStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<ChainMetadataStreamCursorInput>>;\n where?: InputMaybe<ChainMetadataBoolExp>;\n};\n\nexport type SubscriptionRootRawEventsArgs = {\n distinct_on?: InputMaybe<Array<RawEventsSelectColumn>>;\n limit?: InputMaybe<Scalars['Int']['input']>;\n offset?: InputMaybe<Scalars['Int']['input']>;\n order_by?: InputMaybe<Array<RawEventsOrderBy>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\nexport type SubscriptionRootRawEventsByPkArgs = {\n serial: Scalars['Int']['input'];\n};\n\nexport type SubscriptionRootRawEventsStreamArgs = {\n batch_size: Scalars['Int']['input'];\n cursor: Array<InputMaybe<RawEventsStreamCursorInput>>;\n where?: InputMaybe<RawEventsBoolExp>;\n};\n\n/** Boolean expression to compare columns of type \"timestamptz\". All fields are combined with logical 'AND'. */\nexport type TimestamptzComparisonExp = {\n _eq?: InputMaybe<Scalars['timestamptz']['input']>;\n _gt?: InputMaybe<Scalars['timestamptz']['input']>;\n _gte?: InputMaybe<Scalars['timestamptz']['input']>;\n _in?: InputMaybe<Array<Scalars['timestamptz']['input']>>;\n _is_null?: InputMaybe<Scalars['Boolean']['input']>;\n _lt?: InputMaybe<Scalars['timestamptz']['input']>;\n _lte?: InputMaybe<Scalars['timestamptz']['input']>;\n _neq?: InputMaybe<Scalars['timestamptz']['input']>;\n _nin?: InputMaybe<Array<Scalars['timestamptz']['input']>>;\n};\n\nexport type UserOptionFieldsFragment = {\n __typename: 'UserOption';\n id: string;\n optionId: any;\n optionType: any;\n strikeTick: number;\n startTick: number;\n strikePrice: any;\n entryPrice: any;\n expiresAt: any;\n createdAt: any;\n premium: any;\n protocolFee: any;\n realizedPayout: any;\n liquiditiesAtOpen: Array<string>;\n liquiditiesCurrent: Array<string>;\n positionSizeAtOpen: any;\n positionSizeCurrent: any;\n fullyExercised: boolean;\n owner?: {__typename: 'TimelockMarketUser'; address: string} | null;\n market?: {__typename: 'TimelockMarket'; address: string} | null;\n};\n\nexport type GetActiveUserOptionsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n}>;\n\nexport type GetActiveUserOptionsQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetActiveUserOptionsByMarketQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetActiveUserOptionsByMarketQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetClosedUserOptionsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n}>;\n\nexport type GetClosedUserOptionsQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetClosedUserOptionsByMarketQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetClosedUserOptionsByMarketQuery = {\n __typename: 'query_root';\n UserOption: Array<{__typename: 'UserOption'} & UserOptionFieldsFragment>;\n};\n\nexport type GetMarketDataQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetMarketDataQuery = {\n __typename: 'query_root';\n TimelockMarket: Array<{\n __typename: 'TimelockMarket';\n id: string;\n address: string;\n vault: string;\n tickSpacing: number;\n optionAssetIsToken0: boolean;\n optionAsset: string;\n payoutAsset: string;\n optionAssetDecimals: number;\n payoutAssetDecimals: number;\n optionAssetSymbol: string;\n payoutAssetSymbol: string;\n optionAssetName: string;\n payoutAssetName: string;\n poolManager: string;\n currency0: string;\n currency1: string;\n fee: number;\n hooks: string;\n }>;\n};\n\nexport type GetMarketVolumeQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetMarketVolumeQuery = {\n __typename: 'query_root';\n TimelockMarket: Array<{\n __typename: 'TimelockMarket';\n id: string;\n address: string;\n optionsCount: any;\n tradersCount: any;\n volume: any;\n }>;\n};\n\nexport type GetUserMarketOperatorsQueryVariables = Exact<{\n userAddr: Scalars['String']['input'];\n marketAddr: Scalars['String']['input'];\n}>;\n\nexport type GetUserMarketOperatorsQuery = {\n __typename: 'query_root';\n UserMarketOperator: Array<{\n __typename: 'UserMarketOperator';\n id: string;\n canExtend: boolean;\n canExercise: boolean;\n canTransfer: boolean;\n canMint: boolean;\n spendingApproval: any;\n operator?: {__typename: 'MarketOperator'; address: string} | null;\n }>;\n};\n\nexport type GetOptionEventsQueryVariables = Exact<{\n marketAddr: Scalars['String']['input'];\n optionId: Scalars['numeric']['input'];\n}>;\n\nexport type GetOptionEventsQuery = {\n __typename: 'query_root';\n MintOptionEvent: Array<{\n __typename: 'MintOptionEvent';\n id: string;\n optionType: number;\n strikeTick: number;\n price: any;\n expiresAt: any;\n premium: any;\n protocolFee: any;\n liquidities: Array<string>;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n ExerciseOptionEvent: Array<{\n __typename: 'ExerciseOptionEvent';\n id: string;\n liquidities: Array<string>;\n price: any;\n payout: any;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n ExtendOptionEvent: Array<{\n __typename: 'ExtendOptionEvent';\n id: string;\n premium: any;\n protocolFee: any;\n price: any;\n addedDuration: any;\n timestamp: any;\n blockNumber: any;\n transactionHash: string;\n }>;\n};\n\nexport const UserOptionFieldsFragmentDoc = gql`\n fragment UserOptionFields on UserOption {\n id\n optionId\n owner {\n address\n }\n market {\n address\n }\n optionType\n strikeTick\n startTick\n strikePrice\n entryPrice\n expiresAt\n createdAt\n premium\n protocolFee\n realizedPayout\n liquiditiesAtOpen\n liquiditiesCurrent\n positionSizeAtOpen\n positionSizeCurrent\n fullyExercised\n }\n`;\nexport const GetActiveUserOptionsDocument = gql`\n query GetActiveUserOptions($userAddr: String!) {\n UserOption(\n where: {owner: {address: {_eq: $userAddr}}, fullyExercised: {_eq: false}}\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetActiveUserOptionsByMarketDocument = gql`\n query GetActiveUserOptionsByMarket($userAddr: String!, $marketAddr: String!) {\n UserOption(\n where: {\n owner: {address: {_eq: $userAddr}}\n fullyExercised: {_eq: false}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetClosedUserOptionsDocument = gql`\n query GetClosedUserOptions($userAddr: String!) {\n UserOption(\n where: {owner: {address: {_eq: $userAddr}}, fullyExercised: {_eq: true}}\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetClosedUserOptionsByMarketDocument = gql`\n query GetClosedUserOptionsByMarket($userAddr: String!, $marketAddr: String!) {\n UserOption(\n where: {\n owner: {address: {_eq: $userAddr}}\n fullyExercised: {_eq: true}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n ...UserOptionFields\n }\n }\n ${UserOptionFieldsFragmentDoc}\n`;\nexport const GetMarketDataDocument = gql`\n query GetMarketData($marketAddr: String!) {\n TimelockMarket(where: {address: {_eq: $marketAddr}}, limit: 1) {\n id\n address\n vault\n tickSpacing\n optionAssetIsToken0\n optionAsset\n payoutAsset\n optionAssetDecimals\n payoutAssetDecimals\n optionAssetSymbol\n payoutAssetSymbol\n optionAssetName\n payoutAssetName\n poolManager\n currency0\n currency1\n fee\n hooks\n tickSpacing\n }\n }\n`;\nexport const GetMarketVolumeDocument = gql`\n query GetMarketVolume($marketAddr: String!) {\n TimelockMarket(where: {address: {_eq: $marketAddr}}, limit: 1) {\n id\n address\n optionsCount\n tradersCount\n volume\n }\n }\n`;\nexport const GetUserMarketOperatorsDocument = gql`\n query GetUserMarketOperators($userAddr: String!, $marketAddr: String!) {\n UserMarketOperator(\n where: {\n user: {address: {_eq: $userAddr}}\n market: {address: {_eq: $marketAddr}}\n }\n limit: 1000\n ) {\n id\n operator {\n address\n }\n canExtend\n canExercise\n canTransfer\n canMint\n spendingApproval\n }\n }\n`;\nexport const GetOptionEventsDocument = gql`\n query GetOptionEvents($marketAddr: String!, $optionId: numeric!) {\n MintOptionEvent(\n where: {\n option: {\n optionId: {_eq: $optionId}\n market: {address: {_eq: $marketAddr}}\n }\n }\n limit: 1000\n ) {\n id\n optionType\n strikeTick\n price\n expiresAt\n premium\n protocolFee\n liquidities\n timestamp\n blockNumber\n transactionHash\n }\n ExerciseOptionEvent(\n where: {\n option: {\n market: {address: {_eq: $marketAddr}}\n optionId: {_eq: $optionId}\n }\n }\n limit: 1000\n ) {\n id\n liquidities\n price\n payout\n timestamp\n blockNumber\n transactionHash\n }\n ExtendOptionEvent(\n where: {\n option: {\n market: {address: {_eq: $marketAddr}}\n optionId: {_eq: $optionId}\n }\n }\n limit: 1000\n ) {\n id\n premium\n protocolFee\n price\n addedDuration\n timestamp\n blockNumber\n transactionHash\n }\n }\n`;\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>;\n\nconst defaultWrapper: SdkFunctionWrapper = (\n action,\n _operationName,\n _operationType,\n _variables,\n) => action();\n\nexport function getSdk(\n client: GraphQLClient,\n withWrapper: SdkFunctionWrapper = defaultWrapper,\n) {\n return {\n GetActiveUserOptions(\n variables: GetActiveUserOptionsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetActiveUserOptionsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetActiveUserOptionsQuery>({\n document: GetActiveUserOptionsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetActiveUserOptions',\n 'query',\n variables,\n );\n },\n GetActiveUserOptionsByMarket(\n variables: GetActiveUserOptionsByMarketQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetActiveUserOptionsByMarketQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetActiveUserOptionsByMarketQuery>({\n document: GetActiveUserOptionsByMarketDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetActiveUserOptionsByMarket',\n 'query',\n variables,\n );\n },\n GetClosedUserOptions(\n variables: GetClosedUserOptionsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetClosedUserOptionsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetClosedUserOptionsQuery>({\n document: GetClosedUserOptionsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetClosedUserOptions',\n 'query',\n variables,\n );\n },\n GetClosedUserOptionsByMarket(\n variables: GetClosedUserOptionsByMarketQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetClosedUserOptionsByMarketQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetClosedUserOptionsByMarketQuery>({\n document: GetClosedUserOptionsByMarketDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetClosedUserOptionsByMarket',\n 'query',\n variables,\n );\n },\n GetMarketData(\n variables: GetMarketDataQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetMarketDataQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetMarketDataQuery>({\n document: GetMarketDataDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetMarketData',\n 'query',\n variables,\n );\n },\n GetMarketVolume(\n variables: GetMarketVolumeQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetMarketVolumeQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetMarketVolumeQuery>({\n document: GetMarketVolumeDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetMarketVolume',\n 'query',\n variables,\n );\n },\n GetUserMarketOperators(\n variables: GetUserMarketOperatorsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetUserMarketOperatorsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetUserMarketOperatorsQuery>({\n document: GetUserMarketOperatorsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetUserMarketOperators',\n 'query',\n variables,\n );\n },\n GetOptionEvents(\n variables: GetOptionEventsQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit['signal'],\n ): Promise<GetOptionEventsQuery> {\n return withWrapper(\n wrappedRequestHeaders =>\n client.request<GetOptionEventsQuery>({\n document: GetOptionEventsDocument,\n variables,\n requestHeaders: {...requestHeaders, ...wrappedRequestHeaders},\n signal,\n }),\n 'GetOptionEvents',\n 'query',\n variables,\n );\n },\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;\n","import type {Address, Hex} from 'viem';\n\nexport type MintPerpBody = {\n marketAddr: Address;\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick: number;\n};\n\nexport type ExercisePerpBody = {\n marketAddr: Address;\n optionId: bigint;\n liquidities: bigint[];\n};\n\nexport class PerpsOperator {\n #baseUrl: string;\n auth?: {message: string; signature: Hex};\n\n constructor(baseUrl: string) {\n this.#baseUrl = baseUrl;\n }\n\n #request = async <T>(path: string, body?: unknown) => {\n const url = new URL(path, this.#baseUrl);\n const res = await fetch(url, {\n method: body ? 'POST' : 'GET',\n headers: {\n Connection: 'keep-alive',\n 'Content-Type': 'application/json',\n 'Keep-Alive': 'timeout=120',\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n if (res.ok) {\n const {data} = (await res.json()) as {data: T};\n return data;\n }\n const resText = await res.text();\n\n try {\n const error = JSON.parse(resText) as {error: string};\n throw new Error(`${res.status} ${res.statusText}: ${error.error}`);\n } catch (error) {\n throw new Error(`${res.status} ${res.statusText}: ${resText}`);\n }\n };\n\n getOperatorAddr = async (): Promise<Address> => {\n const {address} = await this.#request<{address: Address}>(\n 'api/operator/address',\n );\n return address;\n };\n\n genAuthMessage = async (userAddr: Address): Promise<string> => {\n const {message} = await this.#request<{message: string}>('api/auth/gen', {\n userAddr,\n });\n return message;\n };\n\n validateAuthMessage = async (message: string, signature: Hex) => {\n const {address, createdAt, validUntil} = await this.#request<{\n address: Address;\n createdAt: number;\n validUntil: number;\n }>('api/auth/validate', {message, signature});\n return {address, createdAt, validUntil};\n };\n\n setAuth = (message: string, signature: Hex) => {\n this.auth = {message, signature};\n };\n\n getUserPerps = async (\n userAddr: Address,\n marketAddr?: Address,\n type?: 'active' | 'closed',\n offset = 0,\n limit = 1000,\n ) => {\n const params = new URLSearchParams({\n offset: offset.toString(),\n limit: limit.toString(),\n });\n if (type) params.append('type', type);\n if (marketAddr) params.append('marketAddr', marketAddr);\n\n const url = `api/positions/${userAddr}?${params.toString()}`;\n\n const data = await this.#request<\n {\n id: string;\n ownerAddr: Address;\n marketAddr: Address;\n optionId: string;\n perpDuration: number;\n expiresAt: number;\n closed: boolean;\n }[]\n >(url);\n\n return data.map(p => ({...p, optionId: BigInt(p.optionId)}));\n };\n\n mintPerp = async (body: MintPerpBody) => {\n if (!this.auth) {\n throw new Error(\n 'Authentication required. Call setAuth() with authMessage and signature before exercising perps.',\n );\n }\n const {txHash, optionId} = await this.#request<{\n txHash: Hex;\n optionId: string;\n }>('api/positions/mint', {\n ...body,\n amount: body.amount.toString(),\n auth: this.auth,\n });\n return {txHash, optionId: BigInt(optionId)};\n };\n\n exercisePerp = async (body: ExercisePerpBody) => {\n if (!this.auth) {\n throw new Error(\n 'Authentication required. Call setAuth() with authMessage and signature before exercising perps.',\n );\n }\n const {txHash, optionId} = await this.#request<{\n txHash: Hex;\n optionId: string;\n }>('api/positions/exercise', {\n ...body,\n optionId: body.optionId.toString(),\n liquidities: body.liquidities.map(l => l.toString()),\n auth: this.auth,\n });\n return {txHash, optionId: BigInt(optionId)};\n };\n}\n","'use client';\nimport type {Address} from 'viem';\nimport React, {createContext, useContext, useMemo, type ReactNode} from 'react';\nimport {GraphQLClient} from 'graphql-request';\n\nimport {getSdk} from '~/generated/graphql';\nimport {type TimelockMarketData} from '~/lib/contracts';\nimport {PerpsOperator} from '~/lib/perpsOperator';\n\ntype TimelockContextValue = {\n marketData: Partial<TimelockMarketData>;\n lensAddr?: Address;\n uniswapMathLensAddr?: Address;\n envioGraphqlUrl?: string;\n graphqlClient?: ReturnType<typeof getSdk>;\n perpsOperator?: PerpsOperator;\n perpsOperatorUrl?: string;\n};\n\nconst TimelockContext = createContext<TimelockContextValue | undefined>(\n undefined,\n);\n\nexport const TimelockProvider = ({\n children,\n marketData,\n envioGraphqlUrl,\n perpsOperatorUrl,\n}: {\n children: ReactNode;\n marketData?: Partial<TimelockMarketData>;\n envioGraphqlUrl?: string;\n perpsOperatorUrl?: string;\n}) => {\n const graphqlClient = useMemo(() => {\n if (envioGraphqlUrl) {\n return getSdk(new GraphQLClient(envioGraphqlUrl));\n }\n return undefined;\n }, [envioGraphqlUrl]);\n\n const perpsOperator = useMemo(() => {\n if (perpsOperatorUrl) {\n return new PerpsOperator(perpsOperatorUrl);\n }\n return undefined;\n }, [perpsOperatorUrl]);\n\n const contextValue = useMemo(\n () => ({\n marketData: marketData || {},\n envioGraphqlUrl,\n perpsOperator,\n graphqlClient,\n perpsOperatorUrl,\n }),\n [\n marketData,\n envioGraphqlUrl,\n perpsOperator,\n graphqlClient,\n perpsOperatorUrl,\n ],\n );\n\n return (\n <TimelockContext.Provider value={contextValue}>\n {children}\n </TimelockContext.Provider>\n );\n};\n\nexport const useCurrentMarket = () => {\n const context = useContext(TimelockContext);\n\n if (context === undefined) {\n throw new Error('useCurrentMarket must be used within a TimelockProvider');\n }\n return context.marketData;\n};\n\nexport const useTimelockConfig = () => {\n const context = useContext(TimelockContext);\n\n if (context === undefined) {\n throw new Error('useConfig must be used within a TimelockProvider');\n }\n return context;\n};\n","import {useQuery} from '@tanstack/react-query';\nimport {usePublicClient} from 'wagmi';\nimport {getTimelockLens, getStateView} from '../lib/contracts';\n\nexport const useLens = () => {\n const client = usePublicClient();\n\n const {data: timelockLens} = useQuery({\n queryKey: ['timelockLens', client?.uid],\n queryFn: () => (client ? getTimelockLens(client) : undefined),\n enabled: !!client,\n });\n const {data: stateView} = useQuery({\n queryKey: ['stateView', client?.uid],\n queryFn: () => (client ? getStateView(client) : undefined),\n enabled: !!client,\n });\n return {timelockLens, stateView};\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\n\nimport {useLens} from '../useLens';\nimport {useReadContract} from 'wagmi';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMarketData = (marketAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getMarketData',\n args: marketAddr ? [marketAddr] : undefined,\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMarketState = (marketAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getMarketState',\n args: marketAddr ? [marketAddr] : undefined,\n });\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\n\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport const useMarketVolume = (marketAddr: Address | undefined) => {\n const {graphqlClient} = useTimelockConfig();\n\n return useQuery({\n queryKey: ['marketVolume', marketAddr?.toLowerCase() || '--'],\n queryFn: async () => {\n const result = await graphqlClient!.GetMarketVolume({\n marketAddr: marketAddr!.toLowerCase(),\n });\n return {\n ...result.TimelockMarket[0],\n address: result.TimelockMarket[0].address as Address,\n volume: BigInt(result.TimelockMarket[0].volume),\n optionsCount: BigInt(result.TimelockMarket[0].optionsCount),\n tradersCount: BigInt(result.TimelockMarket[0].tradersCount),\n };\n },\n enabled: !!marketAddr && !!graphqlClient,\n });\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\n\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useLens} from '~/hooks/useLens';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useMaxPositionSize = (\n marketAddr: Address | undefined,\n strikeTick?: number,\n maxSteps = 100,\n) => {\n const {timelockLens} = useLens();\n const {optionAssetDecimals} = useMarketData(marketAddr);\n\n const {data, ...rest} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: strikeTick ? 'getMaxPositionSizes' : 'getMaxATMPositionSizes',\n args: marketAddr\n ? strikeTick\n ? [marketAddr, strikeTick, maxSteps]\n : [marketAddr, maxSteps]\n : undefined,\n query: {enabled: !!marketAddr && !!timelockLens},\n // @ts-ignore\n gas: 100_000_000n,\n });\n\n const maxCallSize =\n data && optionAssetDecimals\n ? wrapAmount(data[0], optionAssetDecimals)\n : undefined;\n const maxPutSize =\n data && optionAssetDecimals\n ? wrapAmount(data[1], optionAssetDecimals)\n : undefined;\n\n return {maxCallSize, maxPutSize, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport type {PoolKey} from './usePoolData';\nimport {useLens} from '~/hooks/useLens';\nimport {statelessStateViewAbi} from '~/abis/statelessStateView';\n\nexport const useCurrentTick = (poolManager?: Address, poolKey?: PoolKey) => {\n const {stateView} = useLens();\n\n return useReadContract({\n address: stateView?.address,\n abi: statelessStateViewAbi,\n functionName: 'getSlot0',\n args: poolManager && poolKey ? [poolManager, poolKey] : undefined,\n query: {\n enabled: !!poolManager && !!poolKey,\n refetchInterval: 3000,\n select: (raw: readonly [bigint, number, number, number]) => {\n const sqrtPriceX96 = raw[0];\n const currentTick = raw[1];\n return {currentTick, sqrtPriceX96};\n },\n },\n });\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type PoolKey = {\n currency0: Address;\n currency1: Address;\n fee: number;\n tickSpacing: number;\n hooks: Address;\n};\n\nexport type UniswapPoolData = ReturnType<typeof usePoolData>;\n\nexport const usePoolData = (poolManager?: Address, poolKey?: PoolKey) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getPoolData',\n args: poolManager && poolKey ? [poolManager, poolKey] : undefined,\n query: {enabled: !!poolManager && !!poolKey},\n });\n const _default = useMemo(\n () => ({\n token0: poolKey?.currency0,\n token1: poolKey?.currency1,\n tickSpacing: poolKey?.tickSpacing,\n fee: poolKey?.fee,\n }),\n [poolKey],\n );\n return (data || _default) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, erc20Abi, maxUint256} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {getErc20} from '~/lib/contracts';\n\nexport const useApproval = () => {\n const client = useClient();\n const {address} = useConnection();\n const {\n writeContractAsync,\n data: hash,\n isPending,\n error,\n reset,\n } = useWriteContract();\n\n const askForApproval = async (\n tokenAddress: Address,\n spenderAddress: Address,\n amount: bigint,\n ) => {\n if (!client || !address) throw new Error('Wallet not connected');\n\n const tokenContract = getErc20(tokenAddress, client);\n\n const allowance = await tokenContract.read.allowance([\n address,\n spenderAddress,\n ]);\n\n if (allowance < amount) {\n const approvalHash = await writeContractAsync({\n address: tokenAddress,\n abi: erc20Abi,\n functionName: 'approve',\n args: [spenderAddress, maxUint256],\n });\n await waitForTransactionReceipt(client, {hash: approvalHash});\n }\n };\n return {askForApproval, hash, isPending, error, reset};\n};\n","export const sleep = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n","import type {Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useLens} from '~/hooks/useLens';\n\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {getNearestValidStrikeTick} from '~/lib/liquidityUtils';\nimport {sleep} from '~/lib/utils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useMintOption = (marketAddr: Address | undefined) => {\n const {payoutAsset, vault, poolManager, poolKey, optionAssetIsToken0} =\n useMarketData(marketAddr);\n\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n const {refetch: refetchCurrentTick} = useCurrentTick(poolManager, poolKey);\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n const {timelockLens} = useLens();\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const mintOption = async ({\n optionType,\n amount,\n duration,\n strikeTick,\n maxSteps = 100,\n }: {\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick?: number;\n maxSteps?: number;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n if (!timelockLens) throw new Error('Timelock lens not available');\n if (!tickSpacing) throw new Error('Pool data not available');\n\n if (!vault || !payoutAsset || optionAssetIsToken0 === undefined) {\n throw new Error('Market data not available');\n }\n const {data: {currentTick} = {}} = await refetchCurrentTick();\n\n if (currentTick === undefined) {\n throw new Error('Could not fetch current tick');\n }\n strikeTick = getNearestValidStrikeTick(\n optionType,\n optionAssetIsToken0,\n tickSpacing,\n currentTick,\n strikeTick,\n );\n const market = getTimelockMarket(marketAddr, client);\n\n const [premium, protocolFee] = await market.read.calculatePremium([\n optionType === 'CALL' ? 0 : 1,\n amount,\n strikeTick,\n duration,\n 0,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'mintOption',\n args: [\n address,\n optionType === 'CALL' ? 0 : 1,\n amount,\n strikeTick,\n duration,\n maxPremium,\n maxSteps,\n await timelockLens.read.getRefTick([vault, strikeTick]),\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: mintOption});\n};\n","import type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {usePoolData, type PoolKey} from './usePoolData';\n\nimport {getPriceAtTick, getPriceAtSqrtPriceX96} from '~/lib/liquidityUtils';\nimport {wrapPrice} from '~/lib/numberUtils';\n\nexport const usePriceAtTick = (\n poolManager?: Address,\n poolKey?: PoolKey,\n tick?: number,\n) => {\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const priceBigInt = useMemo(\n () => (tick !== undefined ? getPriceAtTick(tick) : undefined),\n [tick],\n );\n const price = useMemo(\n () =>\n priceBigInt && token0Decimals && token1Decimals\n ? wrapPrice(priceBigInt, token0Decimals, token1Decimals)\n : undefined,\n [priceBigInt, token0Decimals, token1Decimals],\n );\n return price;\n};\n\nexport const usePriceAtSqrtPriceX96 = (\n poolManager?: Address,\n poolKey?: PoolKey,\n sqrtPriceX96?: bigint,\n) => {\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const priceBigInt = useMemo(\n () =>\n sqrtPriceX96 !== undefined\n ? getPriceAtSqrtPriceX96(sqrtPriceX96)\n : undefined,\n [sqrtPriceX96],\n );\n const price = useMemo(\n () =>\n priceBigInt && token0Decimals && token1Decimals\n ? wrapPrice(priceBigInt, token0Decimals, token1Decimals)\n : undefined,\n [priceBigInt, token0Decimals, token1Decimals],\n );\n return price;\n};\n","import {useMemo} from 'react';\nimport type {Address} from 'viem';\nimport type {PoolKey} from './usePoolData';\nimport {usePriceAtSqrtPriceX96} from './usePriceAtTick';\nimport {useCurrentTick} from './useCurrentTick';\n\nexport const useCurrentPrice = (poolManager?: Address, poolKey?: PoolKey) => {\n const {data: {sqrtPriceX96, currentTick} = {}} = useCurrentTick(\n poolManager,\n poolKey,\n );\n const currentPrice = usePriceAtSqrtPriceX96(\n poolManager,\n poolKey,\n sqrtPriceX96,\n );\n return useMemo(\n () => ({currentPrice, sqrtPriceX96, currentTick}),\n [currentPrice, currentTick],\n );\n};\n","import {encodeAbiParameters, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentPrice} from '~/hooks/pool/useCurrentPrice';\nimport {useLens} from '~/hooks/useLens';\n\nimport {sleep} from '~/lib/utils';\nimport {swappers} from '~/lib/contracts';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useExerciseOption = (marketAddr: Address | undefined) => {\n const {vault, poolManager, poolKey} = useMarketData(marketAddr);\n const {timelockLens} = useLens();\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n const {writeContractAsync} = useWriteContract();\n\n const {sqrtPriceX96} = useCurrentPrice(poolManager, poolKey);\n\n const exerciseOption = async ({\n option,\n liquidities,\n }: {\n option: OptionData;\n liquidities: readonly bigint[];\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n if (!timelockLens) throw new Error('Timelock lens not available');\n if (!vault) throw new Error('Vault not available');\n if (!poolKey) throw new Error('Pool data not available');\n if (!sqrtPriceX96) throw new Error('Current price not available');\n\n const swapper = swappers[client.chain.id];\n if (!swapper) throw new Error('Swapper not available');\n\n const minSqrtPrice = (sqrtPriceX96 * 9n) / 10n;\n const maxSqrtPrice = (sqrtPriceX96 * 11n) / 10n;\n\n const refTick = await timelockLens.read.getRefTick([\n vault,\n option.startTick,\n ]);\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'exerciseOption',\n args: [\n option.optionId,\n liquidities,\n 0n,\n swapper,\n encodeAbiParameters(\n [\n {\n type: 'tuple',\n components: [\n {type: 'address', name: 'currency0'},\n {type: 'address', name: 'currency1'},\n {type: 'uint24', name: 'fee'},\n {type: 'int24', name: 'tickSpacing'},\n {type: 'address', name: 'hooks'},\n ],\n },\n {type: 'uint160'},\n {type: 'uint160'},\n ],\n [poolKey, minSqrtPrice, maxSqrtPrice],\n ),\n refTick,\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: exerciseOption});\n};\n","import {useMemo} from 'react';\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useCurrentPrice} from '~/hooks/pool/useCurrentPrice';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {\n token0ToToken1,\n token0ToToken1AtTick,\n token1ToToken0,\n token1ToToken0AtTick,\n} from '~/lib/liquidityUtils';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {getPayoutAtPrice} from '~/lib/optionUtils';\n\nexport const useOptionPnl = (option: OptionData) => {\n const {marketAddr, optionType, strikeTick, positionSizeCurrent} = option;\n\n const {poolManager, poolKey, optionAssetIsToken0, payoutAssetDecimals} =\n useMarketData(marketAddr);\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n\n const {currentPrice} = useCurrentPrice(poolManager, poolKey);\n\n const displayPnl = useMemo(() => {\n if (\n optionAssetIsToken0 === undefined ||\n currentPrice === undefined ||\n !payoutAssetDecimals\n )\n return undefined;\n\n const strikeSize = optionAssetIsToken0\n ? token0ToToken1AtTick(positionSizeCurrent, strikeTick)\n : token1ToToken0AtTick(positionSizeCurrent, strikeTick);\n\n const currentSize = optionAssetIsToken0\n ? token0ToToken1(positionSizeCurrent, currentPrice.scaled)\n : token1ToToken0(positionSizeCurrent, currentPrice.scaled);\n\n const delta = currentSize - strikeSize;\n const pnl = optionType === 'CALL' ? delta : -delta;\n\n return wrapAmount(pnl, payoutAssetDecimals);\n }, [\n strikeTick,\n optionType,\n optionAssetIsToken0,\n currentPrice,\n positionSizeCurrent,\n payoutAssetDecimals,\n ]);\n\n const unrealizedPayout = useMemo(() => {\n if (\n !payoutAssetDecimals ||\n !currentPrice ||\n !tickSpacing ||\n optionAssetIsToken0 === undefined\n )\n return undefined;\n\n const payout = getPayoutAtPrice(\n option,\n option.liquiditiesCurrent,\n currentPrice.scaled,\n tickSpacing,\n optionAssetIsToken0,\n );\n return wrapAmount(payout, payoutAssetDecimals);\n }, [\n currentPrice,\n tickSpacing,\n optionType,\n payoutAssetDecimals,\n optionAssetIsToken0,\n ]);\n\n return {unrealizedPayout, displayPnl};\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useMemo} from 'react';\n\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useMarketData} from '~/hooks/market/useMarketData';\n\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {roundTick} from '~/lib/liquidityUtils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useOptionPremium = (\n marketAddr: Address | undefined,\n optionType: 'CALL' | 'PUT',\n optionAmount?: bigint,\n addedDuration?: number,\n remainingDuration = 0,\n strikeTick?: number,\n) => {\n const {poolManager, poolKey, payoutAssetDecimals, optionAssetIsToken0} =\n useMarketData(marketAddr);\n\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n\n const strikeTickRounded = useMemo(() => {\n if (!tickSpacing || currentTick === undefined) {\n return undefined;\n }\n let strikeTickRounded = roundTick(strikeTick ?? currentTick, tickSpacing);\n\n if (\n (optionType === 'CALL' && optionAssetIsToken0) ||\n (optionType === 'PUT' && !optionAssetIsToken0)\n ) {\n strikeTickRounded += tickSpacing;\n }\n return strikeTickRounded;\n }, [currentTick, tickSpacing, optionType, optionAssetIsToken0, strikeTick]);\n\n const {data: [premium, protocolFee] = []} = useReadContract({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'calculatePremium',\n args:\n strikeTickRounded !== undefined &&\n optionAmount !== undefined &&\n addedDuration !== undefined\n ? [\n optionType === 'CALL' ? 0 : 1,\n optionAmount,\n strikeTickRounded,\n addedDuration,\n remainingDuration,\n ]\n : undefined,\n });\n\n return useMemo(() => {\n if (\n premium === undefined ||\n protocolFee === undefined ||\n payoutAssetDecimals === undefined\n ) {\n return {};\n }\n return {\n premium: wrapAmount(premium, payoutAssetDecimals),\n protocolFee: wrapAmount(protocolFee, payoutAssetDecimals),\n totalPremium: wrapAmount(premium + protocolFee, payoutAssetDecimals),\n };\n }, [premium, protocolFee, payoutAssetDecimals]);\n};\n","import type {Address} from 'viem';\nimport {useQuery, type NonUndefinedGuard} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport type OptionData = NonUndefinedGuard<\n ReturnType<typeof useUserOptions>['data']\n>[number];\n\nconst useUserOptions = (\n userAddr: Address | undefined,\n marketAddr: Address | '*' | undefined,\n active = false,\n) => {\n const {graphqlClient} = useTimelockConfig();\n\n userAddr = userAddr?.toLowerCase() as Address | undefined;\n marketAddr = marketAddr?.toLowerCase() as Address | '*' | undefined;\n\n return useQuery({\n queryKey: ['userOptions', userAddr || '--', active],\n queryFn: async () => {\n if (!graphqlClient || !userAddr || !marketAddr) return [];\n\n const data = await (marketAddr === '*'\n ? active\n ? graphqlClient.GetActiveUserOptions({userAddr})\n : graphqlClient.GetClosedUserOptions({userAddr})\n : active\n ? graphqlClient.GetActiveUserOptionsByMarket({\n userAddr,\n marketAddr,\n })\n : graphqlClient.GetClosedUserOptionsByMarket({\n userAddr,\n marketAddr,\n }));\n\n return data.UserOption.map(option => ({\n ...option,\n optionId: BigInt(option.optionId),\n marketAddr: option.market!.address as Address,\n ownerAddr: option.owner!.address as Address,\n optionType: option.optionType as 'CALL' | 'PUT',\n createdAt: new Date(Number(option.createdAt) * 1000),\n expiresAt: new Date(Number(option.expiresAt) * 1000),\n premium: BigInt(option.premium),\n protocolFee: BigInt(option.protocolFee),\n realizedPayout: BigInt(option.realizedPayout),\n liquiditiesAtOpen: option.liquiditiesAtOpen.map(l => BigInt(l)),\n liquiditiesCurrent: option.liquiditiesCurrent.map(l => BigInt(l)),\n positionSizeAtOpen: BigInt(option.positionSizeAtOpen),\n positionSizeCurrent: BigInt(option.positionSizeCurrent),\n strikePrice: BigInt(option.strikePrice),\n entryPrice: BigInt(option.entryPrice),\n })).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n },\n enabled: !!userAddr && !!marketAddr && !!graphqlClient,\n });\n};\n\nexport const useActiveUserOptions = (\n userAddr?: Address,\n marketAddr?: Address | '*',\n) => {\n return useUserOptions(userAddr, marketAddr, true);\n};\n\nexport const useClosedUserOptions = (\n userAddr?: Address,\n marketAddr?: Address | '*',\n) => {\n return useUserOptions(userAddr, marketAddr, false);\n};\n","import {maxUint256, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport type {OptionData} from './useUserOptions';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {sleep} from '~/lib/utils';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useExtendOption = (marketAddr: Address | undefined) => {\n const {payoutAsset} = useMarketData(marketAddr);\n\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const extendOption = async ({\n option,\n duration,\n }: {\n option: OptionData;\n duration: number;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n\n if (!marketAddr || !payoutAsset) {\n throw new Error('Market address not available');\n }\n const market = getTimelockMarket(marketAddr, client);\n\n const remainingDuration = Math.max(\n 0,\n Math.floor((option.expiresAt.getTime() - Date.now()) / 1000),\n );\n const [premium, protocolFee] = await market.read.calculatePremium([\n option.optionType === 'CALL' ? 0 : 1,\n option.positionSizeCurrent,\n option.strikeTick,\n duration,\n remainingDuration,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'extendOption',\n args: [option.optionId, duration, maxUint256],\n });\n await waitForTransactionReceipt(client, {hash});\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n\n return hash;\n };\n return useMutation({mutationFn: extendOption});\n};\n","import type {Address} from 'viem';\nimport {useQuery, type NonUndefinedGuard} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport type OptionEvent = NonUndefinedGuard<\n ReturnType<typeof useOptionTimeline>['data']\n>[number];\nexport type MintOptionEvent = Extract<OptionEvent, {type: 'mint'}>;\nexport type ExerciseOptionEvent = Extract<OptionEvent, {type: 'exercise'}>;\nexport type ExtendEvent = Extract<OptionEvent, {type: 'extend'}>;\n\nexport const useOptionTimeline = (\n marketAddr: Address | undefined,\n optionId: bigint | undefined,\n) => {\n const {graphqlClient} = useTimelockConfig();\n marketAddr = marketAddr?.toLowerCase() as Address | undefined;\n\n return useQuery({\n queryKey: [\n 'optionTimeline',\n marketAddr || '--',\n optionId?.toString() || '--',\n ],\n queryFn: async () => {\n if (!graphqlClient || !marketAddr || optionId === undefined) {\n return [];\n }\n const result = await graphqlClient.GetOptionEvents({\n marketAddr: marketAddr,\n optionId: optionId.toString(),\n });\n\n const mintEvents = result.MintOptionEvent.map(event => ({\n id: event.id,\n optionType: event.optionType as 0 | 1,\n strikeTick: event.strikeTick,\n price: BigInt(event.price),\n premium: BigInt(event.premium),\n protocolFee: BigInt(event.protocolFee),\n liquidities: event.liquidities.map(l => BigInt(l)),\n timestamp: new Date(Number(event.timestamp) * 1000),\n expiresAt: new Date(Number(event.expiresAt) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n const exerciseEvents = result.ExerciseOptionEvent.map(event => ({\n id: event.id,\n payout: BigInt(event.payout),\n price: BigInt(event.price),\n liquidities: event.liquidities.map(l => BigInt(l)),\n timestamp: new Date(Number(event.timestamp) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n const extendEvents = result.ExtendOptionEvent.map(event => ({\n id: event.id,\n premium: BigInt(event.premium),\n protocolFee: BigInt(event.protocolFee),\n price: BigInt(event.price),\n addedDuration: BigInt(event.addedDuration),\n timestamp: new Date(Number(event.timestamp) * 1000),\n blockNumber: BigInt(event.blockNumber),\n transactionHash: event.transactionHash,\n }));\n\n type MintEvent = {type: 'mint'; data: (typeof mintEvents)[number]};\n type ExerciseEvent = {\n type: 'exercise';\n data: (typeof exerciseEvents)[number];\n };\n type ExtendEvent = {type: 'extend'; data: (typeof extendEvents)[number]};\n type OptionEvent = MintEvent | ExerciseEvent | ExtendEvent;\n\n const events: OptionEvent[] = [\n ...mintEvents.map(data => ({type: 'mint', data}) as const),\n ...exerciseEvents.map(data => ({type: 'exercise', data}) as const),\n ...extendEvents.map(data => ({type: 'extend', data}) as const),\n ];\n return events.sort(\n (a, b) => a.data.timestamp.getTime() - b.data.timestamp.getTime(),\n );\n },\n enabled: !!marketAddr && optionId !== undefined && !!graphqlClient,\n });\n};\n","import type {Address, Hex} from 'viem';\nimport {useEffect} from 'react';\nimport {useConnection, useSignMessage} from 'wagmi';\nimport {z} from 'zod';\nimport {useMutation, useQuery} from '@tanstack/react-query';\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nconst ZHex = z\n .string()\n .regex(/^0x[a-fA-F0-9]+$/, 'Invalid hex string')\n .transform(v => v as Hex);\n\nconst ZSavedSignature = z.object({\n signature: ZHex,\n message: z.string(),\n});\n\nconst getSavedSignature = (userAddr: Address) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n const raw = localStorage.getItem(key);\n if (!raw) return;\n\n try {\n return ZSavedSignature.parse(JSON.parse(raw));\n } catch (error) {\n clearSignature(userAddr);\n throw new Error('Invalid stored signature: ' + raw);\n }\n};\n\nconst saveSignature = (userAddr: Address, message: string, signature: Hex) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n const data = JSON.stringify({message, signature});\n localStorage.setItem(key, data);\n};\n\nconst clearSignature = (userAddr: Address) => {\n const key = `perps-auth-${userAddr.toLowerCase()}`;\n localStorage.removeItem(key);\n};\n\nexport const usePerpsOperator = () => {\n const {address: userAddr} = useConnection();\n const {perpsOperatorUrl, perpsOperator: operator} = useTimelockConfig();\n const {signMessageAsync} = useSignMessage();\n\n const {data: address} = useQuery({\n queryKey: ['perpsOperatorAddr', perpsOperatorUrl || '--'],\n queryFn: () => operator?.getOperatorAddr(),\n staleTime: 10000,\n refetchInterval: 10000,\n enabled: !!operator,\n });\n\n const validateAndSetAuth = async (message: string, signature: Hex) => {\n if (!operator || !userAddr) return;\n\n try {\n const {address, validUntil} = await operator.validateAuthMessage(\n message,\n signature,\n );\n if (validUntil < Date.now()) {\n throw new Error('Signature expired');\n }\n if (address.toLowerCase() !== userAddr.toLowerCase()) {\n throw new Error('Valid signature but different user address');\n }\n operator.setAuth(message, signature);\n } catch (error) {\n clearSignature(userAddr);\n console.error(error);\n }\n };\n\n useEffect(() => {\n if (!userAddr || !operator) return;\n\n const sig = getSavedSignature(userAddr);\n if (!sig) return;\n\n void validateAndSetAuth(sig.message, sig.signature);\n }, [userAddr, operator]);\n\n const signMessage = useMutation({\n mutationFn: async () => {\n if (!operator) throw new Error('Operator not initialized');\n if (!userAddr) throw new Error('Wallet not connected');\n\n const message = await operator.genAuthMessage(userAddr);\n const signature = await signMessageAsync({message});\n\n saveSignature(userAddr, message, signature);\n operator.setAuth(message, signature);\n },\n });\n\n return {operator, address, signMessage};\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\n\nimport {useTimelockConfig} from '~/providers/TimelockProvider';\n\nexport const useUserOperators = (userAddr?: Address, marketAddr?: Address) => {\n const {graphqlClient} = useTimelockConfig();\n\n return useQuery({\n queryKey: [\n 'userOperators',\n userAddr?.toLowerCase() || '--',\n marketAddr?.toLowerCase() || '--',\n ],\n queryFn: async () => {\n if (!userAddr || !marketAddr) return undefined;\n\n const result = await graphqlClient!.GetUserMarketOperators({\n userAddr: userAddr.toLowerCase(),\n marketAddr: marketAddr.toLowerCase(),\n });\n return result.UserMarketOperator.map(operator => ({\n ...operator,\n spendingApproval: BigInt(operator.spendingApproval),\n operatorAddr: operator.operator!.address.toLowerCase(),\n }));\n },\n enabled: !!userAddr && !!marketAddr && !!graphqlClient,\n });\n};\n","import type {Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient, useConnection} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useSetOperatorPerms = (marketAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {writeContractAsync} = useWriteContract();\n\n const setOperatorPerms = async ({\n operator,\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n }: {\n operator: Address;\n canExtend: boolean;\n canExercise: boolean;\n canTransfer: boolean;\n canMint: boolean;\n spendingApproval: bigint;\n }) => {\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not available');\n\n const hash = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'setOperatorPerms',\n args: [\n operator,\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n ],\n });\n await waitForTransactionReceipt(client, {hash});\n\n void queryClient.invalidateQueries({queryKey: ['userOperators']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return hash;\n };\n return useMutation({mutationFn: setOperatorPerms});\n};\n","import {maxUint256, type Address} from 'viem';\nimport {useConnection, useClient} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {usePerpsOperator} from './usePerpsOperator';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useUserOperators} from '~/hooks/operators/useUserOperators';\nimport {useSetOperatorPerms} from '~/hooks/operators/useSetOperatorPerms';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {getTimelockMarket} from '~/lib/contracts';\nimport {getNearestValidStrikeTick} from '~/lib/liquidityUtils';\nimport {sleep} from '~/lib/utils';\n\nexport const useMintPerp = (marketAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {address} = useConnection();\n\n const {\n operator,\n address: operatorAddr,\n signMessage: {mutateAsync: signMessage},\n } = usePerpsOperator();\n\n const {poolManager, poolKey, optionAssetIsToken0, payoutAsset} =\n useMarketData(marketAddr);\n const {tickSpacing} = usePoolData(poolManager, poolKey);\n\n const {askForApproval} = useApproval();\n const {mutateAsync: setOperatorPerms} = useSetOperatorPerms(marketAddr);\n\n const {refetch: refetchOperators} = useUserOperators(address, marketAddr);\n const {refetch: refetchCurrentTick} = useCurrentTick(poolManager, poolKey);\n\n const mintPerp = async (data: {\n optionType: 'CALL' | 'PUT';\n amount: bigint;\n duration: number;\n strikeTick?: number;\n }) => {\n const {optionType, amount, duration, strikeTick} = data;\n\n if (!client || !address) throw new Error('Wallet not connected');\n if (!marketAddr) throw new Error('Market address not found');\n if (!tickSpacing) throw new Error('Pool data not found');\n\n if (!operator || !operatorAddr) {\n throw new Error('Operator address not found');\n }\n if (optionAssetIsToken0 === undefined || !payoutAsset) {\n throw new Error('Market data not found');\n }\n if (!operator.auth) await signMessage();\n\n const market = getTimelockMarket(marketAddr, client);\n\n const {data: {currentTick} = {}} = await refetchCurrentTick();\n\n if (currentTick === undefined) {\n throw new Error('Could not fetch current tick');\n }\n const {data: operators = []} = await refetchOperators();\n\n const userPerms = operatorAddr\n ? operators.find(\n o => o.operatorAddr.toLowerCase() === operatorAddr.toLowerCase(),\n )\n : undefined;\n\n const validStrikeTick = getNearestValidStrikeTick(\n optionType,\n optionAssetIsToken0,\n tickSpacing,\n currentTick,\n strikeTick,\n );\n const [premium, protocolFee] = await market.read.calculatePremium([\n optionType === 'CALL' ? 0 : 1,\n amount,\n validStrikeTick,\n duration,\n 0,\n ]);\n const maxPremium = ((premium + protocolFee) * 11n) / 10n;\n\n const hasEnoughPerms =\n userPerms &&\n userPerms.canMint &&\n userPerms.canExtend &&\n userPerms.canExercise &&\n userPerms.spendingApproval > maxPremium;\n\n if (!hasEnoughPerms) {\n await setOperatorPerms({\n operator: operatorAddr,\n canMint: true,\n canExtend: true,\n canExercise: true,\n canTransfer: userPerms?.canTransfer || false,\n spendingApproval: maxUint256,\n });\n }\n await askForApproval(payoutAsset, marketAddr, maxPremium);\n\n await operator.mintPerp({\n marketAddr: marketAddr,\n amount: amount,\n optionType: optionType,\n duration: duration,\n strikeTick: validStrikeTick,\n });\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n };\n return useMutation({mutationFn: mintPerp});\n};\n","import {useMutation, useQueryClient} from '@tanstack/react-query';\nimport {usePerpsOperator} from './usePerpsOperator';\nimport type {ExercisePerpBody} from '~/lib/perpsOperator';\nimport {sleep} from '~/lib/utils';\n\nexport const useClosePerp = () => {\n const queryClient = useQueryClient();\n const {\n operator,\n signMessage: {mutateAsync: signMessage},\n } = usePerpsOperator();\n\n return useMutation({\n mutationFn: async (body: ExercisePerpBody) => {\n if (!operator) throw new Error('Operator not connected');\n if (!operator.auth) await signMessage();\n await operator.exercisePerp(body);\n\n await sleep(200);\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['userOptions']});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n },\n });\n};\n","import type {Address} from 'viem';\nimport {useQuery} from '@tanstack/react-query';\nimport {usePerpsOperator} from './usePerpsOperator';\n\nexport const useUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n type: 'active' | 'closed' | undefined,\n) => {\n const {operator} = usePerpsOperator();\n\n userAddr = userAddr?.toLowerCase() as Address;\n marketAddr = marketAddr?.toLowerCase() as Address;\n\n return useQuery({\n queryKey: ['userPerps', type, userAddr || '-', marketAddr || '-'],\n queryFn: () => operator?.getUserPerps(userAddr!, marketAddr, type),\n enabled: !!userAddr,\n staleTime: 10000,\n refetchInterval: 10000,\n });\n};\n\nexport const useActiveUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n) => {\n return useUserPerps(marketAddr, userAddr, 'active');\n};\n\nexport const useClosedUserPerps = (\n marketAddr: Address | undefined,\n userAddr: Address | undefined,\n) => {\n return useUserPerps(marketAddr, userAddr, 'closed');\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useClient, useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type TokenData = ReturnType<typeof useTokenData>;\n\nexport const useTokenData = (tokenAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n const client = useClient();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getTokenData',\n args: tokenAddr ? [tokenAddr] : undefined,\n query: {enabled: !!tokenAddr && !!client},\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useMemo} from 'react';\nimport {useTokenData} from './useTokenData';\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {erc20Abi} from '~/abis/erc20';\n\nexport const useTokenBalance = (token?: Address, user?: Address) => {\n const {decimals} = useTokenData(token);\n\n const {data: raw, ...rest} = useReadContract({\n address: token,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: user ? [user] : undefined,\n query: {enabled: !!token && !!user},\n });\n const balance = useMemo(\n () =>\n raw !== undefined && decimals !== undefined\n ? wrapAmount(raw, decimals)\n : undefined,\n [raw, decimals],\n );\n\n return {data: balance, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useMemo} from 'react';\nimport {useReadContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {useTokenBalance} from '~/hooks/tokens/useTokenBalance';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useOperatorPerms = (\n marketAddr?: Address,\n userAddr?: Address,\n operatorAddr?: Address,\n) => {\n const {payoutAsset} = useMarketData(marketAddr);\n const {data: payoutAssetBalance} = useTokenBalance(payoutAsset, userAddr);\n\n const {data, ...rest} = useReadContract({\n abi: optionsMarketAbi,\n address: marketAddr,\n functionName: 'operatorPerms',\n args: [userAddr!, operatorAddr!],\n query: {\n enabled: !!userAddr && !!operatorAddr,\n refetchInterval: 5000,\n },\n });\n const [canExtend, canExercise, canTransfer, canMint, spendingApproval] =\n data || [];\n\n const min = (a: bigint, b: bigint) => (a < b ? a : b);\n\n const effectiveApproval =\n spendingApproval && payoutAssetBalance\n ? min(spendingApproval, payoutAssetBalance.scaled)\n : 0n;\n\n const d = useMemo(\n () => ({\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n effectiveApproval,\n }),\n [\n canExtend,\n canExercise,\n canTransfer,\n canMint,\n spendingApproval,\n effectiveApproval,\n ],\n );\n return {data: d, ...rest};\n};\n","import {useQuery} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useChainId} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {getPriceHistory, type PriceResolution} from '~/lib/price';\n\nexport const usePriceHistory = (\n pool: Address | undefined,\n token: 0 | 1,\n resolution: PriceResolution,\n startTimestamp: Date,\n endTimestamp: Date,\n) => {\n const chainId = useChainId();\n\n return useQuery({\n queryKey: [\n 'priceHistory',\n pool,\n chainId,\n token,\n resolution,\n startTimestamp,\n endTimestamp,\n ],\n queryFn: () =>\n getPriceHistory(pool!, token, resolution, startTimestamp, endTimestamp),\n enabled: !!pool && startTimestamp < endTimestamp,\n staleTime: 60 * 1000, // Consider data stale after 1 minute\n gcTime: 5 * 60 * 1000, // Keep in cache for 5 minutes\n retry: 2,\n });\n};\n\nexport const useMarketPriceHistory = (\n marketAddr: Address | undefined,\n resolution: PriceResolution,\n startTimestamp: Date,\n endTimestamp: Date,\n) => {\n const {pool, optionAssetIsToken0} = useMarketData(marketAddr);\n\n return usePriceHistory(\n pool!,\n optionAssetIsToken0 ? 0 : 1,\n resolution,\n startTimestamp,\n endTimestamp,\n );\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {lensAbi} from '~/abis/lens';\nimport {useLens} from '../useLens';\n\nexport const useVaultData = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getVaultData',\n args: vaultAddr ? [vaultAddr] : undefined,\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, encodeFunctionData} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useWaitForTransactionReceipt, useClient} from 'wagmi';\n\nimport {useCurrentTick} from '../pool/useCurrentTick';\nimport {useVaultData} from './useVaultData';\nimport {useLens} from '../useLens';\n\nimport {singleOwnerVaultAbi} from '~/abis/singleOwnerVault';\n\ninterface BurnPosition {\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}\n\nexport const useBurnLiquidity = (vaultAddr: Address | undefined) => {\n const client = useClient();\n const {timelockLens} = useLens();\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n\n const {writeContractAsync, data: hash, isPending, error} = useWriteContract();\n\n const {isLoading: isConfirming, isSuccess} = useWaitForTransactionReceipt({\n hash,\n });\n\n const burn = async (\n tickLower: number,\n tickUpper: number,\n liquidity: bigint,\n ) => {\n if (!client) throw new Error('Wallet not connected');\n\n if (!vaultAddr || !timelockLens) {\n throw new Error('Vault/lens not available');\n }\n const refTick = await timelockLens.read.getRefTick([vaultAddr, tickLower]);\n\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'burn',\n args: [tickLower, tickUpper, liquidity, refTick],\n });\n await waitForTransactionReceipt(client, {hash});\n return hash;\n };\n\n const burnMultiple = async (positions: BurnPosition[]) => {\n if (!client) throw new Error('Wallet not connected');\n\n if (!currentTick) {\n throw new Error('Current tick not available');\n }\n if (positions.length === 0) {\n throw new Error('No positions to burn');\n }\n if (!timelockLens || !vaultAddr) {\n throw new Error('Vault/lens not available');\n }\n if (positions.length === 1) {\n await burn(\n positions[0].tickLower,\n positions[0].tickUpper,\n positions[0].liquidity,\n );\n } else {\n const refTick = await timelockLens.read.getRefTick([\n vaultAddr,\n Math.min(...positions.map(p => p.tickLower)),\n ]);\n const multicallData = positions.map(p =>\n encodeFunctionData({\n abi: singleOwnerVaultAbi,\n functionName: 'burn',\n args: [p.tickLower, p.tickUpper, p.liquidity, refTick],\n }),\n );\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'multicall',\n args: [multicallData],\n });\n await waitForTransactionReceipt(client, {hash});\n }\n };\n\n return {\n burnMultiple,\n burn,\n hash,\n isPending,\n isConfirming,\n isSuccess,\n error,\n isLoading: isPending || isConfirming,\n };\n};\n","import {zeroAddress, type Address} from 'viem';\nimport {useReadContract} from 'wagmi';\n\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type LiquidityBlockData = ReturnType<\n typeof useLiquidityBlocks\n>['data'][0];\n\nexport const useLiquidityBlocks = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data: blocks = [], ...rest} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getAllBlocks',\n args: [vaultAddr || zeroAddress],\n query: {enabled: !!vaultAddr},\n });\n return {data: blocks, ...rest};\n};\n","import {encodeFunctionData, type Address} from 'viem';\nimport {waitForTransactionReceipt} from 'viem/actions';\nimport {useWriteContract, useClient} from 'wagmi';\nimport {useMutation, useQueryClient} from '@tanstack/react-query';\n\nimport {useVaultData} from './useVaultData';\nimport {useCurrentTick} from '~/hooks/pool/useCurrentTick';\nimport {usePoolData} from '~/hooks/pool/usePoolData';\nimport {useApproval} from '~/hooks/tokens/useApproval';\nimport {useLens} from '~/hooks/useLens';\n\nimport {getAmountsFromLiquidity} from '~/lib/liquidityUtils';\nimport {singleOwnerVaultAbi} from '~/abis/singleOwnerVault';\n\nexport const batchGetAmountsFromLiquidity = (\n tickLowers: number[],\n tickUppers: number[],\n liquidities: bigint[],\n currentTick: number,\n) => {\n let totalAmount0 = 0n;\n let totalAmount1 = 0n;\n\n const amounts0: bigint[] = [];\n const amounts1: bigint[] = [];\n\n for (const [i, tickLower] of tickLowers.entries()) {\n const [amount0, amount1] = getAmountsFromLiquidity(\n tickLower,\n tickUppers[i],\n liquidities[i],\n currentTick,\n );\n totalAmount0 += amount0;\n totalAmount1 += amount1;\n amounts0.push(amount0);\n amounts1.push(amount1);\n }\n return {totalAmount0, totalAmount1, amounts0, amounts1};\n};\n\ninterface MintPositionParams {\n tickLower: number;\n tickUpper: number;\n liquidity: bigint;\n}\n\nexport const useMintLiquidity = (vaultAddr: Address | undefined) => {\n const queryClient = useQueryClient();\n const client = useClient();\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {timelockLens} = useLens();\n\n const {data: {currentTick} = {}} = useCurrentTick(poolManager, poolKey);\n const {token0, token1} = usePoolData(poolManager, poolKey);\n\n const {askForApproval} = useApproval();\n const {writeContractAsync} = useWriteContract();\n\n const processApproval = async (params: MintPositionParams[]) => {\n if (currentTick === undefined || !token0 || !token1 || !vaultAddr) {\n throw new Error('Current tick not available');\n }\n const {totalAmount0, totalAmount1} = batchGetAmountsFromLiquidity(\n params.map(p => p.tickLower),\n params.map(p => p.tickUpper),\n params.map(p => p.liquidity),\n currentTick,\n );\n await askForApproval(token0, vaultAddr, totalAmount0);\n await askForApproval(token1, vaultAddr, totalAmount1);\n };\n\n return useMutation({\n mutationFn: async (params: MintPositionParams | MintPositionParams[]) => {\n if (!client) {\n throw new Error('Wallet not connected');\n }\n if (currentTick === undefined) {\n throw new Error('Current tick not available');\n }\n if (!timelockLens || !vaultAddr) {\n throw new Error('Vault/lens not available');\n }\n if (!Array.isArray(params)) {\n params = [params];\n }\n if (params.length === 0) {\n throw new Error('No positions to mint');\n }\n await processApproval(params);\n\n const refTicks = await timelockLens.read.batchGetRefTick([\n vaultAddr,\n params.map(position => position.tickLower),\n ]);\n const multicallData = params.map((p, i) =>\n encodeFunctionData({\n abi: singleOwnerVaultAbi,\n functionName: 'mint',\n args: [p.tickLower, p.tickUpper, p.liquidity, refTicks[i]],\n }),\n );\n const hash = await writeContractAsync({\n address: vaultAddr,\n abi: singleOwnerVaultAbi,\n functionName: 'multicall',\n args: [multicallData],\n });\n await waitForTransactionReceipt(client, {hash});\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n },\n });\n};\n","import {useReadContract} from 'wagmi';\nimport type {Address} from 'viem';\n\nimport {useLens} from '../useLens';\nimport {useVaultData} from './useVaultData';\nimport {usePoolData} from '../pool/usePoolData';\n\nimport {wrapAmount} from '~/lib/numberUtils';\nimport {lensAbi} from '~/abis/lens';\nimport {useMemo} from 'react';\n\nexport const useVaultTVL = (vaultAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {poolManager, poolKey} = useVaultData(vaultAddr);\n const {token0Decimals, token1Decimals} = usePoolData(poolManager, poolKey);\n\n const {data, refetch} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getVaultTVL',\n args: [vaultAddr!],\n query: {enabled: !!vaultAddr && !!timelockLens},\n });\n\n return useMemo(() => {\n if (!token0Decimals || !token1Decimals || !data) return {};\n\n const total0 = wrapAmount(data[0], token0Decimals);\n const total1 = wrapAmount(data[1], token1Decimals);\n const borrowed0 = wrapAmount(data[2], token0Decimals);\n const borrowed1 = wrapAmount(data[3], token1Decimals);\n const tvlAs0 = wrapAmount(data[4], token0Decimals);\n const tvlAs1 = wrapAmount(data[5], token1Decimals);\n const blocksCount = data[6];\n\n return {\n tvlAs0,\n tvlAs1,\n total0,\n total1,\n borrowed0,\n borrowed1,\n blocksCount,\n refetch,\n };\n }, [data, token0Decimals, token1Decimals, refetch]);\n};\n","import type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useGuardianGlobalState = (guardianAddr?: Address) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getGlobalGuardianState',\n args: guardianAddr ? [guardianAddr] : undefined,\n });\n};\n","import type {Address} from 'viem';\nimport {usePublicClient, useWriteContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {guardianAbi} from '~/abis/guardian';\nimport {useGuardianGlobalState} from './useGuardianGlobalState';\n\nexport const usePauseGlobalTrading = (marketAddr: Address | undefined) => {\n const {guardian} = useMarketData(marketAddr);\n const {data: {globalBurnPaused, globalMintPaused} = {}, refetch} =\n useGuardianGlobalState(guardian);\n\n const publicClient = usePublicClient();\n const {writeContractAsync, ...rest} = useWriteContract();\n\n const pauseGlobalTrading = async (paused: boolean) => {\n if (!marketAddr) {\n throw new Error('Market address is required');\n }\n if (!guardian) {\n throw new Error('Could not load guardian address');\n }\n if (!globalMintPaused || !globalBurnPaused) {\n throw new Error('Could not load global mint or burn paused state');\n }\n if (!publicClient) {\n throw new Error('Could not load public client');\n }\n const hash = await writeContractAsync({\n address: guardian,\n abi: guardianAbi,\n functionName: 'pauseGlobal',\n args: [globalMintPaused.paused, globalBurnPaused.paused, paused],\n });\n await publicClient.waitForTransactionReceipt({hash});\n void refetch();\n\n return hash;\n };\n return {pauseGlobalTrading, ...rest};\n};\n","import type {Address} from 'viem';\nimport {useWriteContract} from 'wagmi';\nimport {useMarketData} from '~/hooks/market/useMarketData';\nimport {guardianAbi} from '~/abis/guardian';\n\nexport const usePauseMarketTrading = (marketAddr: Address | undefined) => {\n const {guardian} = useMarketData(marketAddr);\n const {writeContractAsync, ...rest} = useWriteContract();\n\n const pauseMarketTrading = async (paused: boolean) => {\n if (!marketAddr) {\n throw new Error('Market address is required');\n }\n if (!guardian) {\n throw new Error('Could not load guardian address');\n }\n return await writeContractAsync({\n address: guardian,\n abi: guardianAbi,\n functionName: 'pauseMarket',\n args: [marketAddr, paused],\n });\n };\n return {pauseMarketTrading, ...rest};\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useFeeRates = (feeStrategy?: Address) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: feeStrategy ? [feeStrategy] : undefined,\n functionName: 'getFeeRates',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, decodeEventLog} from 'viem';\nimport {useChainId, useWriteContract, usePublicClient} from 'wagmi';\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useMarketState} from '~/hooks/market/useMarketState';\nimport {useFeeRates} from './useFeeRates';\nimport {timelockFactories} from '~/lib/contracts';\nimport {factoryAbi} from '~/abis/factory';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useUpdateMarketFees = (marketAddr: Address) => {\n const {writeContractAsync, ...rest} = useWriteContract();\n const queryClient = useQueryClient();\n const publicClient = usePublicClient();\n const chainId = useChainId();\n\n const {data: {feeStrategy, optionPricing} = {}} = useMarketState(marketAddr);\n\n const {openingFeeRate, baseFeeRate, minOpeningFee, minBaseFee, feeRecipient} =\n useFeeRates(feeStrategy);\n\n const updateMarketFees = async (rates: {\n openingFeeRate?: number;\n baseFeeRate?: number;\n minOpeningFee?: bigint;\n minBaseFee?: bigint;\n feeRecipient?: Address;\n }) => {\n if (\n openingFeeRate === undefined ||\n baseFeeRate === undefined ||\n minOpeningFee === undefined ||\n minBaseFee === undefined ||\n feeRecipient === undefined\n ) {\n throw new Error('Missing current fee rates');\n }\n if (!optionPricing) {\n throw new Error('Could not load market state');\n }\n if (!publicClient) {\n throw new Error('Public client not available');\n }\n const factoryAddr = timelockFactories[chainId].toLowerCase() as Address;\n\n const hash = await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployFeeStrategy',\n args: [\n rates.openingFeeRate ?? openingFeeRate,\n rates.baseFeeRate ?? baseFeeRate,\n rates.minOpeningFee ?? minOpeningFee,\n rates.minBaseFee ?? minBaseFee,\n rates.feeRecipient ?? feeRecipient,\n ],\n });\n const receipt = await publicClient.waitForTransactionReceipt({hash});\n\n const deployEvent = receipt.logs.find(\n log => log.address.toLowerCase() === factoryAddr,\n );\n if (!deployEvent) {\n throw new Error('DeployFeeStrategy event not found');\n }\n\n const decodedEvent = decodeEventLog({\n abi: factoryAbi,\n data: deployEvent.data,\n topics: deployEvent.topics,\n });\n if (decodedEvent.eventName !== 'DeployFeeStrategy') {\n throw new Error('Unexpected event');\n }\n const newFeeStrategy = decodedEvent.args.feeStrategy;\n\n const hash2 = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'updateAddresses',\n args: [optionPricing, newFeeStrategy],\n });\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return {deployHash: hash, updateHash: hash2, newFeeStrategy};\n };\n\n return {updateMarketFees, ...rest};\n};\n","import {type Address, decodeAbiParameters} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '../useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport type StaticPricingParams = {\n model: 'static';\n dailyFundingRate: number;\n minFundingAmount: bigint;\n};\n\nexport type OptionPricingParams = {\n model: 'bsm';\n logicContract: Address;\n iv: number;\n riskFreeRate: number;\n minPremiumDailyRate: number;\n minPremiumAmount: bigint;\n};\nexport type PricingParams = StaticPricingParams | OptionPricingParams;\n\nexport const usePricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n return useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n functionName: 'getPricingParams',\n args: pricingAddr ? [pricingAddr] : undefined,\n query: {\n select: ([pricingModel, rawData]): PricingParams => {\n if (pricingModel === 0) {\n // OptionPricing: (uint8, address, uint32, uint32, uint32, uint256)\n const [\n logicContract,\n iv,\n riskFreeRate,\n minPremiumDailyRate,\n minPremiumAmount,\n ] = decodeAbiParameters(\n [\n {name: 'logicContract', type: 'address'},\n {name: 'iv', type: 'uint32'},\n {name: 'riskFreeRate', type: 'uint32'},\n {name: 'minPremiumDailyRate', type: 'uint32'},\n {name: 'minPremiumAmount', type: 'uint256'},\n ],\n rawData as `0x${string}`,\n );\n\n return {\n model: 'bsm',\n logicContract,\n iv,\n riskFreeRate,\n minPremiumDailyRate,\n minPremiumAmount,\n };\n } else if (pricingModel === 1) {\n const [dailyFundingRate, minFundingAmount] = decodeAbiParameters(\n [\n {name: 'dailyFundingRate', type: 'uint32'},\n {name: 'minFundingAmount', type: 'uint128'},\n ],\n rawData as `0x${string}`,\n );\n return {model: 'static', dailyFundingRate, minFundingAmount};\n }\n throw new Error('Unknown pricing model');\n },\n },\n });\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useOptionPricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: pricingAddr ? [pricingAddr] : undefined,\n functionName: 'getOptionPricingParams',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import type {NonUndefinedGuard} from '@tanstack/react-query';\nimport type {Address} from 'viem';\nimport {useReadContract} from 'wagmi';\nimport {useLens} from '~/hooks/useLens';\nimport {lensAbi} from '~/abis/lens';\n\nexport const useStaticPricingParams = (pricingAddr: Address | undefined) => {\n const {timelockLens} = useLens();\n\n const {data} = useReadContract({\n address: timelockLens?.address,\n abi: lensAbi,\n args: pricingAddr ? [pricingAddr] : undefined,\n functionName: 'getStaticPricingParams',\n });\n return (data || {}) as Partial<NonUndefinedGuard<typeof data>>;\n};\n","import {type Address, decodeEventLog} from 'viem';\nimport {useChainId, useWriteContract, usePublicClient} from 'wagmi';\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useMarketState} from '~/hooks/market/useMarketState';\nimport {\n usePricingParams,\n type OptionPricingParams,\n type StaticPricingParams,\n} from './usePricingParams';\nimport {timelockFactories} from '~/lib/contracts';\nimport {factoryAbi} from '~/abis/factory';\nimport {optionsMarketAbi} from '~/abis/optionsMarket';\n\nexport const useUpdateMarketPricing = (marketAddr: Address | undefined) => {\n const {writeContractAsync, ...rest} = useWriteContract();\n const queryClient = useQueryClient();\n const publicClient = usePublicClient();\n const chainId = useChainId();\n\n const {data: {feeStrategy, optionPricing} = {}, error: stateError} =\n useMarketState(marketAddr);\n\n const {data: pricingData, error: pricingError} =\n usePricingParams(optionPricing);\n\n const updateMarketPricing = async <T extends 'static' | 'bsm'>(\n data: T extends 'static'\n ? Partial<StaticPricingParams> & {model: 'static'}\n : Partial<OptionPricingParams> & {model: 'bsm'},\n ) => {\n if (!marketAddr) {\n throw new Error('Market address not found');\n }\n if (!pricingData) {\n throw new Error(\n 'Market pricing data not available: ' + pricingError?.message,\n );\n }\n if (!publicClient) {\n throw new Error('Public client not available');\n }\n if (!feeStrategy) {\n throw new Error('Fee strategy not available: ' + stateError?.message);\n }\n const factoryAddr = timelockFactories[chainId].toLowerCase() as Address;\n\n if (data.model === 'static' && pricingData.model === 'static') {\n data.dailyFundingRate ??= pricingData.dailyFundingRate;\n data.minFundingAmount ??= pricingData.minFundingAmount;\n }\n if (data.model === 'bsm' && pricingData.model === 'bsm') {\n data.logicContract ??= pricingData.logicContract;\n data.iv ??= pricingData.iv;\n data.riskFreeRate ??= pricingData.riskFreeRate;\n data.minPremiumDailyRate ??= pricingData.minPremiumDailyRate;\n data.minPremiumAmount ??= pricingData.minPremiumAmount;\n }\n if (data.model !== pricingData.model) {\n if (data.model === 'static') {\n if (data.dailyFundingRate === undefined) {\n throw new Error(\n 'dailyFundingRate is required when switching to static model',\n );\n }\n if (data.minFundingAmount === undefined) {\n throw new Error(\n 'minFundingAmount is required when switching to static model',\n );\n }\n } else {\n if (data.logicContract === undefined) {\n throw new Error(\n 'logicContract is required when switching to option model',\n );\n }\n if (data.iv === undefined) {\n throw new Error('iv is required when switching to option model');\n }\n if (data.riskFreeRate === undefined) {\n throw new Error(\n 'riskFreeRate is required when switching to option model',\n );\n }\n if (data.minPremiumDailyRate === undefined) {\n throw new Error(\n 'minPremiumDailyRate is required when switching to option model',\n );\n }\n if (data.minPremiumAmount === undefined) {\n throw new Error(\n 'minPremiumAmount is required when switching to option model',\n );\n }\n }\n }\n\n const hash =\n data.model === 'static'\n ? await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployStaticPerpsPricing',\n args: [data.dailyFundingRate!, data.minFundingAmount!],\n })\n : await writeContractAsync({\n address: factoryAddr,\n abi: factoryAbi,\n functionName: 'deployOptionPricing',\n args: [\n data.logicContract!,\n data.iv!,\n data.riskFreeRate!,\n data.minPremiumDailyRate!,\n data.minPremiumAmount!,\n ],\n });\n const receipt = await publicClient.waitForTransactionReceipt({hash});\n\n const deployEvent = receipt.logs.find(\n log => log.address.toLowerCase() === factoryAddr,\n );\n if (!deployEvent) {\n throw new Error('DeployFeeStrategy event not found');\n }\n\n const decodedEvent = decodeEventLog({\n abi: factoryAbi,\n data: deployEvent.data,\n topics: deployEvent.topics,\n });\n\n if (\n decodedEvent.eventName !== 'DeployStaticPerpsPricing' &&\n decodedEvent.eventName !== 'DeployOptionPricing'\n ) {\n throw new Error('Unexpected event');\n }\n const pricingAddr = decodedEvent.args.pricing;\n\n const hash2 = await writeContractAsync({\n address: marketAddr,\n abi: optionsMarketAbi,\n functionName: 'updateAddresses',\n args: [pricingAddr, feeStrategy],\n });\n void queryClient.invalidateQueries({queryKey: ['readContract']});\n return {deployHash: hash, updateHash: hash2, newPricingAddr: pricingAddr};\n };\n\n return {updateMarketPricing, ...rest};\n};\n"],"mappings":"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"}