KittenSwap (7) : AMM for Lending+Option by Minting Option Tokens using Put-Call Parity

Kitten Finance
4 min readMar 10, 2021

--

This is part 7 of the KittenSwap series, in which we gradually present our next-generation swap+lending+option product.

The lending+option part will be our version of Aave+Hegic which works for all tokens, instead of a few high MC ones.

1. From Put-Call Parity to Lending

Consider the famous put-call parity:

In other words, ASSET = [CALL] + [SELL PUT] + [BORROW CASH].

Assume TOKEN is trading at 1 TOKEN = 0.1 ETH.

If you plan to borrow approximately 3 ETH using 100 TOKEN for two weeks, then you can decompose 100 TOKEN into three parts using our contract:

(i) CALL 100 TOKEN @ 0.03 ETH per TOKEN (valid for two weeks).

(ii) Sell PUT 100 TOKEN @ 0.03 ETH per TOKEN (valid for two weeks).

(iii) Borrow 3 ETH (for two weeks).

And the procedure of lending is:

  • Keep (i) to yourself. Because it is a call option, you can payback 3 ETH to get back 100 TOKEN.
  • Find a lender to take (ii) + (iii) from you. The lender will pay you probably 2.9 ETH. We will create an AMM to determine this value dynamically.
  • After 2 weeks, the lender will either receive 3 ETH (if 1 TOKEN ≥ 0.03 ETH), or 100 TOKEN (if 1 TOKEN < 0.03 ETH).

We can tokenize the (ii) + (iii) part, and call it K.

Assume today is Apr-1-2021, and the expiration day is Apr-14-2021. Then:

If you hold 1 unit of K, then after Apr-14-2021, you can either receive 0.03 ETH, or 1 TOKEN, depending on which value is lower.

So the value of K will be a bit less than MIN(0.03 ETH, Price(TOKEN)).

The borrower can also choose to purchase [K] to payback the loan, using less ETH:

2. Pricing K by an AMM

K shall be priced using market forces (supply and demand), instead of any simple formulas. Although the price of K can be understood using Black-Scholes, what we care more is its implied volatility.

We have the following facts:

  1. Price(K) ≤ 0.03 ETH. In fact, the price of K shall be lower than 0.03 ETH discounted by interests, because you can only receive 0.03 ETH on Apr-14-2021, which is in the future (here we assume the interest rate of TOKEN is lower than the interest rate of ETH).
  2. If TOKEN trades at a much higher price than 0.03 ETH, then Price(K) will rise with time, and reach 0.03 ETH at expiration. It is similar to the price of a zero-coupon bond.
  3. Price(K) ≤ Price(TOKEN).
  4. Price(K) ≥ 0.
  5. Price(K) = MIN(0.03 ETH, Price(TOKEN)) at expiration. Because K will be settled at this value, unless some borrowers make mistakes (in that case lenders will have more profit).

Assuming an implied volatility of 300%, and an interest rate of 0%, we have the following relation between Price(K) [y-axis] and Price(TOKEN) [x-axis]:

Therefore an AMM for K can be achieved using:

Price(K) = MIN(0.03, Price(TOKEN)) * (RATIO * (1-t) + t)

where RATIO is a factor between 0 and 1, and t is the time factor which begins at 0 and goes to 1 at expiration.

Note Price(K) = MIN(0.03 ETH, Price(TOKEN)) when t=1 (at expiration), as expected.

One can use the lending pool utilization rate to determine RATIO, but that is not the optimal method, because the utilization rate can be unstable. We will discuss our approach in the next essay.

3. Minting Option Tokens

We can use the same method to do option+lending for any pair.

Example 1:

  • Deposit ETH to mint [CALL ETH @ 1000 USDC per ETH] + [SELL PUT ETH @ 1000 USDC per ETH] + [BORROW 1000 USDC per ETH].

Example 2:

  • Deposit USDC to mint [CALL USDC @ 0.0005 ETH per USDC] + [SELL PUT USDC @ 0.0005 ETH per USDC] + [BORROW 0.0005 ETH per USDC].

which is the same as:

  • Deposit USDC to mint [PUT ETH @ 2000 USDC per ETH] + [SELL CALL ETH @ 2000 USDC per ETH] + [BORROW 1 ETH per 2000 USDC].

Note when you deposit 2000 USDC to borrow 1 ETH, you can default when 1 ETH goes above 2000 USDC. Hence it is a good method to bet on a higher ETH price.

We will continue the discussion in next essay.

**********************

Join our Telegram and Discord ( on https://www.kitten.finance/ ) for updates of KittenSwap.

--

--

No responses yet