The Web 3.0 Yield Curve

Alan Keegan
16 min readJan 17, 2022

--

I’ve seen a couple folks tweet stuff along the lines of “ETH is the internet bond,” which it’s not — but it could be. Below I describe:

(1) What yield curves are and why they matter,

(2) How we could make yield curves for crypto economies, and

(3) A crude implementation of a smart contract to do that.

Feel free to skip to whatever makes sense!

What are yield curves and why do they matter?

In a traditional economy, based on a currency managed by a central bank, you have something called a yield curve. This is the interest you can make by lending to the government for 3 months, 6 months, a year, five years, etc. What makes the yield curve for government bonds special is that it’s the safest loan in the whole economy. The government is almost definitely going to be able to pay you back, because the government is the one who prints the money.

Yield curves are super useful, and tell us a lot about what the pools of capital in an economy expect for the future. The reason they work for this is that they represent as closely as possible what the exchange rate is between money today and money in the future, without any meaningful consideration of a risk of not being paid back.¹

For most people, if I lent them money, I might want some interest just to pay me back for not having the money on hand myself to do other things in the meantime– but I’ll also want a bit more than that to compensate me for the risk that it doesn’t get paid back at all. If I lend you $100 and ask for $105 back next year, some part of that price is probably compensating me for the risk that I don’t even get my $100 back. Maybe I don’t trust you, but also maybe I do trust you but still acknowledge the future is uncertain. You could die! You could get wrongfully embroiled in a lawsuit that strains your finances. You could get robbed. Who knows?

With the US government I know I’m going to get my money back–so maybe I’ll lend to them for a cheaper rate and only ask for $103 back next year. I want them to compensate me for not having my money available and on hand, but I’m not worried about them not paying me back. How do I know I’ll get paid back? Well: they are the guys who make the fucking dollars.² Did they overspend? Oopsie. No big deal. Print more money.

I might not know the purchasing power of those future dollars I’ll get paid with, but I know, with near certainty, that I’ll get that $103 dollars next year.³

Now, we all hear chatter about the Fed setting rates but the Fed doesn’t set rates of bonds, per se (usually).⁴ They set the short term rates. That means what the 1, 2, 5, 10 year etc. bonds are doing is implicitly pricing what the market thinks the short term rates will be in the future. A ten year bond is actually just the implied average rate of 10 separate 1 year yields, or of 40 separate 3 month yields.

Even crazier than that, because we have bonds expiring and being sold all the time, you can break down the priced-in rate for each of those periods individually. You can calculate something like what the 1 year rate, three years from now is expected to be according to market prices.

Here’s a simple example of how that works with a 1 year and a 2 year bond.

*If you don’t want to puzzle through with specific numbers, basic idea is that if I know what the rate for a 1 year loan is, and what the rate for a 2 year loan is, I know what is priced in as the rate of a 1 year loan 1 year from now– it should make buying a one year loan now and buying a one year loan next year roughly equal to buying a 2 year loan now. Just skip the numbers if you want.*

Let’s say $100 payout 1 year from now cost $98 — so we have a rate of about 2% on the 1 year (2.04%). Now, let’s say $100 payout 2 years from now costs $94 for a total yield of around 6% (6.38%) and an annual yield of around 3% per year (3.14%). With this you can figure out what the 1 year bond 1 year from now (the “1 year 1 year forward”) is priced to be.

If you took your $94 dollars now and bought a 1 year bond instead of the 2 year, you’d end up with $94 * (1 + 2.04%) = ~$95.92 next year. The market thinks that if you keep doing risk free lending, that ~$95.92 with another year of interest should equal $100. So, around 4% yield is priced in as the 1 year yield 1 year forward (($100 — $95.92)/$95.92 = 4.26%)).

The market isn’t just saying that you’ll get 1% more yield per year by lending for 2 years, it’s saying that rates next year will be double what they are today! Wow. Much insight.

So the yield curve prices in what people think will be the rate set by the Fed for each period in the future. We have this variable set of future risk free rates, which get priced into longer duration bonds, and as expectations around macro conditions or behavior from the Fed change, that price changes.

But the yield curve is not only a reflection of expectations about the economy — it also in turn affects the economy. The higher yield I can get in risk free lending, the less likely I am to lend to anyone else. To go to the above example — I was willing to lend to you for $105 dollars back next year because I could only get $103 dollars back next year by buying government bonds. You are more risky, but I’m willing to take that risk for an extra $2.

If all of a sudden I can get $106 dollars back next year from a government bond, there’s no way I’m going to lend to you for $105 dollars and take on that unnecessary risk. Suddenly, it gets way more expensive for everyone in the economy to borrow money, and many people will no longer be able to borrow at all because they couldn’t realistically expect to pay back the interest on a more expensive loan.

This ever changing exchange rate between present-money and future-money affects other asset prices in the same way it affects people’s willingness to lend. If 1 dollar today goes from being worth 1.03 dollars next year to being worth 1.06 dollars next year, all things denominated in future dollars have lost value versus present dollars. So if nothing else has changed, an equity investment that I expect to pay out $X in dividends in the future is now worth less in present dollar terms (meaning, number go down).

This kind of explicit yield curve exists in any economy where there is a risk free lender (the issuer of the economy’s currency generally speaking) to whom you can lend (engage in some exchange of present money for future money).

In an economy that doesn’t have this, there is still a non-explicit yield curve — there exists some ratio by which people, in aggregate value present money more than future money — but no one knows what it is. This means some people will make risky investments for a rate of return that they could have gotten on far less risky investments. Having an explicit yield curve (i.e. a bond market with the issuer of the currency) crystallizes all this information in a market, and provides an explicit and available to all “risk free” yield for anyone who is not trying to take on any additional risk.

I think it would be pretty neat if we had one of these for crypto.

Making the Web 3.0 Yield Curve

In the crypto world we don’t have a central bank and a government as central issuers and borrowers of a currency. We have a (usually decentrally verified) protocol, which operates as a central issuer, and generally doesn’t have any reason to borrow from the economy built on top of it.

But in some cases, that protocol requires staking of tokens to align incentives for verification. And, as it turns out, rewards for staking on the protocol network are similar enough to a variable short term risk free rate set by the Fed that you can build a bond market (and therefore a yield curve on) top of it.

I’m going to focus this conversation on ETH (because I’m a 2017 ETH mainnet boomer), but the thing I am describing is abstractable to any L1 or L2 with staking–details of implementation will vary a bit.

Why is Staking Similar to The Fed Rate?

Staking provides a variable return depending on number of people staking, network activity, etc. Short term government rates are also variable: they depend on what the Fed says they are at any given time. As the US government is the wellspring of dollars themselves, the Ethereum network is the printer of ETH. Neither can default. If either did default, it would imply that the currency itself had collapsed. So, in terms of the economy denominated in that currency, they are both risk free borrowers.

What we don’t have in the Ethereum network is 1 year, 2 year, 10 year, etc. bonds. You can stake and get whatever you get, but you cannot get a fixed return over a period of time from the risk-free borrower. What we need is a way to exchange a fixed number of ETH today for a fixed number of ETH in the future with that ETH return backed by loans to the one borrower (the network) who will never default. If we did have that, we could actually derive from it the priced-in staking return for any forward period.⁵

As it turns out, we can totally do that with a bit of slicing and dicing of the risk exposures of ETH stakers.

What are Strips?

Strips — in this case meaning “interest only” and “principal only” strips — are a way of separating out a bond into (1) the claim to the initial loaned amount and (2) the claim to the interest. This might seem to be coming out of nowhere, but — trust me — this will get us back around to creating a yield curve based on staked ETH.

To use the example we’ve been coming back to, I could lend you $100 and agree you will pay me $105 next year. I then turn around and sell to two other people two separate exposures:

(1) a claim to the initial $100 dollars a year from now and

(2) a claim to $5 (the 5% interest) a year from now

If you pay me the $100 back, the person holding the claim to the $100 principal will get it. If you pay me the 5% interest, the person holding the claim to the interest will get that $5.

Now let’s say you didn’t agree to pay me $105 back, but instead agreed to pay me between $105 and $110 depending on how things went for you. Now I turn around and sell another person the riskier claim to the interest, which is now going to pay anywhere from $5-$10 dollars.

If someone is willing to buy that riskier asset, I can lock in a fixed return. If we do this with staked ETH we can have a yield curve for the Ethereum economy.

I’ll be using stETH as an example for this. For context: stETH is a liquid, tradable ERC-20 claim to staked ETH offered by Lido.

Here’s how it works:

We design a contract into which folks can deposit stETH and receive two ERC-20 tokens, one claim to the interest (interest only = io) and on claim to the principal (principal only = po).

Anyone can deposit stETH into the contract. For every 1 stETH deposited, the contract will send them 1 io-stETH (which accrues any yield gained on the deposited 1 stETH) and 1 po-stETH (which can be used to claim 1 stETH at the time the contract expires).

And to make the example more illustrative, let’s say that that user (USER 1) sends their io-stETH token to a second EOA (USER 2) — meaning the starting state, today, is like this:

Now, let’s say we made the contract so that it expired 1 year from now. And, let’s say that the yield on hodling stETH turned out to be 5%.

(A quick note here: stETH rebalances, meaning that if you earned 5% interest your stETH balance in your wallet would simply go up by 5% (you had 1 stETH last year and now you have 1.05 automagically).)

Let’s fast-forward a year.

The contract held the 1 stETH from a year ago, so the contract now has 1.05 stETH within it (which it uses to pay users out when it expires).

The user who holds the 1 io-stETH can claim the 5% interest, which is .05 stETH (1 stETH’s worth of accrued interest over the past year). The user holding the 1 po-stETH can now redeem it for 1-stETH (the principal), since the contract has expired.

So, if you minted the interest token and the principal token and simply held them both, you would have an equivalent return to just holding the 1stETH. And you can always exchange 1 stETH for 1 ETH (can mint them whenever, and while redemptions aren’t live yet they basically trade in line with each-other because they are ultimately the same claim). This means that at all times, the price should adhere to the following mathematical identity:

(1 io-stETH + 1 po-stETH) = 1stETH = 1ETH

Okay, so I know that (1 io-stETH + 1 po-stETH) = 1 ETH, but what would be the value of each of the two tokens? That’s where the market comes in — the market that prices what yield folks are willing to fix for the year until the contract expiry. Let’s walk through an example, and show what a particular price would imply, and what it would make possible.

Let’s say prices trade at 1 io-stETH = .05 ETH and 1po-stETH = .95 ETH. Assuming there’s somewhere to trade these, I can immediately go hedge yield.

Today: use 1 ETH to purchase ~1.05 po-stETH.

Next year: burn my 1.05 po-stETH to claim 1.05 stETH (equal to 1.05 ETH)

HOT DAMN! We just locked in a fixed 5% yield for the year.⁶ That was easy! There’s even a second way to do this:

Today: use 1 stETH to mint 1 io-stETH and 1 po-stETH

Sell 1 io-stETH for .05 po-steth (total now 1.05 po-stETH)

Next year: burn my 1.05 po-stETH to claim 1.05 stETH (equal to 1.05 ETH)

The point here is just that, as long as there are liquid, tradable claims to principle separated from interest for staked ether, we have a yield curve! This would depend on someone being willing to buy the interest-only token.

Speculation on Staking Yields and Efficient Yield Exposure

But why would anyone take the other side of the trade? Well, the above market pricing implies that the yield of 1 stETH will be about 5%. If the market is right, then me spending .05 ETH to buy 1 io-stETH will just get me that .05 ETH back in accrued yield over the course of the year. But, if I think the market is wrong, I can buy the io-stETH to get a better return than the folks who are hedging for a fixed yield. Let’s say I think the over the next year of staking will actually turn out to be 10% — and I’m right! I can make that bet two ways just like last time (trading on open market or minting and converting), but let’s just walk through the open market way to keep things simple.

Today:

Use 1 ETHto buy 20 io-stETH

Next year:

I get 0.1 ETH from each io-stETH due to 10% yield

I now claim interest worth (20 * 0.1)= 2 stETH

I just got the pleasure of making money on being right, when the market was only pricing in a 5% yield for fixed returns. If you’re thinking “or you could just hold the stETH” — you’re a very clever sausage. But, doing it through the io-stETH token is going to be way, way, like WAY, more capital efficient. If I’d just held stETH instead of using the io-stETH I’d have ended up with 1.1 stETH (1 stETH + 10% yield).

It came from the capital efficiency of trading isolated interest exposure. Remember, holding 1 steth is equivalent to holding interest (io-stETH) and principal (po-stETH). If I’m holding stETH as a way of “betting against” the priced in interest rate, only 5% of the capital in the stETH is actually making that bet. If I were high conviction, and I wanted to use all of that 1 stETH worth of capital to make that bet, I can now do so in a way I could not not. I’d put the whole stETH into io-stETH.

Furthermore, the folks using these assets to hedge out yield risk should systematically underprice yield. Generally speaking the sellers of risk pay a premium and the buyers of risk collect a premium.

A DAO that has fixed costs for its employees, as an example, might be able to use 10% of its treasury, lock in a 5% yield on that for the next year, and know that it has its liabilities (costs) covered for that period. Even if they think the yield is likely going to be 6%, they would often be willing to pay that extra 1% just to have certainty that their costs are covered by their interest alone.

Anyway, that’s how you create a yield curve for Web 3.0.

Quick Aside, Single Issuer Strips

Obviously having a generalized, liquid market for interest and principal tokens for future ETH at a variety of durations is a difficult ecosystem to bootstrap. I think that an early actual application of this would not be an open facility for folks to come and strip their tokens, but rather single-issuer IO and POstrips (that become liquid after a sale). I think the first application of this will not look like the below, but rather would be an opportunity for a DAO to sell some of its staking interest upside to its community in exchange for fixed return. The DAO would mint the IO and PO tokens and sell IO to the community at a price that locks coverage for their costs and gives the upside of the treasury to community holders.

Technical Implementation

I went ahead and whipped up an example of this, below, and will point out the areas of improvement.

For context, I am not a developer: this is not good code.

In fact, if you’re interested in helping me improve this and get it production ready please reach out.

https://github.com/alanckeegan/iopostrips

A few definite improvements that need to be made on this:

  • Presently the IO and PO ERC-20 tokens I’m issuing are a fixed supply which limits the size of the entire stripping contract to 10K stETH. This is an unnecessary limit and could be gotten around by customizing the ERC-20 contracts to include a mint function controlled by the issuer contract.
  • Presently checking yield accrual is done by pinging the stETH contract for its public getPooledEtherByShares() function, and saving the value then checking it agains past values. This requires that IO be staked in order to accrue yield. I think this could be worked around by implementing a shares-based replacement of the getBalance() function within IO (making it also rebalance) a la stETH.
  • Need IO to stop accruing yield after expiry

— — — — — — — — — — — — — — — — — — — — — — — — — — — -

Did you like this? Here are my asks if you want to help out:

  • If you’re a solidity dev and want to work with me on this, hit me up
  • If you’re a react dev and want to work with me on this, hit me up
  • If you’re involved in a DAO and want to try to do a single issuer version of this to sell some upside to your community, hit me up

— — — — — — — — — — — — — — — — — — — — — — — — — — — —

End Notes:

(1) Yes, I know, “blah blah blah, duration risk, blah blah blah.”

(2) This, obviously, does not hold for dollar denominated government debt for countries who don’t print the dollars.

(3)I also know, “blah blah blah, treasury inflation protected securities, blah blah blah”

(4)Obviously asset purchase programs like QE impact longer term yields (they buy longer duration loans, thereby lowering the yield on them), but it is rare for the Fed to set long term yields. It is not, however, unheard of. During the Great depression they basically did that (saying “will will buy however much is necessary to keep 10 yr yields at this rate”), and the BoJ has basically done that in the past decade to try and fight deflation.

(5) I think this, interestingly, will suck capital out of the system in a way that will shut down (or at least greatly diminish TVL, in ETH terms for) a number of existing lending protocols. Folks are presently lending to a lot of risky borrowers at rates lower than they could be lending to a risk free borrower (the network).

(6)Yeah, it’s not exact. As an example .05/.95 actually yields 5.26%, but I think this article is difficult enough as it is.

--

--

No responses yet