Skip to main content

Panoptic pool

Creates and manages undercollateralized options. Manages positions, collateral, liquidations and forced exercises.

Panoptic Pool, create permissionless option on top of Uniswap V3

All liquidity deployed to/from Uniswap v3 is owned by this smart contract

Write Methods
​

startPool
​

function startPool(
address _univ3pool,
address _collateralReference
) external nonpayable

Creates a method for creating a Panoptic pool on top of an existing Uniswap v3 pair

Must be called first before any transaction can occur. Must also deploy collateralReference first.

Parameters
​

NameTypeDescription
_univ3pooladdressAddress of the target Uniswap v3 pool
_collateralReferenceaddressundefined

deposit
​

function deposit(
uint128 assets,
address token
) external nonpayable returns (uint256 shares)

Will internally compute the number of shares to mint

Parameters
​

NameTypeDescription
assetsuint128User-specified amount of token deposited
tokenaddressAddress of the token deposited, must be uniswapPool's token0 or token1

Returns
​

NameTypeDescription
sharesuint256The number of shares minted when assets were deposited

withdraw
​

function withdraw(
uint256 shares,
address token,
uint256[] positionIdList
) external nonpayable returns (uint128 assets)

Withdraw collateral assets from the Panoptic Pool

Will internally compute the number of shares to burn

Parameters
​

NameTypeDescription
sharesuint256User-specified amount of shares token to be withdrawn. Will withdraw all if greater than user's balance
tokenaddressAddress of the token deposited, must be uniswapPool's token0 or token1
positionIdListuint256[]List of positions owned by the user. Written as [tokenId1, tokenId2, ...]

Returns
​

NameTypeDescription
assetsuint128The number of assets withdrawn

mintOptions
​

function mintOptions(
uint256[] positionIdList,
uint128 positionSize,
uint256 effectiveLiquidityLimit
) external nonpayable returns (bool)

Mints a specific number of contracts for a new option

Must be a new option, will revert if a position with that tokenId already exists.

Parameters
​

NameTypeDescription
positionIdListuint256[]List of positions owned by msg.sender. Written as [tokenId1, tokenId2, ..., tokenIdN] with tokenIdN as the NEW TOKEN
positionSizeuint128The number of contracts to be minted, expressed in terms of the numeraire
effectiveLiquidityLimituint256Maximum amount of "spread" defined as baseLiquidity/(baseLiquidity - legLiquidity) for a new position. Generate using effectiveLiquidityFactorHelper first or set to 0 for no limit / only short options

Returns
​

NameTypeDescription
_0boolReturns true if the mint is successful

mintOptionsITM
​

function mintOptionsITM(
uint256[] positionIdList,
uint128 positionSize,
uint256 effectiveLiquidityLimit,
int24 tickLimitLow,
int24 tickLimitHigh
) external nonpayable returns (bool success)

Mints a specific number of contracts for a new option that is ITM

Must be a new option, will revert if a position with that tokenId already exists or it is not ITM.

Parameters
​

NameTypeDescription
positionIdListuint256[]List of positions owned by msg.sender. Written as [tokenId1, tokenId2, ..., tokenIdN] with tokenIdN as the NEW TOKEN
positionSizeuint128The number of contracts to be minted, expressed in terms of the numeraire
effectiveLiquidityLimituint256Maximum amount of "spread" defined as baseLiquidity/(baseLiquidity - legLiquidity) for a new position. Generate using effectiveLiquidityFactorHelper first or set to 0 for no limit / only short options
tickLimitLowint24Low price slippage limit when minting ITM option
tickLimitHighint24High price slippage limit when minting ITM option

Returns
​

NameTypeDescription
successboolReturns true if the ITM mint is successful

burnOptions
​

function burnOptions(
uint256 tokenId
) external nonpayable returns (bool)

Burns the entire balance of tokenId of msg.sender

Will exercise if necessary, and will revert if user does not have enough collateral to exercise.

Parameters
​

NameTypeDescription
tokenIduint256The tokenId of the position to be burnt

Returns
​

NameTypeDescription
_0boolReturns true is the burn is successful

burnOptionsITM
​

function burnOptionsITM(
uint256 tokenId,
int24 tickLimitLow,
int24 tickLimitHigh
) external nonpayable returns (bool)

Burns the entire balance of tokenId of msg.sender

Will exercise if necessary, and will revert if user does not have enough collateral to exercise.

Parameters
​

NameTypeDescription
tokenIduint256The tokenId of the position to be burnt
tickLimitLowint24Price slippage limit when burning an ITM option
tickLimitHighint24Price slippage limit when burning an ITM option

Returns
​

NameTypeDescription
_0boolReturns true is the burn is successful

forceExercise
​

function forceExercise(
address _account,
int24 tickLimitLow,
int24 tickLimitHigh,
uint256[] _positionIdList,
uint256[] _touchedId,
uint256[] _leftoverIds
) external nonpayable

Will revert if: number of touchedId is larger than 1 or if user force exercises their own position

Parameters
​

NameTypeDescription
_accountaddressundefined
tickLimitLowint24The lower tick slippagelimit
tickLimitHighint24The upper tick slippagelimit
_positionIdListuint256[]undefined
_touchedIduint256[]undefined
_leftoverIdsuint256[]undefined

liquidateAccount
​

function liquidateAccount(
address _account,
int24 tickLimitLow,
int24 tickLimitHigh,
uint256[] _positionIdList,
uint256[] emptyList
) external nonpayable

Liquidates a distressed account. Will burn all positions and will issue a bonus to the liquidator

Will revert if: accout is not margin called or if the user liquidates themselves

Parameters
​

NameTypeDescription
_accountaddressundefined
tickLimitLowint24The lower tick slippagelimit
tickLimitHighint24The upper tick slippagelimit
_positionIdListuint256[]undefined
emptyListuint256[]Must always be provided as []

View Methods
​

calculateAccumulatedFeesBatch
​

function calculateAccumulatedFeesBatch(
address user,
uint256[] positionIdList
) external view returns (int128 premium0, int128 premium1)

Computes the total amount of premium accumulated for a list of positions

Could be costly because it reads information from 2 ticks for each leg of each tokenId

Parameters
​

NameTypeDescription
useraddressAddress of the user that owns the positions
positionIdListuint256[]List of positions. Written as [tokenId1, tokenId2, ...]

Returns
​

NameTypeDescription
premium0int128Premium for token0 (negative = amount is owed)
premium1int128Premium for token1 (negative = amount is owed)

checkCollateral
​

function checkCollateral(
address token,
address account,
int24 atTick,
uint256[] positionIdList
) external view returns (uint128, uint128)

Computes the collateral requirement of a given account and for a given token

To be used as a helper function or called from another contract

Parameters
​

NameTypeDescription
tokenaddressAddress of the collateral token
accountaddressAddress of the account to check collateral
atTickint24Value of the tick at which collateral is checked (user-specified)
positionIdListuint256[]List of positions owned by the user. Written as [tokenId1, tokenId2, ...]

Returns
​

NameTypeDescription
tokenBalanceuint128Balance of token held by the account
tokenRequireduint128Amount of token required as collateral for that account

optionPositionBalance
​

function optionPositionBalance(
address user,
uint256 tokenId)
external view returns (uint128 balance, uint128 poolUtilizations)

Returns the total number of contracts by user for a specified position

Parameters
​

NameTypeDescription
useraddressAddress of the account to be checked
tokenIduint256TokenId of the position to be checked

Returns
​

NameTypeDescription
balanceuint128Number of contracts of tokenId owned by the user
poolUtilizationsuint128Utilizations of the collateral pools: utilization(token0) = uint64(poolUtilizations), utilization(token1) = uint64(poolUtilizations >> 64)

optionPositionCounter
​

function optionPositionCounter(
address user
) external view returns (uint128 n)

Returns the total number of positions owned by a user

Parameters
​

NameTypeDescription
useraddressAddress of the account to be checked

Returns
​

NameTypeDescription
nuint128Number of positions owned by user

Events
​

AccountLiquidated
​

event AccountLiquidated(
address liquidator,
address liquidatee,
int256 bonusAmounts
)

Emitted when an account is liquidated

Parameters
​

NameTypeDescription
liquidatoraddressundefined
liquidateeaddressundefined
bonusAmountsint256undefined

Deposited
​

event Deposited(
address user,
address tokenAddress,
uint128 assets,
uint256 shares
)

Emitted when any amount is deposited as collateral

Parameters
​

NameTypeDescription
useraddressundefined
tokenAddressaddressundefined
assetsuint128undefined
sharesuint256undefined

ForcedExercised
​

event ForcedExercised(
address exercisor,
address user,
uint256 tokenId,
uint256 costAmounts
)

Emitted when a position is forces exercised

Parameters
​

NameTypeDescription
exercisoraddressundefined
useraddressundefined
tokenIduint256undefined
costAmountsuint256undefined

OptionBurnt
​

event OptionBurnt(
address recipient,
uint128 numberOfContracts,
uint256 tokenId,
int256 premia,
uint128 positionCounter
)

Emitted when an option is burnt

Parameters
​

NameTypeDescription
recipientaddressundefined
numberOfContractsuint128undefined
tokenIduint256undefined
premiaint256undefined
positionCounteruint128undefined

OptionMinted
​

event OptionMinted(
address recipient,
uint128 numberOfContracts,
uint256 tokenId,
int256 commissionRates,
uint128 poolUtilizations,
uint256 positionCounter
)

Emitted when an option is minted

Parameters
​

NameTypeDescription
recipientaddressundefined
numberOfContractsuint128undefined
tokenIduint256undefined
commissionRatesint256undefined
poolUtilizationsuint128undefined
positionCounteruint256undefined

OwnershipTransferred
​

event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
)

Parameters
​

NameTypeDescription
previousOwner indexedaddressundefined
newOwner indexedaddressundefined

Withdrawn
​

event Withdrawn(
address user,
address tokenAddress,
uint128 assets,
uint256 shares
)

Emitted when any amount of collateral is withdrawn

Parameters
​

NameTypeDescription
useraddressundefined
tokenAddressaddressundefined
assetsuint128undefined
sharesuint256undefined

ABI
​

PanopticPool ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "_sfpm",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "liquidator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "liquidatee",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "bonusAmounts",
"type": "int256"
}
],
"name": "AccountLiquidated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "assets",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "Deposited",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "exercisor",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "costAmounts",
"type": "uint256"
}
],
"name": "ForcedExercised",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "positionSize",
"type": "uint128"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "premia",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint128",
"name": "positionCounter",
"type": "uint128"
}
],
"name": "OptionBurnt",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "positionSize",
"type": "uint128"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "commissionRates",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint128",
"name": "poolUtilizations",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "positionCounter",
"type": "uint256"
}
],
"name": "OptionMinted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "positionSize",
"type": "uint128"
},
{
"indexed": true,
"internalType": "uint256",
"name": "oldTokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "newTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "commissionRates",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint128",
"name": "poolUtilizations",
"type": "uint128"
},
{
"indexed": false,
"internalType": "int256",
"name": "premia",
"type": "int256"
}
],
"name": "OptionRolled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint128",
"name": "assets",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [],
"name": "DECIMALS",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burnOptions",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "int24",
"name": "tickLimitLow",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickLimitHigh",
"type": "int24"
}
],
"name": "burnOptionsITM",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
}
],
"name": "calculateAccumulatedFeesBatch",
"outputs": [
{
"internalType": "int128",
"name": "premium0",
"type": "int128"
},
{
"internalType": "int128",
"name": "premium1",
"type": "int128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "int24",
"name": "atTick",
"type": "int24"
},
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
}
],
"name": "checkCollateral",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "collateralToken0",
"outputs": [
{
"internalType": "contract CollateralTracker",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "collateralToken1",
"outputs": [
{
"internalType": "contract CollateralTracker",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint128",
"name": "assets",
"type": "uint128"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLimitLow",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickLimitHigh",
"type": "int24"
},
{
"internalType": "uint256[]",
"name": "_positionIdList",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_touchedId",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_leftoverIds",
"type": "uint256[]"
}
],
"name": "forceExercise",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "int24",
"name": "tickLimitLow",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickLimitHigh",
"type": "int24"
},
{
"internalType": "uint256[]",
"name": "_positionIdList",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "emptyList",
"type": "uint256[]"
}
],
"name": "liquidateAccount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
},
{
"internalType": "uint128",
"name": "positionSize",
"type": "uint128"
},
{
"internalType": "uint256",
"name": "effectiveLiquidityLimit",
"type": "uint256"
}
],
"name": "mintOptions",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
},
{
"internalType": "uint128",
"name": "positionSize",
"type": "uint128"
},
{
"internalType": "uint256",
"name": "effectiveLiquidityLimit",
"type": "uint256"
},
{
"internalType": "int24",
"name": "tickLimitLow",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickLimitHigh",
"type": "int24"
}
],
"name": "mintOptionsITM",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "optionPositionBalance",
"outputs": [
{
"internalType": "uint128",
"name": "balance",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "poolUtilizations",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
}
],
"name": "optionPositionBalanceBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "optionPositionCounter",
"outputs": [
{
"internalType": "uint128",
"name": "n",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "poolData",
"outputs": [
{
"internalType": "uint256",
"name": "panopticPoolBalance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalBalance",
"type": "uint256"
},
{
"internalType": "int128",
"name": "inAMM",
"type": "int128"
},
{
"internalType": "int128",
"name": "totalCollected",
"type": "int128"
},
{
"internalType": "int128",
"name": "currentPoolUtilization",
"type": "int128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "poolId",
"outputs": [
{
"internalType": "uint80",
"name": "",
"type": "uint80"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "oldTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "newTokenId",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "emptyList",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "effectiveLiquidityLimit",
"type": "uint256"
},
{
"internalType": "int24",
"name": "tickLimitLow",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickLimitHigh",
"type": "int24"
}
],
"name": "rollOptions",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "s_options",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "sfpm",
"outputs": [
{
"internalType": "contract ISemiFungiblePositionManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_univ3pool",
"type": "address"
},
{
"internalType": "address",
"name": "_collateralReference",
"type": "address"
}
],
"name": "startPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tickSpacing",
"outputs": [
{
"internalType": "int24",
"name": "",
"type": "int24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "univ3pool",
"outputs": [
{
"internalType": "contract IUniswapV3Pool",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "positionIdList",
"type": "uint256[]"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint128",
"name": "assets",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]