Timelock Trade LogoTimelock Protocol

Pricing Model & Implied Volatility

This section presents the mathematical framework for pricing Timelock positions by equating option premia with liquidity provider fee collection, ultimately deriving implied volatility from Uniswap market data.

Pricing Mechanisms Overview

Pricing can be implemented using multiple approaches:

  1. Standard Black Scholes Model Option Price - taking IV off-chain and price on-chain
  2. Standard Black Scholes Model Option Price - taking IV and price both derived from the pool
  3. Multiple of Swap fees forward calculated - not timed
  4. Borrowing Rate forward calculated - not timed

Premium Pricing

This is a new derivative which does not have a predefined pricing mechanism. However, it bears close resemblance to an ATM call long or a future long+ put position.

Standard Black-Scholes-Merton Model

The standard pricing mechanism for a call option is given by the Black-Scholes-Merton model as:

C=N(d1)StN(d2)KertC = N(d_1)S_t - N(d_2)Ke^{-rt}

Where:

d1=ln(StK)+(r+σ22)tσtandd2=d1σtd_1 = \frac{\ln\left(\frac{S_t}{K}\right) + \left(r + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}} \quad \text{and} \quad d_2 = d_1 - \sigma\sqrt{t}

Parameters:

  • CC = call option price
  • NN = CDF of the normal distribution
  • StS_t = spot price of an asset
  • KK = strike price
  • rr = risk-free interest rate
  • tt = time to maturity
  • σ\sigma = volatility of the asset

ATM Call Option Adaptation

In an ATM call option, K=StK = S_t, so d1d_1 and d2d_2 become:

d1=(r+σ22)tσtd_1 = \frac{\left(r + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}} d2=d1σt=(r+σ22)tσtσt=rtσtd_2 = d_1 - \sigma\sqrt{t} = \frac{\left(r + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}} - \sigma\sqrt{t} = \frac{rt}{\sigma\sqrt{t}}

The pricing formula becomes:

C(St,t)=StN((r+σ22)tσt)StertN(rtσt)C(S_t, t) = S_t \cdot N\left(\frac{\left(r + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}}\right) - S_t \cdot e^{-rt} \cdot N\left(\frac{-rt}{\sigma\sqrt{t}}\right)

Crypto Asset Adaptation (r = 0)

For crypto assets, we use risk-free rate r=0r = 0, so the formula simplifies to:

For d1d_1 and d2d_2 with r=0r = 0:

d1=(0+σ22)tσt=σt2d_1 = \frac{\left(0 + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}} = \frac{\sigma\sqrt{t}}{2} d2=d1σt=σt2σt=σt2d_2 = d_1 - \sigma\sqrt{t} = \frac{\sigma\sqrt{t}}{2} - \sigma\sqrt{t} = -\frac{\sigma\sqrt{t}}{2}

Final simplified formula:

C(St,t)=St(N(σt2)N(σt2)1)C(S_t, t) = S_t \cdot \left(N\left(\frac{\sigma\sqrt{t}}{2}\right) - N\left(\frac{-\sigma\sqrt{t}}{2}\right) - 1\right)

This simplified formula eliminates the complexity of interest rate calculations while maintaining the core pricing mechanics for decentralized finance applications.

Pool Utilization Optimization

We introduce optimization that accounts for pool utilization to accurately reflect market dynamics. This approach is inspired by peer-to-pool mechanism protocols, most notably AAVE.

Utilization Rate Definition

U=Assets utilized (locked())Total Assets (locked() + free())U = \frac{\text{Assets utilized (locked())}}{\text{Total Assets (locked() + free())}}

Where:

  • UU = utilization rate of the pool
  • UoptimalU_{\text{optimal}} = variable rate parameter (optimal utilization threshold)

Premium Calculation Based on Utilization

If U<UoptimalU < U_{\text{optimal}}:

premium=C(St,t)\text{premium} = C(S_t, t)

If U>UoptimalU > U_{\text{optimal}}:

premium=C(St,t)+(UUoptimal)C(St,t)1U\text{premium} = C(S_t, t) + \frac{(U - U_{\text{optimal}}) \cdot C(S_t, t)}{1 - U}

When pool utilization exceeds optimal levels, premiums increase exponentially to incentivize additional liquidity provision and manage risk exposure.

Implied Volatility Calculation

Daily Return Calculation

Calculate the daily return of an asset where PtP_t is the close price at day tt:

Daily Return=ln(PtPt1)\text{Daily Return} = \ln\left(\frac{P_t}{P_{t-1}}\right)

Statistical Measures

Mean of Daily Returns:

μ=1Nt=1NDaily Returnt\mu = \frac{1}{N} \sum_{t=1}^{N} \text{Daily Return}_t

Variance of Daily Returns:

Variance=1N1t=1N(Daily Returntμ)2\text{Variance} = \frac{1}{N-1} \sum_{t=1}^{N} (\text{Daily Return}_t - \mu)^2

Standard Deviation (Sigma):

σ=Variance\sigma = \sqrt{\text{Variance}}

Annualized Volatility (Implied Volatility)

Annualized Volatility (Implied Volatility)=σdaily returns×365\text{Annualized Volatility (Implied Volatility)} = \sigma_{\text{daily returns}} \times \sqrt{365}

This calculation converts daily volatility to annualized terms, which is the standard format for option pricing models.

Step 1: Collected Fees from Liquidity Provision

In order to calculate the fees collected from a Uniswap LP position, we consider the total liquidity amount deployed at a given tick.

We have the following:

  • Total fees accumulated:

    feeRate×(volume per day)\text{feeRate} \times \text{(volume per day)}

    Where feeRate is the percentage fee that spot traders on Uniswap pay when they execute a trade.

  • Fraction of those fees that goes to that LP position of size positionSize:

    positionSizetickLiquidity\frac{\text{positionSize}}{\text{tickLiquidity}}

    Here, the position size corresponds to the amount of liquidity a liquidity provider (LP) allocates within a specific price range in the liquidity pool.

  • Finally, we get:

    Total fees at a given tick=feeRate×(volume per day)×positionSizetickLiquidity\text{Total fees at a given tick} = \frac{\text{feeRate} \times \text{(volume per day)} \times \text{positionSize}}{\text{tickLiquidity}}

Step 2: Cumulative Premia Using Theta

The cumulative premia is the integral of theta over the asset's price path S(t)S(t):

Cumulative Premia=S(t)θ(St,K,σ)dt=+0θ(SΔt,K,σ)ΔtdSΔt\text{Cumulative Premia} = \int S(t) \theta(S_t, K, \sigma) dt = \int_{+\infty}^{0} \theta(S_{\Delta t}, K, \sigma) \Delta t dS_{\Delta t}

Where theta (θ\theta) for an option (assuming a zero interest rate and no dividends) is given by:

θ=dV(St,t)dt=Sσ8πtexp([ln(StK)+σ2t2]22σ2t)\theta = -\frac{dV(S_t, t)}{dt} = \frac{S \sigma}{\sqrt{8\pi t}} \exp \left(-\frac{[\ln(\frac{S_t}{K}) + \frac{\sigma^2 t}{2}]^2}{2 \sigma^2 t}\right)

Note that tt is the time to expiry in traditional finance, whereas we replace it with Δt\Delta t in DeFi, representing the time spent in range by an LP position.

Step 3: Approximating Theta Using The Dirac Distribution

The Dirac Distribution

The Dirac function, denoted by δ(x)\delta(x), is a "pseudo-function" that has the following characteristics:

δ(x)={+if x=00otherwise\delta(x) = \begin{cases} +\infty & \text{if } x = 0 \\ 0 & \text{otherwise} \end{cases}

and

Rδ(x)dx=1\int_{R} \delta(x) dx = 1

The graph of δ(x)\delta(x) can therefore be represented by the entire x-axis and the positive half of the y-axis. With the "Dirac" δ(x)\delta(x), we aim to represent an impulse or (infinitely short) point event with finite, non-zero "energy".

Graph of the Dirac distribution δ(x)

Figure 1: Graph of the Dirac distribution δ(x)δ(x).

Important Definition/Theorem (See Appendix 3.2): The Dirac function can also be perceived as the limit, as aa tends to 0, of the following centered Gaussian function:

1ae(x/a)2.\frac{1}{a} e^{-(x/a)^2}.

Approximation of the Dirac delta function using different zero-centered normal distributions

Figure 2: Approximation of the Dirac delta function using different zero-centered normal distributions.

Example: One function commonly used to represent a Dirac delta function is δp(x)=prect(px)\delta_p(x) = p \cdot \text{rect}(px), where:

rect(px)={1for x12p0otherwise\text{rect}(px) = \begin{cases} 1 & \text{for } |x| \leq \frac{1}{2p} \\ 0 & \text{otherwise} \end{cases}

Example of Dirac delta function: Graph of the function δ_p(x) = p rect(px)

Figure 3: Example of Dirac delta function: Graph of the function δp(x)=prect(px)δ_p(x) = p rect(px)

Comparing the Dirac Function to Theta

We aim to approximate the theta function of options by using an approximation of the Dirac function. The Dirac function increasingly resembles the theta function for options as the days to expiration (DTE) approaches 0. The figure below shows the theta of an option as a function of spot price movements for various DTEs: 7 DTE, 1 DTE, and 0.1 DTE.

Graph illustrating the variations in theta across different days until expiration

Figure 4: Graph illustrating the variations in theta across different days until expiration.

Important Remark: The red curve is the theta of a 0.1 DTE traditional option. As Δt\Delta t being the time to expiry approaches zero, theta sharpens into a narrow peak which seems to converge towards a Dirac delta function (the rectangle in the example above), i.e. limt0θt(S)=δp(S)\lim_{t \to 0} \theta_t(S) = \delta_p(S) where pRp \in \mathbb{R} is to be found.

To understand how this theta can have a limit resembling a Dirac delta function as t0t \to 0, we analyze the components of the two expressions: the theta function and the Dirac delta function:

  1. The Dirac delta function, δ(x)\delta(x), is defined such that:

    δ(x)=limϵ01ϵ2πexp(x22ϵ2).\delta(x) = \lim_{\epsilon \to 0} \frac{1}{\epsilon \sqrt{2\pi}} \exp \left( - \frac{x^2}{2\epsilon^2} \right).
  2. The given equation for theta is:

    θ=Sσ8πtexp([ln(SK)+σ2t2]22σ2t).\theta = \frac{S \sigma}{\sqrt{8\pi t}} \exp \left( - \frac{[\ln(\frac{S}{K}) + \frac{\sigma^2 t}{2}]^2}{2 \sigma^2 t} \right).
  3. We have A(t):=[ln(SK)+σ2t/2]22σ2t.A(t) := \frac{[\ln( \frac{S}{K}) + \sigma^2 t / 2]^2}{2 \sigma^2 t}.

  4. Set x:=ln(SK)x := \ln \left( \frac{S}{K} \right) and ϵ2:=σ2t\epsilon^2 := \sigma^2 t. Then,

    θt0Kexσ2/2ϵ2πexp(x22ϵ2).\theta \approx_{t \to 0} K \cdot e^{x \sigma^2 / 2 \epsilon \sqrt{2\pi}} \exp \left( - \frac{x^2}{2 \epsilon^2} \right).
  5. Setting the limit: As t0t \to 0, the function θ\theta approximates a Dirac delta function centered at St=KS_t = K as seen in Figure 4:

    θt0Kexσ2/2δ(x).\theta \approx_{t \to 0} K \cdot e^{x \sigma^2 / 2} \delta(x).
  6. We need to make sure that this resulting limit is a Dirac delta function, in other words, it respects the two conditions of the definition of the Dirac delta function:

    a) At x=0x = 0, we have that exδ(x)=+e^x \delta(x) = +\infty and elsewhere the function equals 0.

    b) To compute the integral of the expression exδ(x)e^x \delta(x) over the entire real line RR, we utilize the sifting property of the delta function. This property states that for any function f(x)f(x) that is continuous at x=ax = a,

    f(x)δ(xa)dx=f(a).\int_{-\infty}^{\infty} f(x) \delta(x - a) dx = f(a).

    Applying this property to the expression exδ(x)e^x \delta(x), where a=0a = 0, we have:

    exδ(x)dx=e0=1.\int_{-\infty}^{\infty} e^x \delta(x) dx = e^0 = 1.

    Conclusion: Kσ2/2exδ(x)K \sigma^2 / 2 e^x \delta(x) is a Dirac delta function scaled by Kσ2/2K \sigma^2 / 2.

  7. Now, we'll assume that the theta function converges to a Dirac delta that is similar to a rectangle (as seen in Figure 4). Hence, let's determine the optimal Dirac delta function by finding the best pRp \in \mathbb{R} in the equation:

    Kexσ2/2δ(x)=prect(px).K e^{x \sigma^2 / 2} \delta(x) = p \cdot \text{rect}(px).

Important consequence: The area under both functions, the theta function and the Dirac delta function, are approximately equal, and we proceed to the following calculations:

Keep in mind that the minimum width of the Dirac delta function is intrinsically tied to the tick spacing of a Uniswap v3 pool.

Fee TierTick SpacingDescription
1 bp1LP positions can be created with lower and upper prices PaP_a and PbP_b, respectively, that can be set at any multiple of 1.0001.
5 bps10LP positions can be created with lower and upper prices PaP_a and PbP_b at any multiple of 1.0010.
30 bps60LP positions can be created with lower and upper prices PaP_a and PbP_b at any multiple of 1.0060.
100 bps200LP positions can be created with lower and upper prices PaP_a and PbP_b at any multiple of 1.0200.

Table 1: Uniswap v3 Pool Tick Spacing and LP Position Ranges

Our objective is to achieve the narrowest width possible, which equates to the smallest range of an LP position, dictated by the pool's tick spacing. Given PaP_a and PbP_b as the lower and upper bounds of our range, respectively, and considering the width PbPaP_b - P_a, it is helpful to use the following transformation to effectively apply Taylor's expansion:

K=PaPbandr=PaPbK = \sqrt{P_a P_b} \quad \text{and} \quad r = \sqrt{\frac{P_a}{P_b}}

Where KK is the geometric mean of the LP position's price range or alternatively the strike price of the corresponding option and rr is the range factor, a measure of width, of the LP position.

This allows us to express the width of an LP position as:

PbPa=K(r1r)=K(r21)=2K(r1)asr1P_b - P_a = K \left( r - \frac{1}{r} \right) = K \left( r^2 - 1 \right) = 2K(r - 1) \quad \text{as} \quad r \to 1

Remark: We take r1r \to 1 to represent an extremely narrow LP position, mimicking an option near expiry. We note, however, that the Uniswap v3 smart contracts limit the minimum width to the pool's tick spacing tSt_S.

Given that Pa=1.0001taP_a = 1.0001^{t_a} where tat_a is the tick for the upper price, we can further simplify the expression:

2K(r1)=2K((1+110000)(tbta)/21)2K(1+tbta2100001)=KtS100002K(r - 1) = 2K \left( \left( 1 + \frac{1}{10000} \right)^{(t_b - t_a)/2} - 1 \right) \approx 2K \left( 1 + \frac{t_b - t_a}{2 \cdot 10000} - 1 \right) = \frac{Kt_S}{10000}

Here, tS=tbtat_S = t_b - t_a represents the difference between the ticks for the upper and lower prices. This transformation provides a more useful formulation for our width.

With this newly formulated expression for the width of an extremely narrow LP position, we can find the approximating Dirac function to approximate theta and the cumulative premium of a corresponding option.

  • The area under the theta function is approximately K2σ22\frac{K^2 \sigma^2}{2} (see Appendix below 3.1).
  • The width of the theta function is KtS10000\frac{K \cdot t_S}{10000}.
  • The height of the theta function is: areawidthKσ2100002tS\frac{\text{area}}{\text{width}} \approx \frac{K \sigma^2 \cdot 10000}{2 t_S}

Therefore, p=Kσ2100002tSp = \frac{K \sigma^2 \cdot 10000}{2 t_S}.

Theta is approximated as the height of the approximating Dirac delta function multiplied by the time spent in range. Thus, the cumulative premia is:

Kσ2100002tS×Δt\frac{K \sigma^2 \cdot 10000}{2 t_S} \times \Delta t

Step 4: Derive the Implied Volatility (IV)

Equating Premia with Fees: We assert that the accumulated streaming premia (theoretical) of an option is equal to that of the fees collected from liquidity provision (actual). This aligns with our observation that LP positions behave similarly to options, and hence, their premia received is simply the fees collected by the position. By equating premia with collected fees we have:

Premia=S(t)θ(St,K,σ)dt=Total Fees at a Given Tick over Time=Collected Fees\text{Premia} = \int S(t) \theta(S_t, K, \sigma) dt = \text{Total Fees at a Given Tick over Time} = \text{Collected Fees}

We substitute and obtain:

Kσ22tS×10000×Δt=feeRate×Volume×positionSize×ΔttickLiquidity\frac{K \sigma^2}{2 t_S} \times 10000 \times \Delta t = \frac{\text{feeRate} \times \text{Volume} \times \text{positionSize} \times \Delta t}{\text{tickLiquidity}}

Assumptions:

  • The relationship between the tick spacing and the fee rate is as follows: tS=feeRate×20000t_S = \text{feeRate} \times 20000 In fact, tick spacings are 200 for 1% fee rate, 60 for 0.3%, 10 for 0.05% as seen in Table 1.
  • The premia is calculated for one options contract, which corresponds to a position size of SS in terms of the quote asset.
  • The LP position is centered around the current spot price, so the spot price SS is equal to its strike price KK.

With the above assumptions, this simplifies further:

Kσ22×feeRate×20000×10000×Δt=feeRate×Volume×K×ΔttickLiquidity\frac{K \sigma^2}{2 \times \text{feeRate} \times 20000} \times 10000 \times \Delta t = \frac{\text{feeRate} \times \text{Volume} \times K \times \Delta t}{\text{tickLiquidity}}

Finally, we solve for σ\sigma, the implied volatility:

σIV=2×feeRate×VolumetickLiquidity\boxed{\sigma_{\text{IV}} = 2 \times \text{feeRate} \times \sqrt{\frac{\text{Volume}}{\text{tickLiquidity}}}}

This formula provides the implied volatility derived from market activity, allowing the protocol to price positions based on actual trading data rather than external oracle feeds.

Implementation Summary

The pricing framework combines several key components:

  1. Black-Scholes adaptation for crypto assets with zero risk-free rate
  2. Pool utilization optimization to reflect market dynamics
  3. Implied volatility calculation from historical price data
  4. Theta approximation using Dirac distributions for LP positions

This comprehensive approach ensures that pricing accurately reflects both theoretical option values and practical market conditions in decentralized finance environments.