-
Notifications
You must be signed in to change notification settings - Fork 318
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
KtorZ
merged 4 commits into
cardano-foundation:master
from
JaredCorduan:cip-names-surrounding-features
Jul 5, 2022
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Might be worth mentioning:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
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.