How Panoptic calculates collateral requirements
Panoptic uses a collateral tracking system that is similar to TradFi margin accounts. While users can borrow and effectively control funds several times larger than their deposited collateral, they cannot withdraw those funds from the Panoptic-Uniswap ecosystem. All funds are always owned by the Panoptic protocol, but users will 1) collect any fees generated by selling an option and 2) receive any gains in capital that result from buying an option that becomes in-the-money.
Users that interact with the Panoptic protocol for the first time will have to deposit collateral before they are able to trade an option.
This is done by calling the
deposit(uint128 assets, address token) function in
PanopticPool smart contract will issue a receipt token (similar to Aave's
aToken or Compound's
cToken) which uses a shares model to track yield distribution.
The amount of shares received after depositing
uint128 assets is computed using the
convertToShares(uint128 assets) function from
uint256 shares =
(uint256(assets) * totalSupply()) / totalBalance();
totalSupply() returns the total amount of receipt token issued and
totalBalance() returns the amount of token available to withdraw
uint256 totalBalance() =
underlyingToken.balanceOf(panopticPool) - // total amount in the PanopticPool
lockedFunds() + // amount of collected fees (protected)
inAMM(); // amount moved from PanopticPool to UniswapV3Pool (available)
Here, the accumulator
lockedFunds() tracks the amount of fees that have been collected up to that point.
This amount does not count towards
totalBalance() because it is reserved to pay the option sellers' premia.
inAMM() tracks the amount of token that has been moved from the
PanopticPool to the
This amount does count towards
totalBalance() because it has not left the Panoptic-Uniswap ecosystem.
When a user wants to withdraw their tokens out of the Panoptic pool, they have to call
withdraw(uint256 shares, address token, uint256 calldata positionIdList).
Accumulated yields from the deposited collateral will be transferred pro-rata to the user according to the shares model, where:
uint128 assets =
(shares * totalBalance()) / totalSupply();
totalSupply() are computed as described in the Deposit section.
The third argument of the
positionIdList, must be the list of all positions held by
positionIdList will be used to compute the collateral requirement for the account, and will fail if the position will be margin called or underwater (i.e.
collateralRequired / collateralBalance < 1).
In Panoptic, every user must deposit collateral in the
PanopticPool before they can mint long or short options.
Panoptic Liquidity Providers (PLPs) can simply deposit their collateral like they would do in a lending protocol, and in return will collect yield each time a user mints an option.
Let's consider Alice and Bob, two traders who chose to deposit a single type of collateral. Alice deposits 4500 DAI as collateral, and Bob deposits 3 ETH. If the price of ETH is 1500 DAI, then Alice and Bob would have the same buying power — about 4500 DAI to sell puts and 3 ETH to sell calls.
The maximum loss for Alice when selling puts would be 4500 DAI, which would happen if the price of ETH goes to 0. On the other hand, the maximum loss if she chooses to sell naked calls could potentially be infinite: the max loss is unbounded and continues to linearly increase as the price goes to .
Similarly, the maximum loss for Bob when selling calls is 3 ETH (if the price of ETH goes to ) and could potentially be infinite (in terms of ETH) if he chooses to sell naked puts (which happens if the price of ETH goes to 0).
Since losses could potentially be infinite, we recommend that users deposit both types of collateral when trading puts and calls simultaneously. For example, let's consider what happens if Charlie deposits 1500 DAI and 2 ETH into the ETH-DAI Panoptic Pool when the price of ETH is 1500 DAI. Their buying power is 4500 DAI on the put side and is 3 ETH on the call side, which is the same as Alice's and Bob's from the example above.
The maximum loss for Charlie, however, will be constrained by the amount of collateral deposited. Charlie's max loss for selling naked calls will be partially covered by his 2 ETH of collateral, and the max loss will increase more slowly than Alice's Similarly, Charlie's max loss for selling puts will also be partially covered by his 1500 DAI of collateral. In that case, Charlie's max loss will increase more slowly than Bob's.
However, in all these scenarios, any change in price or accumulation of long premium could make Alice's, Bob's, or Charlie's account insolvent, leading their account to be liquidated.