Solution Evaluation · Fee Layer

CIP-0023 — Fair Min Fees

minPoolMargin floor — subsumed by CIP-0082 stage 2

CIP-0023 · Fair Min Fees · 2021 · Shawn McMurdo, Ryan Wiley · adds one parameter minPoolMargin · no hard fork · No-go as a standalone — the same mechanism is already inside CIP-0082 stage 2

official page · PR #66 · forum thread

CIP-0023 attacks the fee-side regressivity the operator-delegator diagnostic documents on two axes — a 38× effective-fee-rate dispersion between sub-reliable and saturated pools (OPE.O1.F4: $1/\sigma$ hyperbola from 47.5 % at sub-reliable to 1.5 % at near-saturation) and the structural disadvantage faced by the operators running those small pools (OPE.O6.F4: no single-pool operator earns a competitive wage at retail scale). The instrument: add a single parameter minPoolMargin, a floor on the variable-fee margin, applied at reward calculation. No hard fork, no re-registration; the CIP explicitly leaves minPoolCost unchanged.

CIP-0023 is a partial fix on the delegator side and a regressive transfer on the operator side, fully subsumed by CIP-0082 stage 2. Productive-range dispersion compresses from 38× to 13× under the standalone variant; the per-pool revenue uplift at saturation is 52× the uplift at sub-reliable, and the gap multiplies again to 502× across the operator-fleet axis.

Three findings frame the verdict:

The CIP names the right pathology and points at the right layer — but the standalone calibration leaves the small-pool floor untouched and the redistribution it does deliver runs the wrong way.

Table of Contents

1. What CIP-0023 proposes

CIP-0023 adds one parameter — minPoolMargin, a floor on the variable-fee margin operators charge delegators.

It is a fee-layer instrument. The reward formula and per-pool allocation are untouched; only the operator/member split changes, after the allocation.

The intent is to make small pools more attractive on ROS by preventing a race-to-zero on margin — without a floor, small operators undercut each other to the point that none of them can cover their fixed cost.

The instrument is conservative: one scalar parameter, no hard fork, no re-registration, no change to existing pool certificates. The CIP text is explicit that minPoolCost is left unchanged — the proposal adds the margin floor only.

This is the historical anchor for the margin-floor concept; it predates the broader CIP-0082 reform.

2. The problem it tries to fix

In Cardano's reward formula, the operator take has two pieces:

The fixed component is taken first, before the margin. That makes the effective fee rate a delegator pays follow a $1/\sigma$ hyperbola: the smaller the pool, the larger the share of pool reward consumed by the fixed fee.

The mainnet picture today: a 100 k ADA delegator faces an effective fee rate of about 27 % in a 2 M ADA pool versus 0.7 % in a saturated pool — a 38× dispersion driven almost entirely by the fixed cost.

Delegators are mechanically steered away from small productive pools toward saturated ones, against the protocol's own intent.

CIP-0023's response: add a margin floor so the proportional component dominates and ROS converges across pool sizes.

3. Verdict — three reasons it fails as a standalone

1. The standalone margin floor only half-flattens delegator dispersion — from 38× to 13×.

Productive-range fee-rate dispersion compresses from 38× today to 13× under the standalone variant — meaningful relief at the mid-to-large pool end, but a long way from flat. The full fix needs a paired minPoolCost reduction the CIP itself rules out: "this proposal does not change or reduce the existing minimum fixed pool fee." The CIP's own 2021 worked example pairs the margin floor with a cost cut and reaches 5.5×; CIP-0082 stage 2 takes the cost to zero and reaches 1.00×.

The instrument that actually flattens dispersion is CIP-0082 stage 2, not CIP-0023 standalone.Partial coverage and regressive transfer

2. The transfer leaks 52× per pool and 502× per operator up the distribution.

Per-pool operator-revenue uplift at saturation is +357.5 ADA/epoch against +6.8 at sub-reliable — a 52× gap on the pool axis alone. On the operator-fleet axis the gap multiplies again: an 11+ pool multi-pool operator gains +216 298 ADA/yr while a sub-reliable single-pool operator gains +431 ADA/yr — a 502× spread end-to-end. The two amplifications stack multiplicatively.

The instrument introduced to fund small operators redirects most of the transferred ADA to operators that already have no viability problem.Regressive transfer up the distribution

3. Same primitive as CIP-0082 stage 2 — voting both is governance double-counting.

minPoolRate (CIP-0082 stage 2) and minPoolMargin (CIP-0023) are the same instrument under different names — and the CIP-0082 author credits CIP-0023 explicitly: "minPoolRate was originally proposed in CIP-0023." Ratifying both as separate items doubles the on-chain parameter changes, calibration decisions, and review cycles for one mechanical effect.

As a live item in the current review cycle, CIP-0023 is subsumed by CIP-0082 stage 2 unless governance explicitly declines the hard fork stage 2 requires. → Functional redundancy with CIP-0082 stage 2

The remainder of the document walks the proposal in three steps: §4 quantifies what changes on mainnet today across the canonical nine-tier taxonomy; Appendix A unpacks the formula and re-runs the CIP's own 2021 calibration at today's parameters; Appendix B documents the per-finding evidence on both axes (per pool, per n-MPO bracket) with verdict tags.

4. What it does to mainnet today

Effective fee rate (share of each delegator's gross reward consumed by the operator take) across the productive range, at three configurations:

Canonical tier Rep. σ (A) Today (minPoolCost = 170, margin ≈ 0) (B) Standalone CIP-0023 (minPoolMargin = 1.5 % added on top) (C) Paired (minPoolCost = 50, minPoolMargin = 1.5 %) — out of scope
Dormant (50 K) 50 K 100 % 100 % 100 %
Sub-block (500 K) 500 K 100 % 100 % 33.1 %
Sub-reliable (2 M) 2 M 27.3 % 28.4 % 9.4 %
Healthy (15 M) 15 M 3.64 % 5.08 % 2.55 %
Saturated (77 M) 77 M 0.71 % 2.20 % 1.71 %
Productive-range dispersion 38× 13× 5.5×

Table 4.1 — Effective fee rate by pool tier across three configurations. Standalone CIP-0023 only partially compresses dispersion; the variant that reaches 5.5× requires a minPoolCost cut the CIP explicitly excludes.

The numbers show two regimes at once.

Above the floor. The standalone variant cuts dispersion from 38× to 13× — partial relief that benefits delegators of mid-to-large pools, with the largest absolute gain at saturation.

At the floor. Dormant and Sub-block tiers stay 100 %-fee-consumed: their epoch reward is below 170 ADA, so the fee swallows everything. The struggling-pool tail the CIP gestures at is not reached. Only a minPoolCost reduction can do that, and the CIP rules it out.

5. Read more

Appendix A — Mechanism in detail

This appendix gives the formula, the worked calibration the CIP itself publishes (epoch 382), and the updated calibration at current mainnet parameters. The opener summarises the conclusions; this appendix carries the derivations.

A.1. The formula

The floor is applied during reward calculation, not at certificate level:

$$\mu^{\text{pool,effective}}_{i} = \max\left(\mu^{\text{pool}}_{i},\ \mu^{\text{pool}}_{\text{min}}\right)$$

Design surface.

Property Value
New parameter minPoolMargin ($\mu^{\text{pool}}_{\text{min}}$)
Initial value 0 (raised later via standard Parameter Change actions)
minPoolCost status Unchanged. CIP text is explicit: "this proposal does not change or reduce the existing minimum fixed pool fee."
Re-registration Not required — floor applied inside ledger reward calc
Hard fork Not required
Layer Fee (operator/member split, post-per-pool allocation)
Reward curve Untouched
Pledge mechanics Untouched

Table A.1 — Design surface of CIP-0023.

Intent. Attack fee regressivity: minPoolCost alone imposes a disproportionately large effective fee rate on delegators to small pools, biasing delegation toward saturated pools. A variable-fee floor lets the effective operator take scale with pool stake.

A.2. Worked calibration from the CIP rationale (epoch 382)

The CIP's own 2021 worked example. Comparison at epoch-382 parameters (rewards 31.2 M, saturation 64 M ADA), reference delegator 100 k ADA:

Pool stake Current (minPoolCost = 340, margin ≈ 0) Proposed (minPoolCost = 50, minPoolMargin = 1.5 %)
2 M 22.7 % 4.8 %
5 M 9.1 % 2.8 %
10 M 4.5 % 2.2 %
20 M 2.3 % 1.8 %
30 M 1.5 % 1.7 %
64 M (sat.) 0.7 % 1.6 %

Table A.2 — Effective fee rate at epoch-382 parameters under the CIP's own paired configuration. Dispersion collapses from 32× (22.7 / 0.7) to 3× (4.8 / 1.6).

Caveat. The 32× → 3× compression requires both a reduced minPoolCost and the new margin floor; the margin floor alone does not flatten the small-pool regressive burden.

A.3. Updated calibration at current parameters (epoch 623)

Two things have changed on mainnet since the CIP was drafted: minPoolCost was halved by governance to 170 ₳ (Conway-era parameter-change action at epoch 445, 2023/10/27), and the reward base has fallen with reserve depletion — hollow-pool yield at saturation is now ~2.27 %/yr (≈ 24 000 ADA/epoch at $z_0 \approx$ 77 M ₳). Re-running the CIP's own fee-rate comparison at today's values clarifies what the standalone instrument still delivers after the halving already absorbed part of the fixed-fee relief.

Effective fee rate shown below is $\text{take}(\sigma) / R_{\text{pool}}(\sigma)$ — the share of each delegator's gross reward consumed by the operator take (independent of delegator stake). Per-pool reward below saturation approximated as $R(\sigma) \approx 24\,000 \times \sigma / 77\text{M}$ (pledge ≈ 0, hollow-pool base). Representative σ per tier follows the canonical nine-tier taxonomy the diagnostic uses to bracket pools by stake size — running from Dormant (~50 K, too small to produce blocks reliably) through Sub-block, Sub-reliable, Healthy, Large healthy, Near-saturation, Saturated (~77 M, at the V1 cap) to Oversaturated. Full definitions in pools-distribution §4.1.3.

Canonical tier Stake range Rep. σ $R(\sigma)$ ₳/ep (A) Today (minPoolCost = 170, margin ≈ 0) (B) Standalone CIP-0023 (minPoolCost = 170, minPoolMargin = 1.5 %) (C) Paired (minPoolCost = 50, minPoolMargin = 1.5 %)
Zero-stake 0 0 0
Dormant > 0 → ~100 K 50 K 15.6 100 % 100 % 100 %
Sub-block ~100 K → ~1 M 500 K 155.8 100 % 100 % 33.1 %
Sub-reliable ~1 M → ~3 M 2 M 623 27.3 % 28.4 % 9.4 %
Healthy ~3 M → ~38.5 M 15 M 4 675 3.64 % 5.08 % 2.55 %
Large healthy ~38.5 M → ~61.6 M 50 M 15 584 1.09 % 2.57 % 1.82 %
Near-saturation ~61.6 M → ~73.1 M 67 M 20 883 0.81 % 2.30 % 1.74 %
Saturated ~73.1 M → ~80.8 M 77 M 24 000 0.71 % 2.20 % 1.71 %
Oversaturated > ~80.8 M 85 M ≈ 24 000 0.71 % 2.20 % 1.71 %

Table A.3 — Effective fee rate by tier at current mainnet parameters across three configurations.

Two regimes. The table shows two structurally different populations:

Dispersion across the productive range (Sub-reliable → Saturated, excluding below-floor tiers which would inflate the ratios to infinity):

The halving of minPoolCost (340 → 170) delivered zero regressivity relief at the small-pool end — the ratio structure is unchanged because the yield denominator shrank in parallel. CIP-0023 standalone is stacked on top of the current 170 floor and only raises the effective rate at mid-to-large pools; it leaves the sub-reliable tier essentially at its current 27 %. The paired variant (reduction of minPoolCost + margin floor) is the configuration that reproduces the CIP's 2021 intent — and it is explicitly out of scope for CIP-0023 standalone.

Appendix B — Findings

Reading aid — the n-MPO axis. n = number of pools the same entity runs. n = 1 means single-pool operator; n ≥ 11 means an entity controlling 11 or more pools. The bracket measures how a reform's revenue impact compounds with fleet size.

CIP-0023's reconstructed problem statement has two sides:

CIP-0023 addresses the first and mis-allocates the second.

A proportional 1.5 % margin floor makes the per-pool operator-revenue change scale with pool size. The mechanism meant to help the small-pool tier redirects a much larger ADA amount to operators that already have no viability problem — and the mis-allocation amplifies again when one operator runs many pools.

Two reference tables anchor the cards below.

Pool axis — Δ per pool across the nine canonical tiers (epoch 623; reward $R(\sigma) \approx 24\,000 \times \sigma / 77\text{M}$ ₳/epoch below saturation; reward capped at saturation cap $z_0 = 77$ M ₳; convention "declared margin ≈ 0" as in the CIP's own worked example):

Canonical tier Rep. σ $R_{\text{pool}}$ ₳/ep Current op take Standalone minPoolMargin = 1.5 % Δ per pool, std. Paired minPoolCost = 50, minPoolMargin = 1.5 % Δ per pool, paired
Dormant 50 K 15.6 15.6 15.6 0 15.6 0
Sub-block 500 K 155.8 155.8 155.8 0 51.6 –104.2
Sub-reliable 2 M 623 170 176.8 +6.8 58.6 –111.4
Healthy 15 M 4 675 170 237.6 +67.6 119.4 –50.6
Large healthy 50 M 15 584 170 401.2 +231.2 283.0 +113.0
Near-saturation 67 M 20 883 170 480.7 +310.7 362.5 +192.5
Saturated 77 M 24 000 170 527.5 +357.5 409.3 +239.3

Table B.2 — Per-pool Δ in operator take across nine canonical tiers under the standalone and the (out-of-scope) paired variant.

Operator axis — Δ per entity by n-MPO bracket. Per-pool Δ stacks over the operator's fleet. Each bracket below uses its mean pools per entity and mean pool stake from the operator-delegator profitability analysis (epoch 623, retail hollow segment; 73 epochs/yr).

n-MPO bracket Entities Pools/entity Mean stake/pool $R_{\text{pool}}$ ₳/ep Δ per entity per year — standalone Δ per entity per year — paired
Single-pool — Sub-reliable (< 3 M) 155 1 1.81 M 564 +431 ADA/yr –8 198 ADA/yr
Single-pool — Healthy (3–38.5 M) 214 1 11.40 M 3 554 +3 706 ADA/yr –4 920 ADA/yr
Single-pool — Large healthy (38.5–62 M) 29 1 50.69 M 15 798 +17 114 ADA/yr +8 483 ADA/yr
Single-pool — Near-saturation (62–77 M) 16 1 69.38 M 21 623 +23 491 ADA/yr +14 863 ADA/yr
2-pool MPO 17 2.00 38.24 M 11 918 +25 725 ADA/yr +8 468 ADA/yr
3–5 pool MPO 24 3.92 29.47 M 9 183 +38 693 ADA/yr +4 865 ADA/yr
6–10 pool MPO 9 7.44 35.37 M 11 024 +88 423 ADA/yr +24 223 ADA/yr
11+ pool MPO 7 19.29 33.41 M 10 413 +216 298 ADA/yr +49 852 ADA/yr

Table B.3 — Δ per entity by n-MPO bracket. The 502× gap between the 11+ MPO bracket and the sub-reliable single-pool bracket is the headline.

S2
Synthesis 02 · 3 findings

Partial CPS coverage and regressive transfer up the distribution

3 findings

The margin floor leaks revenue up the distribution on both axes. Per pool, large pools gain ~52× the ADA per epoch that small pools gain. Across an operator's fleet, the gap multiplies again by ~9.6× — the two amplifications stack, mirroring the same regressivity the reform sets out to correct.

Findings
  1. regresses#1S2.F2
    Per-pool Δ at Saturation is 52× the Δ at Sub-reliable. +357.5 vs +6.8 ADA/epoch under the standalone variant — the instrument that the CIP's rationale introduces to fund small operators redirects the largest ADA transfer to pools that had no viability problem to begin with. The Dormant and Sub-block tiers receive zero transfer (pool reward doesn't reach the 170 ADA floor, so the 1.5 % margin applies to zero). See Table B.2 above for the full per-tier breakdown.
  2. regresses#2S2.F3
    On the operator-fleet axis, the transfer compounds to a 502× gap. 11+ pool MPO entities gain +216 298 ADA/yr under the standalone variant; sub-reliable single-pool operators gain +431 ADA/yr. The pool-axis 52× amplification and the fleet-axis 9.6× amplification stack multiplicatively — the reform is regressive on the operator layer, mirroring the delegator-layer regressivity it is meant to correct. See Table B.3 above for the n-MPO breakdown.
  3. delivers#3S2.F1
    The standalone variant partially flattens the delegator-side fee-rate hyperbola. Productive-range dispersion compresses from 38× to 13× — a partial delivery on the CIP's explicit delegator-yield claim. The paired variant (out-of-scope for standalone) reaches 5.5×; CIP-0082 stage 2 reaches 1.00× (see cip-0082.md).

Why this fails the foundational target.

V2 §3.1 calls the operator growth path the foundational claim — small productive pools must be able to grow into viability.

The standalone variant fails on three counts:

The result is a fee-schedule redistribution whose direction is the opposite of what the growth-path target requires.

S3
Synthesis 03 · 1 finding

Below-floor tail untouched

1 finding

The instrument does not reach the struggling pools it claims to help. Pools whose epoch reward never reaches the 170 ADA minPoolCost floor are still 100 %-fee-consumed under both the standalone and the paired variant — the margin floor only bites once the fee floor has already been cleared.

Findings
  1. blind spot#1S3.F1
    Below-floor tiers remain 100 % fee-consumed. Dormant and Sub-block (pools whose epochal reward doesn't reach the 170 ₳ floor) are untouched by today's parameters and by the standalone variant — 100 % of pool reward absorbed by the flat fee. Even the out-of-scope paired variant relieves only Sub-block (100 % → 33 %) and leaves Dormant at 100 %. The instrument does not reach the struggling-pool tail it is nominally meant to help.

CIP-0082 stage 2 removes minPoolCost and introduces minPoolRate. That is the same primitive as CIP-0023's minPoolMargin. The CIP-0082 author credits CIP-0023 explicitly.

CIP-0082 then adds three further stages — dropping minPoolCost, ramping the rate, and raising k — that reshape the fee layer end-to-end. CIP-0023 stops at the single instrument.

Scenario Outcome
CIP-0023 ships first Stage 2 of CIP-0082 effectively renames and formalises minPoolMarginminPoolMargin becomes a de-facto placeholder for minPoolRate
CIP-0082 ships first CIP-0023 is strictly redundant — stage 2 already provides the margin floor, subsequent stages extend it
Both enacted as separate items Incoherent — same instrument under two names, governance surface doubled, parameter calibration coupled across two CIPs

Table B.4 — How CIP-0023 relates to CIP-0082 stage 2 under three governance scenarios.

S1
Synthesis 01 · 1 finding · the relationship row

Functional redundancy with CIP-0082 stage 2

1 finding

Same instrument as CIP-0082 stage 2, under a different name. minPoolMargin and minPoolRate are the same primitive at two different calibrations; the CIP-0082 author credits CIP-0023 explicitly.

Findings
  1. regresses#1S1.F1
    Same instrument, two governance items. CIP-0082 stage 2's minPoolRate is mechanically identical to CIP-0023's minPoolMargin, and the CIP-0082 author credits CIP-0023 explicitly. Ratifying both as separate items doubles the governance surface (two on-chain parameter changes, two calibration decisions, two review cycles) without delivering any additional mechanism — the CIP's core contribution (the margin-floor concept) is preserved intact inside CIP-0082 stage 2.

What this means for governance.

Treating CIP-0023 and CIP-0082 as independent options forces a false choice — they are not independent. A coherent review cycle picks CIP-0082, which contains CIP-0023's instrument, and deprecates CIP-0023 as superseded.

Appendix C — Origin and references

C.1. Identity card

Field Value
CIP number CIP-0023
Title Fair Min Fees
Authors Shawn McMurdo, Ryan Wiley
Created 2021/02/04
Category Ledger
Status Proposed (as of 2026/04)
Official page cips.cardano.org/cip/CIP-0023
Source (GitHub) cardano-foundation/CIPs / CIP-0023
Discussion PR cardano-foundation/CIPs #66
Forum thread forum.cardano.org/t/fair-min-fees-cip/47534

C.2. Origin and context

Authorship and moment. Written in early-Shelley era, February 2021. The worked example in the CIP uses epoch-382 parameters, with minPoolCost at 340 ADA and a0 at 0.3. The authors' observation: a 100 k ADA delegator faced an effective fee rate of 22.7 % in a 2 M ADA pool versus 0.7 % in a saturated 64 M ADA pool — a 32× dispersion driven almost entirely by the fixed cost component. The CIP framed this as a fairness problem — delegators penalised for spreading stake across smaller productive pools, and small operators structurally disadvantaged.

Scope the CIP explicitly excludes. The text is explicit: "this proposal does not change or reduce the existing minimum fixed pool fee." The CIP proposes the margin-floor instrument only. Any reduction in minPoolCost is left to a separate governance action. This self-imposed scope restriction is load-bearing for the evaluation — it is why the paired variant in §A.3 and Appendix B.1 is labelled out-of-scope for the standalone CIP.

Historical placement. Written before Conway-era governance and before CIP-0082 — whose stage 2 reproduces the margin-floor mechanism under a different name (minPoolRate). CIP-0023 is therefore both a live technical proposal and a historical reference point for the margin-floor concept that CIP-0082 later operationalises within a staged path.

C.3. References

Status: Active 2026/04/23. Fee-layer candidate. CIP identity and sources in Appendix C.1; evaluation references in Appendix C.3.

Reader Feedback

Comments and reactions are anchored to this page. Sign in with GitHub to post — threads live in the project Discussions.