Draft

Linear Issuance Tapering

A minimal modification to Ethereum’s issuance curve that tapers new issuance to zero at a 50% staking ratio while preserving consensus penalties throughout.
Published

May 28, 2026

tl;dr

  • Ethereum’s current issuance curve has no equilibrium: staking yield never reaches zero, so the staking ratio is incentivised to grow toward 100%
  • This proposal tapers consensus layer issuance linearly to zero at a 50% staking ratio, using a subtractive deduction from the existing curve
  • BASE_REWARD_FACTOR is doubled (64 → 128) to compensate, so that the yield at today’s ~31% staking ratio is approximately unchanged at deployment
  • Penalties are kept on the unattenuated curve throughout — a new base_penalty_per_increment function separates penalty calculations from the tapered reward — ensuring attestation remains incentivised even as rewards approach zero
  • A new missed proposal penalty, equal to the expected CL proposal reward under the unattenuated curve, is introduced to preserve block proposal incentives
  • The proposal requires six small changes to the consensus layer spec

Introduction

As previously noted, Ethereum’s current issuance curve incentivises a growth in the staking ratio well beyond the point at which additional stake increases Ethereum’s security and arguably makes it more brittle and vulnerable to capture. Furthermore, the level of issuance grows continuously as more Ether is staked. While the nominal yield on offer to stakers gradually decreases as staking ratio grows, even at 100% staked it never goes below 1.5%. This results in a staking incentive which is far in excess of the premium required by some market participants (the reservation yield). That is, the current issuance curve does not allow the market to reach an equilibrium yield, and we should expect the staking ratio to tend towards 100% over time.

To prevent Ethereum from reaching a problematic high staking-ratio, this proposal aims to make the simplest possible alteration to Ethereum’s consensus layer incentives to ensure that additional growth in staking is not incentivised beyond a staking ratio of 50%, by bringing issuance down to zero by this point, while preserving economic incentives for faithful participation in consensus duties by validators. The eventual staking yield under this system would then be set by the market.

Constraints

In considering a new issuance curve, we wish to satisfy the following constraints:

  1. Issuance tapers to zero at a saturation staking ratio \(f_\text{sat}\) of 50%;
  2. Incentives for correct consensus participation by validators are maintained across the full range of possible staking ratios:
    1. At low staking ratios with high staking yields penalties are roughly equal to rewards;
    2. At high staking ratios with low/zero staking yields, penalties remain sufficient to incentivise correct participation;
  3. The staking yield at the moment of transition from the existing issuance curve to the proposed issuance curve is minimally affected;
  4. The anti-discouragement attacks property (which was the motivation behind the current issuance curve) is not significantly weakened at low staking ratios where such attacks are plausible.

An additional desirable property is that the maximum issuance under the new curve should be minimised.

Proposal Outline

The idea is that the simplest way to taper issuance is linearly phasing the existing curve from being unchanged at a staking ratio of 0%, down to zero issuance at a staking ratio of 50% (described herein as the “saturation staking ratio” or \(f_\text{sat}\)). If we take the existing issuance curve to be given by \(I(f)\), there are two types of linear tapering that we may consider:

  1. Multiplicative: multiply the issuance amounts by a tapering factor in the range 0 to 1. The tapering factor at staking ratio \(f\) is given by \(1-\frac{f}{f_\text{sat}}\), so our tapered issuance curve is given by \(I_\text{m-taper}(f)=\left( 1-\frac{f}{f_\text{sat}} \right) I(f)\);
  2. Subtractive: apply a tapering deduction to the issuance amounts by subtracting a value in the range 0 to \(I(f_\text{sat})\), so our tapered issuance curve is given by \(I_\text{s-taper}=I(f) - \frac{f}{f_\text{sat}}I(f_\text{sat})\).

To compare the two versions, we can calibrate for equal yield at the current staking ratio (~33%). We find that the subtractive formulation is superior in terms of having a lower peak issuance, amongst other minor advantages. It is therefore this subtractive version which we will be using for the proposal.

Yield Calibration

The yield and issuance curves for this proposal are plotted below, and compared with the existing curve.

It is noted that naively applying the above tapering principle to the existing issuance curve results in a level of both issuance and yield well below the current levels. However, we could compensate for this effect by modifying the BASE_REWARD_FACTOR \(B\) such that our modified curve intersects the original curve at a desirable staking ratio.

A compensated issuance curve has been generated here by doubling \(B\) from 64 to 128. This curve intersects the current one at \(f = 2^{-5/3} \approx 31\%\) — close to today’s staking ratio — meaning the yield reduction at deployment is modest:

Figure 1: CL nominal yield under the current curve (BRF=64), the naive taper (BRF=64) — which applies the linear deduction without adjusting \(B\), resulting in yield well below the current level at today’s staking ratio — and the proposed compensated taper (BRF=128). The compensated curve intersects the current yield at \(f \approx 31\%\), close to today’s staking ratio, so the yield reduction at deployment is modest.
Figure 2: Annual ETH issuance under the current curve (BRF=64), the naive taper (BRF=64), and the proposed compensated taper (BRF=128). The compensated curve peaks at \(f^* = 2^{-7/3} \approx 19.8\%\) and falls to zero at \(f = \tfrac{1}{2}\).

Implementation

In the above we have considered a proposed issuance curve to prevent the problems associated with excessive staking ratios, as explored in previous articles, by ensuring that equilibrium yield can be reached at a staking ratio of less than 50%.

However some thought needs to be given to how such a curve would be implemented. Naively, we could simply replace the base_reward calculation from the spec with our tapered version. However, the base_reward from the current spec is used as the basis for both rewards and penalties. Therefore if this quantity were tapered all the way to zero, both rewards and penalties would disappear, and there would be no incentive for validators to participate faithfully.

Two options we might consider for tapering issuance while ensuring incentives for correct attestation remain intact are:

  1. Introduce a tapered “validator fee” whereby validators are charged a fee each epoch; the fee must be “earned back” by correct attestation;
  2. Separate out rewards and penalties to use different curves, so that rewards are tapered as the staking ratio increases but penalties are not.

Option 1 would perhaps be the simplest to implement — the fee would simply be deducted from each validator each epoch, leaving all other aspects unchanged. However, it comes with a significant drawback: at low yields the validator fee may exceed the attestation reward, due to the lumpy nature of rewards for other duties (proposals and sync committees). This would particularly penalise small stakers who cannot smooth out the rewards from occasional duties and as a consequence would experience negative yields most of the time.

Option 2 is therefore to be preferred. Additional complexity here is modest — we simply create a base_penalty which is used for all penalty calculations in place of base_reward. The base_penalty would use the same curve as the current base_reward, while base_reward would be replaced by the tapered version in order to achieve the desired issuance curve.

Proposal Incentives

The above change ensures that correct attestation is always incentivised, even if issuance tapers close to zero. However one further change is required to maintain incentives for block proposal. In the current spec, there are no penalties for missed proposals — the large rewards for block proposal mean this is not necessary, and plock proposal is also incentivised by execution layer rewards, which are paid to the proposer. However, execution layer rewards may be very low, and under tapering, consensus layer rewards for proposal could also in theory approach zero. Therefore it is necessary to introduce missed proposal penalties to ensure block proposal is also incentivised.

Under the Altair reward budget, proposers collectively receive \(\frac{1}{8}\) of all attestation rewards per epoch, distributed across 32 slots. Assuming perfect participation, the expected attestation reward for a single block proposal — computed using the unattenuated base_penalty_per_increment — is:

\[P_\text{proposal} = \left\lfloor \frac{n_\text{incr} \cdot p}{256} \right\rfloor = \left\lfloor \frac{B\sqrt{S}}{256} \right\rfloor\]

where \(n_\text{incr} = S / I\) is the total number of effective balance increments, \(p\) is base_penalty_per_increment, \(S\) is the total active balance in Gwei, and \(I\) is EFFECTIVE_BALANCE_INCREMENT. The denominator \(256 = 8 \times 32\) reflects the proposer’s \(\frac{1}{8}\) share of rewards spread across 32 slots per epoch. The missed proposal penalty is set equal to this expected value.

Consensus Layer Spec

The proposal requires six changes to the Ethereum consensus layer spec: BASE_REWARD_FACTOR is updated from 64 to 128; a new constant SATURATION_BALANCE is added; get_base_reward_per_increment is modified to apply the linear attenuation; a new function get_base_penalty_per_increment is added to provide the unattenuated value for penalty calculations; a new function get_missed_proposal_penalty is added; and process_slots is modified to apply that penalty for each skipped slot.

Updated Constant and New Constant

One existing constant is updated and one new constant is added.

Constant Old value New value Notes
BASE_REWARD_FACTOR uint64(64) uint64(128) Doubles the unattenuated base reward and penalties
SATURATION_BALANCE Gwei(60_250_000 * 10**9) Total active balance at which base_reward falls to zero; set at the hard fork to approximately half the current ETH supply

SATURATION_BALANCE encodes \(f_\mathrm{sat} \cdot S\) in Gwei.

New Function

One new function is added to the spec:

def get_base_penalty_per_increment(state: BeaconState) -> Gwei:
    return Gwei(
        EFFECTIVE_BALANCE_INCREMENT * BASE_REWARD_FACTOR
        // integer_squareroot(get_total_active_balance(state))
    )

This is the unattenuated base reward — identical in form to the existing get_base_reward_per_increment but with BASE_REWARD_FACTOR = 128. It is used in place of get_base_reward_per_increment wherever penalties are calculated.

Modified Function

get_base_reward_per_increment is modified to incorporate the linear attenuation:

def get_base_reward_per_increment(state: BeaconState) -> Gwei:
    total_active_balance = get_total_active_balance(state)
    linear_deduction = Gwei(
        EFFECTIVE_BALANCE_INCREMENT * BASE_REWARD_FACTOR * total_active_balance
        // (SATURATION_BALANCE * integer_squareroot(SATURATION_BALANCE))
    )
    return Gwei(max(0, get_base_penalty_per_increment(state) - linear_deduction))

linear_deduction grows proportionally with total_active_balance, reaching get_base_penalty_per_increment exactly at SATURATION_BALANCE. The max(0, ...) floor prevents negative values above saturation while maintaining full penalty exposure via get_base_penalty_per_increment.

Application

Wherever a positive attestation reward is credited — in get_flag_index_deltas for each duty flag — the per-increment base reward is applied directly:

# For each participating validator with n_increments of effective balance:
reward = n_increments * get_base_reward_per_increment(state)

Penalty calculations are updated to use the new function:

# For each non-participating validator:
penalty = n_increments * get_base_penalty_per_increment(state)

With BASE_REWARD_FACTOR = 128, penalties are twice the pre-fork level, further strengthening the incentive to attest correctly. The separation of base_reward and base_penalty makes the asymmetry explicit: rewards scale down as staking grows; penalties do not.

Missed Proposal Penalty

A new function computes the penalty for a missed block proposal, equal to the expected attestation reward for a single slot under the unattenuated curve with perfect participation:

def get_missed_proposal_penalty(state: BeaconState) -> Gwei:
    total_active_balance = get_total_active_balance(state)
    return Gwei(
        (total_active_balance // EFFECTIVE_BALANCE_INCREMENT)
        * get_base_penalty_per_increment(state)
        // 256
    )

process_slots is modified to apply this penalty for each skipped slot:

def process_slots(state: BeaconState, slot: Slot) -> None:
    assert state.slot < slot
    while state.slot < slot:
        process_slot(state)
        if (state.slot + 1) % SLOTS_PER_EPOCH == 0:
            process_epoch(state)
        if state.slot + 1 < slot:  # this slot is skipped
            proposer_index = get_beacon_proposer_index(state)
            decrease_balance(state, proposer_index, get_missed_proposal_penalty(state))
        state.slot = Slot(state.slot + 1)

When process_slots(state, slot) is called to advance the state to an incoming block’s slot, every intermediate slot with no block has its assigned proposer penalised by get_missed_proposal_penalty. The condition state.slot + 1 < slot excludes the final advance — that slot receives a block and its proposer is not penalised.

Anti-Discouragement Attacks

The effect of the proposed issuance curve on resistance to discouragement attacks has been considered in separate analysis not published here. The short summary is that the proposed curve slightly weakens discouragement-attack resistance compared to the current one. The difference is small at the low staking ratios where discouragement attacks pose the greatest threat, and the gap widens at higher staking ratios — a cost that must be weighed against the proposal’s objective of tapering yield at high staking levels.