An options market based on a financial instrument on Ethereum called a “Perp” (NFT-based perpetual option contract)
The story of Perpetuity begins with the ETHGlobal Scaling hackathon. I signed up for ETHGlobal’s hackathon with the intention to build something interesting and impactful and walked away with a project that I feel strongly about. With there being so many different sponsors showing off cutting-edge tech, I was looking for a use case that I thought would be a good fit. I knew I wanted to work on something in DeFi given my education and interest in finance. I stumbled upon Superfluid and thought of bringing exotic options on-chain, specifically, American perpetual options.
What is an American perpetual option? It is an option where you have an indefinite right to exercise. Why would anyone want to buy a perpetual option? A use case for a perpetual option can be coupling a fixed income position on a volatile asset with a perpetual put option to achieve a risk-free rate. For example, an ETH2 validator may want to hedge their position with a put option at their entry price; as long as the staking yields cover the premium, they have a risk-free staking option while keeping all the upside. An explicit example of a Perp call option for ETH would be say Bob buys the call with a strike price of $2950 from Alice for $10/day, for Bob to consider settling the option, ETH would have to go up faster than $10/day. What does each party stand to benefit? For the seller, there’s a clear reason to do this: cap their upside and take a fixed income. For the buyer, pay a small (at first) premium to potentially profit off of sudden price swings.
During the hackathon, I spent an extensive amount of time researching how to price Perps and it seems to stand there is ongoing academic research into the topic. Pricing a perpetual option is difficult for two reasons: you can’t apply traditional pricing models like Black-Scholes because of the infinite time to exercise and because time on the blockchain is not continuous; you have discrete blocks of time. There’s two different things we would potentially have to price: the premium payment flow and the price of the option itself (for sale on the secondary market), I decided to take things in a different direction and have an auction-based format in lieu of a pricing formula.
So, how exactly does a Perp work? When a Perp option is created, a perpetual premium payment flow is initiated between the option holder and the option writer. As long as the flow is maintained, the option holder has the right to exercise the option. As of right now, Perpetuity will be supporting WETH/WBTC as the underlying assets of Perps. The settling currency will be a stable coin: either DAI, USDC or both.
The way Perpetuity initiates a perpetual flow is through Superfluid. Using Supertokens, a user is able to upgrade their stable coin into a Supertoken and be able to stream that token to a recipient. In our case, the stream is initated from the option holder to the option writer. The Perp option itself is an ERC-721 / NFT. The reason why we decided to turn it into an NFT was to facilitate a secondary market, with functions like the beforeTransfer hook, we’re able to recalibrate payment flows to the correct party when making a sale of a Perp on the secondary market. When a Perp option is exercised, the NFT itself is burned.
In order to create a Perp on Perpetuity, the option writer would need to start an auction with a duration, strike price, underlying asset, reserve price and whether the option is call/put. There is a lock-up of assets into our contract of either WETH/WBTC or DAI/USDC depending on if it’s a call or put option. Once the auction is active, users can bid on the auction for the duration specified. After the end of the auction, the highest bidder gets to initiate a payment flow and call our createOption function. Once the function is called, the Perp NFT is created. There exists logic in the Perp NFT that handles the exercising of the option and a transfer of assets to each party. Since payment flows can only be initiated from the party sending the flow, we had to make our application a SuperApp in order to hook into the creation, update and cessation of payment flows initiated on the front-end.
Despite not having a finished product, Perpetuity was proud to receive Superfluid’s prize at the hackathon. As of today, most of the smart contract logic has been written out, marketplace contracts remain to be written, front-end will be written and we’ll be making architectural improvements using The Graph and doing a thorough review of the smart contracts to find areas for gas optimization. In order to display price data on the front-end, we were thinking of using Covalent and in our smart contracts we’re using Chainlink to do strike price sanity checks.
Soon after the hackathon, Perpetuity was further validated when Dave White, from Paradigm, released a paper on an extremely similar option called an Everlasting Option. Currently, we’re still in research mode to figure out pricing models and not solely rely on an auction-driven model. There may also be an opportunity to apply the formulas detailed in Dave’s paper to Perpetuity. Translating the theory to code will be a difficult task ahead. Please be on the lookout for a white paper in the near future.
Things I’m thinking about actively regarding Perpetuity:
- To make sure there’s a dashboard to track the option contracts a user has written and those that they’re holding
- Will need to make the premium payment flow rate variable as opposed to fixed to accommodate market changes.
- Will need to move away from an auction-based format for a better UX.
Note: Perpetuity will be ready with an MVP on Polygon’s Mumbai network in the coming weeks, post ETHGlobal’s HackMoney 2021.