Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CIP-0055? | Babbage Era Protocol Parameters #265

Merged
merged 4 commits into from
Jun 29, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions CIP-0055/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
CIP: 55
Title: Babbage Era Protocol Parameters
Authors: Jared Corduan <jared.corduan@iohk.io>
Status: Proposed
Type: Informational
Created: 2022-05-19
License: CC-BY-4.0
Requires: CIP-0028
---

## Simple Summary/Abstract

This CIP extends CIP-0028 to introduce a change to one of the Alonzo protocol parameters in the Babbage era, namely `lovelacePerUTxOWord`.
We propose to have this updateable parameter be based on bytes instead of words (eight bytes).
Additionally, two Alonzo era protocol parameters were removed, namely the decentralization parameter and the extra entropy parameter.

## Motivation

### Lovelace Per UTxO Byte

Since the Shelley era, there has been an minimum number of lovelace requirement for every unspent transaction output.
This requirement acts like a deposit, guarding the network from dust (the proliferation of small-valued unspent transaction outputs).
Initially it was a constant value, since the Shelley era UTxO were simple and quite uniform.
Starting in the Mary era, however, the constant value was replace with a
[formula](https://cardano-ledger.readthedocs.io/en/latest/explanations/min-utxo-mary.html)
to account for the variability in outputs that contained multi-assets.
The formula was [changed again](https://cardano-ledger.readthedocs.io/en/latest/explanations/min-utxo-alonzo.html)
in the Alonzo era.
Both the Mary and the Alonzo era formulas provide an upper bound on the size in memory of an unspent transaction output in the Haskell implementation.
We would like to simplify the formula to instead count the number of bytes in the CBOR serialization.

### Transitional Praos

Two Alonzo era protocol parameters need to be removed for the Babbage era, since they relate to `TPraos`.
Transitional Praos (named `TPraos` in the code base) is the addition of two features to
[Praos](https://iohk.io/en/research/library/papers/ouroboros-praosan-adaptively-securesemi-synchronous-proof-of-stake-protocol/),
which were added to provide a smooth transition from
[Ouroboros-BFT](https://iohk.io/en/research/library/papers/ouroboros-bfta-simple-byzantine-fault-tolerant-consensus-protocol).
In particular, Transitional Praos included an overlay schedule which could be tuned by the `d` parameter
(`d == 1` means that all the blocks are produced by the BFT nodes, `d == 0` means that none of them are).
It also included a way of injecting extra entropy into the epoch nonce.
The extra entropy feature was used precisely once, and was
[explained wonderfully](https://iohk.io/en/blog/posts/2021/03/29/the-secure-transition-to-decentralization)
by one of the original authors of the Praos paper.

The Babbage era removes both of the "transitional" features of TPraos, rendering the decentralization parameter
and the extra entropy parameter useless.


## Specification

The removal of the decentralization parameter and the extra entropy parameter is self explanatory.
We now describe the specifacion of the `coinsPerUTxOByte` parameter.
rphair marked this conversation as resolved.
Show resolved Hide resolved


### Rename

The name of the protocol parameter is actually `coinsPerUTxOWord` in the Haskell implementation.
It should be renamed to `coinsPerUTxOByte`.

### Translation from the Alonzo era to the Babbage era

At the moment that the hard fork combinator translates the Alonzo era ledger state to the Babbage era,
the current value of `coinsPerUTxOWord` will be converted to

```
⌊ coinsPerUTxOWord / 8 ⌋
```

### The new minimum lovelace calculation

In the Babbage era, unspent transaction outputs will be required to contain _at least_

```
|serialized_output| * coinsPerUTxOByte
```

many lovelace.

## Rationale

We would like the formula for the minimum lovelace in a unspent transaction output
be simpler and easier to reason about by all users of the Cardano network, while at
the same time accounting for the size of the output.

## Backwards compatibility

The [translation](#translation-from-the-alonzo-era-to-the-babbage-era) section
explains how we will transition from the `coinsPerUTxOWord` parameter to the `coinsPerUTxOByte` parameter.
Starting in the Babbage era, update proposals that want to modify `coinsPerUTxOByte` must bear in mind
that the measurement is in bytes, not words.

The two protocol parameters that have been removed, `d` and `extraEntropy`, can no longer be used
in protocol parameter updates.

## Path to Active

As of the time of this writing, this CIP has been implemented, but not release, in the Cardano ledger.

## Copyright

This CIP is licensed under Apache-2.0