Skip to content

Commit

Permalink
CIP-0059? | Terminology Surrounding Core Features (#274)
Browse files Browse the repository at this point in the history
* CIP for names surrounding features

* feature table

* disambiguate protocol version from other schemes

* rename as CIP 59 and progress to Active

And also re-title as Terminology Surrounding Core Features
  • Loading branch information
JaredCorduan authored Jul 5, 2022
1 parent fd7faa5 commit f4c7631
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 0 deletions.
111 changes: 111 additions & 0 deletions CIP-0059/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
CIP: 59
Title: Terminology Surrounding Core Features
Authors: Jared Corduan <[email protected]>
Status: Active
Type: Informational
Created: 2022-06-09
License: CC-BY-4.0
---

## Simple Summary / Abstract

This CIP seeks to clarify the language around groups of features.
At the very least, it provides some history.

## Motivation / History

When @CharlesHoskinson conceived of Cardano, he had a vision for what features the network would support.
This vision is still present on the [Cardano roadmap website](https://roadmap.cardano.org).
In particular, the features are grouped into "phases", which are mostly named after poets (Goguen is the exception).
The word "era" is used interchangeably with "phases" on the roadmap.

The word "era", however, has been muddled by an implementation detail in the Cardano ledger.
The Shelley phase was implemented as an entire re-write of the code from the Byron phase.
While the consensus layer for the Shelley phase was written with an abstraction in place for the ledger,
the ledger layer was not written with any abstractions to make future phases possible.
Upon starting into the Goguen phase, the ledger team retroactively introduce a notion of "era"
into the ledger code, and deemed the Shelley features "the Shelley era".
In hindsight, however, the word "era" in unfortunate, since the Goguen phase was completed in the ledger
by what was called "the Allegra era, the Mary era, the Alonzo era, and the Babbage era".
The names Allegra and Mary were chosen for their connection to the poet Percy Shelley,
and were only intended to be used as
[variable names](https://github.com/input-output-hk/cardano-ledger/blob/1cbf1fc2bb005a8206e5b5a7cdf44d35baaca455/eras/shelley-ma/impl/src/Cardano/Ledger/Allegra.hs#L40)
for a very specific abstraction used in the ledger code.
(The story is even a bit more confusing, since the Allegra and Mary era share a lot of code
and are specified together in the "Shelley-MA
[specification](https://hydra.iohk.io/job/Cardano/cardano-ledger/specs.shelley-ma/latest/download-by-type/doc-pdf/shelley-ma).
The letters "MA" can hilariously refer to both "Mary Allegra" and "Multi-Assets".)
How did we then go from poets to Alonzo?
Recall that "Goguen" was the only non-poet named in the phases on the Cardano roadmap.
We found it fitting, therefore, to name the ledger era which introduced Plutus
after the person who invented the lambda calculus
(Plutus Core uses a variant of [system F](https://en.wikipedia.org/wiki/System_F).).
Moreover, going forward, we decided to use names in A, B, C, ... order, names coming from
other people who walk the line between mathematics and computer science.
One lack of consistency to notice is that we have used both first and last names.
The inconsistency was mostly driven by the desire to find short and memorable names.

Another complication to the story is the notion of "intra-era hard forks".
A new era _must_ be introduced with a hard fork, but the ledger can also
change semantics during a controlled hard fork with another mechanism, namely
an intra-era hard fork.
This is an implementation detail which involves bumping the major protocol version
but not creating a new ledger era.
The Alonzo era experienced an intra-era hard fork when going from major protocol version 5 to 6.

Yet another complication stems from the named releases.
We chose to honor the late Cardano community member and Bulgarian mathematician Vasil Dabov
by naming a release date after him.
The ledger era after the Alonzo era was named Babbage.
Babbage is a feature set, Vasil is a release date which ushered in the Babbage era.

Lastly, it is important to understand that not all of the semantic changes to the Cardano network involve the ledger,
though the changes to the ledger are often the most user-facing.
Changes to the consensus protocol or the networking layer may also involve a hard fork.
Moreover, there is an abstraction that sits between the consensus and ledger layers,
which we have named the "protocol" (a regrettably vague name).
The distinction between the ledger protocols and the ledger eras
correspond roughly to how block headers are validated (protocol) versus
how block bodies are validated (era).
The Shelley era used the "transitional Praos" protocol (or TPraos for short).
It consisted of Praos together with a transition system to move away from Ouroboros-BFT.
The Babbage era replaced TPraos with Praos.

A table of all the features, as of the time this CIP was submitted, can be found [here](feature-table.md).

Note that the protocol version mentioned above is unrelated to the node-to-node and node-to-client protocol versions.
The consensus layer maintains a versioning scheme for the node queries which does not necessarily
align with the protocol version described in this CIP.

Note also that the protocol version present inside of each block header indicates the maximum supported protocol version
that the block producer is capable of supporting (see section 13, Software Updates, of the
[Shelley ledger specification](https://hydra.iohk.io/job/Cardano/cardano-ledger/shelleyLedgerSpec/latest/download-by-type/doc-pdf/ledger-spec)).

## Specification

Let us use the following language:

* **Phase** - A phase in Cardano is a high level collection of features described on the Cardano roadmap.
* **Ledger Era** - A ledger era (or era for short if there is no confusion) in Cardano is a collection of ledger features introduced at a hard fork. Moreover, starting with the Alonzo era, they will be named after mathematicians and computer scientists (preferably both!) in A, B, C, ... ordering. Some letters might prove challenging.
* **Intra-era Hardfork** - An intra-era hard fork in Cardano is a small and focused semantic change to the ledger which requires a hard fork.
* **Consensus mechanism** - A consensus mechanism in Cardano is a collection of consensus features introduced at a hard fork. Historically, these have had the name "Ouroboros" in them.
* **Ledger Protocol** - A ledger protocol in Cardano is a collection of ledger features sitting between the consensus layer and the ledger layer, roughly characterized by block header validation.
* **Release Dates** - When we are confident about the release of a new features, we can chose to honor Cardano community members by naming a date after them.


## Rationale

If we can agree to common language, it will greatly improve communication among ourselves and also with new community members.

## Backwards compatibility

Since this is an issue of language, we will strive to use consistent language going forward, and we can correct misalignment when we find it.

## Path to Active

We will use this CIP as our common language going forward.

## Copyright

This CIP is licensed under Apache-2.0
12 changes: 12 additions & 0 deletions CIP-namesSurroundingFeatures/feature-table.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Cardano Features

| Date | Phase | Era | Slot Number | Epoch Number | Protocol Version | Ledger Protocol | Consensus Mechanism | Notes |
| ------- | ------- | -------:| -----------:| ------------:| ----------------:| ---------------:| -------------------:| ------------------:|
| 2017/09 | Byron | Byron | 0 | 0 | 0,0 | - | Ouroboros Classic | |
| 2020/02 | Byron | Byron | 3801600 | 176 | 1,0 | - | Ouroboros BFT | |
| 2020/07 | Shelley | Shelley | 4492800 | 208 | 2,0 | TPraos | Ouroboros Praos | |
| 2020/12 | Goguen | Allegra | 16588800 | 236 | 3,0 | TPraos | Ouroboros Praos | |
| 2021/03 | Goguen | Mary | 23068800 | 251 | 4,0 | TPraos | Ouroboros Praos | |
| 2021/09 | Goguen | Alonzo | 39916975 | 290 | 5,0 | TPraos | Ouroboros Praos | |
| 2021/10 | Goguen | Alonzo | 43372972 | 298 | 6,0 | TPraos | Ouroboros Praos | intra-era hardfork |
| | Goguen | Babbage | | | 7,0 | Praos | Ouroboros Praos | Vasil HF |

0 comments on commit f4c7631

Please sign in to comment.