CIP-0173? | Net Change Limit Parameter#1129
CIP-0173? | Net Change Limit Parameter#1129Cerkoryn wants to merge 6 commits intocardano-foundation:masterfrom
Conversation
|
@Cerkoryn the result of our last open debate on similar subjects is that the CIP process cannot be used to mandate characteristics of budget processes or other strictly human (non-technical) organisational processes: At this time we are only awaiting workload constraints — ongoing with CIP editors for a few months now — before drafting a proper Until a
Then we can start admitting any eligible @Cerkoryn I do think you may have found an acceptable technical governance process with this parameter, but the number of human factors listed in Unless you can already make an indisputable case that your proposal and its implementation are about technical procedure and nothing else, you could mark this as a I would not be alone in trusting your own good will & experience in this matter but — as you will see when reading the arguments presented in #937 — we would not want to reduce the entire community's "governance fatigue" by pushing that fatigue into the CIP process and its dramatically limited resources & personnel: let alone the opportunities for undue influence and vested interest that this could create. |
| - The new parameters provide a standing, updatable definition of the net change limit for that review. | ||
|
|
||
| ## Rationale: how does this CIP achieve its goals? | ||
|
|
There was a problem hiding this comment.
I do feel that this problem could be probably be sufficiently solved via tooling
I'm not sure the benefits of asking node's to calculate this, over tooling
There was a problem hiding this comment.
I agree that this could be solved with tooling relatively easily. This CIP doesn't ask the node to calculate anything, just hold the parameter values.
| - `netChangeLimit`: **positive integer percentage** (e.g., 20 means 20%). May be greater than 100. | ||
| - `netChangePeriod`: **positive integer** number of epochs used as the revenue lookback window (default **73** epochs, ~1 year). | ||
|
|
||
| These parameters are classified as **governance parameters** and are updatable via the standard protocol parameter change governance action. This CIP **recommends** a default value for `netChangePeriod` of **73 epochs** (approximately one year) to align with the Constitution's expected budget cadence; governance may adjust it as needed. The value of `netChangeLimit` is intentionally left to governance and will be selected through the implementation plan. The parameters do not introduce any new ledger enforcement rules for treasury withdrawals or budgets; instead, they are used by the Constitutional Committee to assess constitutionality. |
There was a problem hiding this comment.
The parameters do not introduce any new ledger enforcement rules for treasury withdrawals or budgets; instead, they are used by the Constitutional Committee to assess constitutionality.
Do we have evidence that this is a problem that the Constitutional Committee have?
There was a problem hiding this comment.
Not sure I understand the question. There is no problem here as I understand it. It's just saying that the CC will continue to do something that they already have to do, which is assess constitutionality of proposals according to the NCL.
The only difference is that this CIP would make the NCL a parameter instead of a governance action.
| The CC must determine: | ||
|
|
||
| 1. Treasury revenue over the prior `netChangePeriod` epochs. | ||
| 2. Treasury outflows already **executed** within the same `netChangePeriod` lookback window. |
There was a problem hiding this comment.
If we are already asking CC to compute outflows, I feel they can probably also calculate the NCL and treasury inflows
There was a problem hiding this comment.
Yes, this CIP doesn't meaningfully change what the CC has to do with those calculations.
However, instead of the NCL being a fixed window, it is a rolling window defined by netChangePeriod.
|
|
||
| This CIP introduces two protocol parameters that define the Net Change Limit (NCL): | ||
|
|
||
| - `netChangeLimit`: **positive integer percentage** (e.g., 20 means 20%). May be greater than 100. |
There was a problem hiding this comment.
| - `netChangeLimit`: **positive integer percentage** (e.g., 20 means 20%). May be greater than 100. | |
| - `netChangeLimitMultiplier`: **positive integer percentage** (e.g., 20 means 20%). May be greater than 100. |
maybe a rename on this would be more straight forward
this is based on how I have seen the term NCL used
There was a problem hiding this comment.
I was trying to keep it simple with the existing NCL (both name and acronym). Additionally, keeping the name the same happens to make it map cleanly to the existing NCL terminology in the Constitution.
However I realize that it is a percent instead of a flat number now, so maybe there is some room for discussion on this. Brainstorming some alternate ideas to keep the acronym consistent:
Net Change Level
Net Change Leverage
Normalized Change Limit
Normalized Change Level
Or if we want to drop the acronym we can call it Net Change Percent which seems simpler and more descriptive.
| This CIP introduces two protocol parameters that define the Net Change Limit (NCL): | ||
|
|
||
| - `netChangeLimit`: **positive integer percentage** (e.g., 20 means 20%). May be greater than 100. | ||
| - `netChangePeriod`: **positive integer** number of epochs used as the revenue lookback window (default **73** epochs, ~1 year). |
There was a problem hiding this comment.
| - `netChangePeriod`: **positive integer** number of epochs used as the revenue lookback window (default **73** epochs, ~1 year). | |
| - `prevNetChangePeriod`: **positive integer** number of epochs used as the revenue lookback window (default **73** epochs, ~1 year). |
netChangePeriod implied, to me, that it was referencing as established active Net Change Limit.
Rather than some previous time frame.
(perhaps the way I read it)
There was a problem hiding this comment.
With this CIP the NCL would basically always be established as active, it would just be on a rolling timeframe.
For example if NCL is 73 epochs (1 year) and you submit a proposal today, I would then have to look back one year from today to see how much spending has been allocated during that window.
If you submit another proposal a month later, the window also shifts forward by a month.
In this sense there would never really be a a "previous" period because it would always be rolling.
Co-authored-by: Ryan <ryan.williams@intersectmbo.org>
|
@rphair I could've sworn I typed up a lengthy reply, but it seems to have disappeared somehow. I'll re-write what I was trying to say here.
This is maybe walking the line a bit, but technically this CIP doesn't change anything at all about the human processes, which are all defined in the Constitution and would not need any changes at all. The text of the Constitution states that "A net change limit for the Cardano treasury's balance per period of time must be agreed by the DReps via an on-chain governance action". But it does NOT specify that it must be an Info Action. Technically this CIP could check all those boxes by introducing the
I concede that this still very much on the border of what may be acceptable for a CIP and will defer to the CIP editors to make that decision. Also, I would be happy to help contribute to that Governance CIP and I have some ideas for that, but was waiting on a finalized version of CIP-???? | On-Chain Surveys and Polls before building out a proof-of-concept for what I have in mind. |
|
@Cerkoryn I think there you have the boundary of why a CIP could be considered both acceptable and not acceptable for this issue, and therefore a key consideration to address in a
This is why also above in #1129 (comment) (where I haven't tagged anyone yet) and over in #1131 (comment) which also suggests parameter additions as if they are a purely "technical" thing (where I tagged @katomm @thenic95 as veterans of community parameter discussion) I've invited those with experience in parameter governance to indicate what it would take to establish a safe & generally acceptable best practice for CIP parameter additions. Once we have that, we can apply it to the CIP process immediately and use the same reasoning to fill out the more difficult parts of the pending
On the potential relationship to: ... I've tagged the author again to indicate we're only waiting on his fixing of the metadata table entry before promoting this to candidate (pending other editors' agreement) and continuing review. |
|
@Ryun1 @perturbing (cc @Cerkoryn) I don't want any uncertainty over how to involve other governance groups / processes / stakeholders to delay the review requested in this PR... and in fact discussion at a well-attended meeting might even help overcome any obstacles we face in getting the right review for the governance aspects of the problem. So even though we can't be sure this is an admissible CIP yet, I think it should still be marked for |
rphair
left a comment
There was a problem hiding this comment.
This has been confirmed at the CIP meeting today by the quorum of 2 editors present (cc @Ryun1) based on the reasoning supplied in #937 (comment) ... I've recorded those reasons there to ensure they can become part of the Governance proposal draft somehow since this proposal, as expected, has provided a good litmus test for acceptability as technical governance.
Though there would be a "can of worms" over which human influences might be changed along with the "seat" of the Net Change Limit, these would be common in inclusion of any CIP in any hard fork. But since we don't want to interrupt any discussion of Protocol Parameters in general, @Cerkoryn through the PC has agreed to:
- ask the Parameter Committee if there are any objections to this proposal: especially in considering whether or not it would be a purely "technical" change to adopt this CIP;
- also ask if any of the PC members would please consider reviewing the CIP itself (I've attempted to tag some above but we could try again now more emphatically).
Thanks again @Cerkoryn and please rename the CIP directory to CIP-0173 and update the link in your original posting. 🎉
| --- | ||
| CIP: ? | ||
| Title: Net Change Limit Parameter | ||
| Category: Ledger |
There was a problem hiding this comment.
| Category: Ledger | |
| Category: Governance |
Not much to change in Ledger to make this a reality: so most of the discussion around this will be in the Governance category & so that category will remain applicable as long as it continues to be clear this is only a technical change to the data structure used in Cardano governance.
There was a problem hiding this comment.
Based on Parameter Committee feedback, I am contemplating the idea of changing this CIP to let the NCL be enforced by the ledger instead of the Constitutional Committee. I think in that case it would still belong in the Ledger category if I am not mistaken? More info here.
There was a problem hiding this comment.
yes @Cerkoryn I think it would indeed revert to Ledger in that case: since we always try to target the CIP category to a product of 1) who needs to do the most work to achieve that improvement * 2) who most needs to provide review to establish feasibility of a CIP or completeness of a CPS. (cc @Ryun1 @perturbing to concur)
A confirmed plan to enforce an NCL parameter in the Ledger would indicate the Ledger category just as much as for CIP-1694 itself (which I believe should still remain outside the scope of the new Governance category by the same reasoning). — cc @lehins
In the meantime I'll decategorise this now (i.e. the GitHub label), to force us to re-assign the category after that decision is made.
|
|
||
| ## Abstract | ||
|
|
||
| The Cardano Constitution requires treasury withdrawals and budgets to respect a net change limit for the treasury balance. Today, that limit is set as a periodic governance value that expires, forcing repeated proposals and votes. This CIP converts the Net Change Limit (NCL) into two updatable protocol parameters: `netChangeLimit` (a percentage) and `netChangePeriod` (an epoch lookback count). Together, they define an adaptive cap based on recent treasury revenue: |
There was a problem hiding this comment.
@Cerkoryn, as noted from the meeting, we also need to classify which Parameter group this is in since it would have an effect on the boundaries of how the parameters can be changed... I recall something like the choices being "economic" vs. "technical"? Please give us more details about that when you're ready & got all the necessary background information.
There was a problem hiding this comment.
Seems like the parameter committee thinks the governance parameter category would suit this CIP the best in its current form. I posted more info about it here.
|
Thanks for this initiative. NCL is a thorn in Governance in general and this would alleviate some of this. Assuming we would nevertheless introduce these parameters, I have a question on the formula. I might not understand it at the moment.. In my views, a better formula would be: |
@ptrdsh perhaps I should clarify better in the CIP, but "revenue" is defined as fees + reserve emissions, not just fees alone. So as emissions dwindle, revenue dwindles, and the ability to spend more also dwindles. Similarly, increasing fees via more usage would allow for greater spending (if we wanted it) which incentivizes exactly the right behavior for driving usage to the chain. For reference I built a flowchart on Cexplorer that calculated the 2025 revenue the way I described it available here. You can see via mouseover that the treasury revenue (inflows) for 2025 was approximately 283M ADA. If we were to set the NCL at 100% then this would be the spending limit which is right in the ballpark of where the spending limit is being proposed anyways. |
|
@rphair comments from the Parameters committee are generally that this CIP is a "Good approach for tomorrow, but not a good approach for the day-after-tomorrow." It was recommended that perhaps this CIP be re-worked to allow the ledger to enforce the withdrawal limit, rather than having to rely solely on the CC as an enforcement mechanism. This would be a bit of extra implementation work, but would alleviate some pressure on the CC and allow us to lean into the "code is law" ethos of Cardano. It was also recommended that if these parameters are introduced they would best fit in the governance category with a 75% threshold requirement for dReps to change it. In any case, I am happy to entertain alternative versions of this CIP depending on feedback. @ptrdsh @kevinhammond Please feel free to add if I missed anything, thank you. |
aahhh.. yeah that explains a lot. was confused that noone else flagged this before me. Then indeed its similar to my formula and decays sustainably. Yours piggybacks on the SPO incentives plus it self-references YoY, which I have to wrap my head around first. I think I like it, but my gut says caution.. should I muster up some smart thoughts, Ill let you know. I havent seen the Sankey Diagram on cexplorer yet - holy shit its nice! 🤯 👏 Going a few sentences deeper into
than just the "save CC some time" argument: |
Co-authored-by: Robert Phair <rphair@cosd.com>
Co-authored-by: Robert Phair <rphair@cosd.com>
|
|

I think that this is an incredibly intuitive but much needed CIP that will substantially improve governance fatigue.
It is quite short and simple, but I am happy to take feedback and iterate on it until it satisfies community expectations.
(rendered)