[Temp Check] Removing the price cliffs in ENSv2 pricing

TL;DR: Under the ENSv2 pricing approved in EP 6.43, there are terms where paying for longer costs less. A 5+ character name costs $32.99 for 5 years 364 days and $27.00 for 6 years.

This is a temperature check for a proposal to smooth the price between the approved points, so that every extra day costs a little more and a longer term never costs less.

It is here for comment, and the DAO may well decide it isn’t worth doing.


Background

ENSv2 moves .eth payment from ETH to stablecoins - prices are in USD, paid in USDC or DAI. The rates come from EP 6.43, which the DAO approved on Snapshot. 3 and 4 character names stay at $640 and $160 a year. 5+ character names go from $5 to $8 a year.

EP 6.43 also added a multi-year discount: 12.5% off for 2 years or more, 31.25% off for 3 years or more, and 43.75% off for 6 years or more. The discount applies to the whole term once you reach each threshold.

Two details of how this is implemented matter here:

  • The discount depends on the length you pay for in that transaction, not on how long the name will have left once you add it. Renewing a year at a time never earns a discount.

  • New registrations have a 28-day minimum and renewals can be any length, so any term can be bought, including 1 year 300 days or 5 years 200 days.

The Cliffs

Together, those mean the total price doesn’t rise steadily with term. It climbs, then drops at 2, 3 and 6 years as each discount level starts. For a 5+ character name:

Term ENSv2 price
1 year $8.00
1 year 364 days $15.98
2 years $14.00
2 years 364 days $20.98
3 years $16.50
5 years $27.50
5 years 364 days $32.99
6 years $27.00

  • Anything from 1 year 274 days up to 2 years costs more than 2 years.
  • Anything from 2 years 130 days up to 3 years costs more than 3 years
  • Anything from 4 years 332 days up to 6 years costs more than 6 years.

3 and 4 character names have the same bands - a 4 character name for 5 years 364 days costs $659.70, against $540.00 for 6 years.

This is even shown in the Snapshot’s own table - $27.50 for a 5 year registration against $27.00 for 6 years.

Most people renewing through an app will pick whole years and never notice. The people affected are those who choose an exact length, or an app that offers “renew until” a given date.

I think it’s a side effect of applying a stepped discount to the whole term rather than a design choice, which is why it seems worth raising now.

You can explore it on the ENSWhois pricing page, which runs the same calculation as the deployed price oracle.

Proposal

Keep the approved prices at 1, 2, 3 and 6 years, and draw a straight line between them:

  • from 1 to 2 years, the price rises steadily from $8.00 to $14.00;

  • from 2 to 3 years, from $14.00 to $16.50;

  • from 3 to 6 years, from $16.50 to $27.00;

  • beyond 6 years, $4.50 a year, the 6-year rate, which is what ENSv2 charges there already.

The price then rises with every extra day, so a longer term never costs less, and nobody pays the same for less time. Nothing changes under 1 year, at 1, 2, 3 or 6 years, beyond 6 years, or for the base rates and the premium.

For a 5+ character name:

Term ENSv2 today Smoothed
1 year $8.00 $8.00
1 year 300 days $14.58 $12.93
2 years $14.00 $14.00
2 years 182 days $17.49 $15.25
3 years $16.50 $16.50
4 years $22.00 $20.00
5 years $27.50 $23.50
5 years 364 days $32.99 $26.99
6 years $27.00 $27.00

The smoothed price is never higher than today’s at any length, for any name length. It does lower the 4 and 5 year prices, which EP 6.43 set at $22.00 and $27.50 for 5+ characters ($440 and $550 for 4 characters, $1,760 and $2,200 for 3).

Implementation

The discount points are fixed in the deployed StandardRentPriceOracle; there is no setter for them. ETHRegistrar, which the DAO timelock owns, takes its prices from a swappable oracle via setRentPriceOracle. So the change would be:

  1. A new oracle whose getBasePrice interpolates between the approved points, identical to the current one otherwise;
  2. An audit of that change;
  3. An executable proposal calling setRentPriceOracle on both ENSv2 contracts that use the oracle: ETHRegistrar, for new registrations and renewals, and ETHRenewerV1, for renewals of names carried over from v1. Both are owned by the DAO timelock.

v2 registration isn’t open yet, so if the DAO wants this, it could be in place before anyone pays a cliff price.

Cost

Every term other than 1, 2, 3 and 6 years and beyond 6 years would cost less than it does today, by up to about a fifth (5 years 364 days falls from $32.99 to $26.99). That said, this isn’t - in my opinion - a case of “we are reducing prices”, but rather what I imagine was intended when EP 6.43 was initially proposed. I think there is a risk of complaints down the line if people have inadvertently paid more for less.

Feedback

I appreciate that everyone is busy in the run up to v2 but I’d be interested to hear thoughts on this.

1 Like

We did consider different approaches that eliminated cliffs or regressive pricing. The simplest one is marginal rates: the first year costs $8, the second costs 7, and so forth. Ultimately what drove the choice of the current implementation was simplicity: users need to be able to figure out how the price they’re seeing was calculated, and applicable rate * duration is the easiest way to convey this. The same reasoning drove the decision to price each renewal separately, rather than considering the total registration duration when determining the rate to apply.