Introduction to On-Chain Portfolio Management

Cover Image for Introduction to On-Chain Portfolio Management
Estelle Sterrett
Estelle Sterrett

In this article, we outline two key use cases for Replicating Market Makers (RMMs) and introduce a method for recovering a trading function based on a desired liquidity distribution. We then show how this is utilized by Primitive Portfolio for passive portfolio management for onchain institutions. The conclusion is that in addition to the usual RMMs portfolio capabilities, bets on price action can be implemented and managed passively through Portfolio, instead of depending on active management.

Liquidity Allocation

While there is a large body of research around the connection between CFMMs and the portfolio value of their LPTs, there is significantly less written on the connection with the liquidity distribution. This has limited the use of CFMMs to being predominantly about achieving a specific portfolio value (with the exception of Uniswap V3). Primitive believes that they can be used as building blocks for much more.

In this section, I will define a notion of liquidity that allows us to allocate to CFMMs based on our desired distribution. This functionality allows us to passively implement an expectation on price action and earn fee income accordingly, with minimal need for manual re-balance events requiring action costing additional fees. This functionality I refer to as dynamic allocation. I will only consider the two asset case for this section, however the same logic applies to n>2n>2 assets.

If our goal is only to consider potential for fee income rather than portfolio value function (PVF), the definition of liquidity we need is the depth of the CFMM. This can be defined multiple ways but ultimately lead to the same outcome: a connection between depth and the CFMM trading function.

Defining Liquidity in Terms of Depth

The simplest definition would be defining depth in terms of the swap quantity required to push the price of the pool up dpdp. Thus for p(x0Δx)p(x_0-\Delta_x), we can always determine a Δx(p)\Delta_x(p) due to the convexity of φ\varphi. Assuming this is a smooth CFMM, (not descretely defined), this would mean we can define our depth as

l=dΔxdpl=\frac{d\Delta_x}{dp}

Note this measures based off the output quantity rather than the input quantity, however a change of variables can reframe the problem from input quantity. This definition is a measure of trade size required to move the price upwards by dpdp. We can recover the xx reserve by integrating:

x(p)=x0Δx=x0p0pl(s)dsx(p)=x_0-\Delta_x=x_0-\int_{p_0}^pl(s)ds

where p0=p(x0)p_0=p(x_0).

Recovering the Portfolio Value Function

We can now apply Lemma 1 from the LVR paper, which states that V(p)=x(p)V'(p) = x(p). Thus to recover a PFV, we need to integrate one more time:

V(p)=p0p(x0p0wl(s)ds)dwV(p)=\int_{p_0}^p\left(x_0-\int_{p_0}^wl(s)ds\right)dw

Given what we've learned from the Replicating Market Makers paper, we can perform a change of variables pc1c2p\to\frac{c_1}{c_2}, and recover the trading function through fenchel conjugacy: φ=(V)(R)\varphi=-(-V)^*(-R).

Note for this definition of liquidity to work, we need to ensure that our depth is integrable over pp. Basically this says if we want to boast a liquidity distribution of l=μ(p,t)l = \mu(p,t) where tt is the time elapsed since entry, we require finite total liquidity.

Your Liquidity is Your Gamma

There are a few key insights that help support our understanding of what this definition means. Firstly, it treats depth as a mass distribution, where total mass accumulated between two prices is the swap quantity required to move through the range. Additionally, due to the connection between depth and PVF, we can see that:

l(p)=Γl(p) = -\Gamma

Since gamma is always negative for a CFMM, this says that your liquidity depth is precisely the magnitude of gamma of your portfolio. It should be noted that this definition defines depth from a starting price of p0p_0 upwards, rather than depth in both directions from the market price pp. While both are valid definitions, this one is easier to recover a CFMM from and serves the purpose of spot allocation just as well.

Routing Implications

Lastly, by defining the connection between trade depth and price, we can route through multiple CFMMs efficiently using their depth functions. This allows a simple solution to CFMM routing that requires minimal computation, which allows us to pool liquidity between multiple CFMMs.

Other Definitions

As mentioned at the start of the section, there are multiple ways to define liquidity, all of which are a change of variables away from each other. A more intuitive definition from an allocation perspective would be using the swap in value! Since the swap-in asset is the numeraire as we increase price, we simply need to change variables to the swap-in quantity. So:

l(p)=dΔydpl(p) = \frac{d\Delta_y}{dp}

where Δy(Δx(p))\Delta_y(\Delta_x(p)) is determined from the trading function. This definition is less clean to work with mathematically because of the fact that our depth is no longer our gamma. Regardless, these definitions allow us to allocate liquidity to curves that express exactly the liquidity distribution we desire, earning fees proportionally to their depth.

Portfolio Construction

The perhaps more obvious use case of RMMs would be in replicating specific portfolios passively. RMMs are able to replicate any positive, concave, monotonically increasing portfolio value function directly. These portfolios are represented directly as tokens known as LPTs. While this is already a rich set of portfolios, we can go a step further by utilizing lending/borrowing markets, opening up even more potential portfolios.

Due to the concave nature of LPTs, they function as great mechanism for leverage. Shorting LPTs will result in a convex portfolio, as shown in A Note On Borrowing Constant Function Market Maker Shares. As an example of how this can be used, turn to RMM-01, our first implementation of a Black-Scholes Covered Call RMM.

A covered call is traditionally a collateralized short call. This implies that simply shorting a covered call should achieve you a long option, either call or put depending on how its shorted. This is exactly what we see as well when the RMM-01 LPT is shorted. As shown here, an RMM-01 LPT with perfect replication has a payoff of

V(p)=p(1Φ(d1))+KΦ(d2)V(p) = p(1 − Φ(d_1)) + KΦ(d_2)

for d1=log(p/K)+σ2τστd_1 = \frac{log(p/K)+\sigma^2\tau}{\sigma\sqrt{\tau}} and d2=d1στd_2 = d_1 - \sigma\sqrt{\tau}. If we short an LPT with respect to the 11 xx asset, we see a portfolio of:

Vnet(p)=pΦ(d1)KΦ(d2)V_{net}(p)=p\Phi(d_1)-K\Phi(d_2)

This is precisely the payoff of a Black-Scholes call option, a.k.a. an example of a convex portfolio. Similarly if we had shorted with respect to KK yy assets, we would hold a put option.

What this tells us is we can achieve any non-negative, monotonically increasing function regardless of convexity or concavity simply by allowing a mechanism to short LPTs. It shold be noted that bounded LPT payoffs such as with RMM-01 are much cleaner to do this as we dont require a liquidation engine, however, unbounded LPT payoffs would require liquidations to short.

This again, however, isn't the end of the story. What if the portfolio you're looking to replicate isn't path independent (i.e. every change of price matters rather than simply the end state)? What if we want to replicate volatility derivatives rather than price derivatives? This is also possible when we start to consider the portfolio of an arbitrageur.

As described in Replicating Monotonic Payoffs Without Oracles, we can recover the payoff of the arbitraguer's position as after time T>0T>0:

WT=V(p0)V(pT)+0Tx(pt)dptW_T = V(p_0) - V(p_T) + \int_{0}^Tx(p_t)dp_t

This may look a little confusing at first glance as it is Ito calculus, however, what is really being said here is that we have a two legs: one path-independent fixed leg based on the LPT value, and a volatility-based floating leg that inflates in value the more volatile price action is. This floating leg allows us to break free from the monotonic nature of LPT payoffs and be able to use CFMM to do volatility contracts. A perfect example of this is the Variance Swap contract as described in the monotone paper.

Suppose we have a CFMM with the logarithmic payoff:

V(p)=1+log(p/p0)V(p) = 1+\log(p/p_0)

Note, as p00p_0\to0, we require unbounded capital to support this range of prices, however, for our purposes this is not a problem. We are simply using this payoff to illustrate a point. Assuming Geometric Brownian Motion, we achieve an arbitraguer value of:

W=log(p0/pT)+0TσdWtW = log(p_0/p_T)+\int_0^T\sigma dW_t

The expactation value of this is E[W]=12σ2TE[W]=\frac{1}{2}\sigma^2T which is precisely that of a variance swap under GBM.

In summary, we can use CFMMs to achieve many different portfolios and derivatives. Allowing the construction of any monotonically increasing non-negative payoffs, regardless of convexity, as well as a large set of volatility contracts by considering the arbitrageur earnings.

There is however a catch for those payoffs replicated directly as LPTs. They suffer from a loss known as loss-versus-rebalancing (LVR). This is a frictional loss incurred by LPs due to their pacificity and reliance on arbitrage for price updates. It's a loss that results from an informational disadvantage that LPs take on by only recieving price updates through.

It should be noted that this loss only negatively affects the LP's portfolio. When we are shorting LPTs, we are in turn also short this loss, so in a sense, LPT shorts benefit from LVR. Additionally, any position structured around arbitrageur earning is directly earning LVR by the nature of arbitrage. I will circle back to this in a later post and explain why LVR is even less of a concern for RMMs specifically when we consider certain constraints of decentralized portfolio management.

Portfolio Management

Portfolio by Primitive aims to utilize both these use cases of RMM in conjunction with the new Financial Virtual Machine (FVM) introduced in our yellow paper. RMMs provides an approach to constructing a diverse set of potential portfolios while boasting the ability to express complex positions in time in one action. This provides us the perfect vehicle to address the following two major needs and constraints of onchain organizations.

First, onchain organizations have diverse needs for their assets. While individual investors only seek to maximize returns, organizations tend have unique needs based on the structure they represent. These needs can be anything from managing treasury risk, generating positive returns, to managing native token liquidity. All of these needs require a diverse set of tool so that we can properly manage risks and allocations.

Additionally, DAOs with treasuries, a common type of onchain organization, make treasury allocation decisions based on a proposal/voting system. Depending on the implementation and voting structure, this can be a very slow and long process. As a result, certain mechanisms that require frequent re-balances such as Uniswap V3 become unviable for these DAOs to use directly without a vault implementation. In a sense, it is beneficial to DAOs to reduce the quantity of allocation actions as much as possible. This constraint also applies to a lot of other organizations as well just due to the cost of transacting on Ethereum.

The diversity of positions and allocation capabilities made available by RMMs and Portfolio allows fine tuned control over the greeks of the net portfolio, effectively allowing you to manage risk as best as possible at any given moment. And due to RMMs being equipped to change over time, we can manage risk over time without needing additional actions on behalf of the organizations. Portfolio implements RMMs in an opinionated way to deliver the best solution to the problems explained above. The capabilities and impact of Portfolio go far beyond just this and need consideration of the FVM as well to really get the full picture. To further support our understanding of the impact, we will explore the ramifications of the combination of FVM and RMM in a later post.

Appendix: Relevant CFMM Equations

CFMMs facilitate trades using a set of pool reserves RR+nR\in\mathbb{R}^n_+, and a trading function φ(R)=k\varphi(R) = k which defines which trades are accepted. If a trader wants to tender a basket Δ\Delta, they will recieve Δ\Delta' if

φ(R+γΔΔ)=φ(R)\varphi(R+\gamma\Delta-\Delta')=\varphi(R)

where γ=1fee\gamma=1-\text{fee} is the fee regime on the CFMM. This function follows a lot of specific properties, but for now we'll focus on two key ones to understanding where RMMs comes into play. The trading function φ\varphi both implies a price based solely on the pool reserves:

pi=φRip_i = \frac{\partial\varphi}{\partial R_i}

and it implies a specific portfolio value for its LPs:

V=pTRV = p^TR

The above equation shows us that recovering the portfolio value function from the trading function is much more straight forward than the inverse operation. This is where RMMs comes in. Introduced in this paper, RMMs allows us to recover a trading function from a desired portfolio value function.