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-0059? | Terminology Surrounding Core Features #274

Merged
Merged
Show file tree
Hide file tree
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
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 |
Copy link

@rdlrt rdlrt Jun 27, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be worth mentioning:

  • Protocol version is not the same as Network Protocol Version? Not sure if it's something that can be mapped in this table, probably not because it's from networking layer between nodes?
  • Perhaps a condition with link at the bottom to clarify about Protocol Versions in block header signify not the Protocol Version itself, but the maximum supported ledger-protocol-version for node?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • indeed, the "protocol version" is separate from the node-to-node and node-to-client versions. I'm happy to make a note of this, but I'd need help lining the node-to-x versions with this table (and indeed, it may not even line up at all).
  • will do!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rdlrt I added a commit to address these two points.

| ------- | ------- | -------:| -----------:| ------------:| ----------------:| ---------------:| -------------------:| ------------------:|
| 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 |