ethereum / consensus-specs

Ethereum Proof-of-Stake Consensus Specifications
Creative Commons Zero v1.0 Universal
3.56k stars 970 forks source link

Proposed conventions for talking about multiples of epochs #1890

Open vbuterin opened 4 years ago

vbuterin commented 4 years ago

[Edited to reflect comments below]

I propose as a convention we abuse terms for talking about length of time to talk about particular powers of two of epoch lengths; this will make it easier to think about time within the protocol.

Note: 1 epoch = 384 seconds = 6.4 minutes

Unit Epoch count Actual length
Hour (or "ethereum hour" to disambiguate) 2**3 = 8 ~51 minutes
Day 2**8 = 256 ~27.3 hours
Week 2**11 = 2048 ~9.1 days
Month 2**13 = 8192 ~36.4 days
Year 2**16 = 65536 ~291 days

Note that the fact that most of these are "slightly too long" is arguably helpful for a possible future scenario where we cut slot times from 12 to 8 seconds once it proves safe. If slot duration drops to 8 seconds, hour and year would have their epoch count doubled (and become ~68 minutes and ~388 days, respectively) and the other units would keep their current epoch count (ethereum day ~= 18.2 Earth hours, ethereum week ~= 6.1 Earth days, ethereum month ~= 24 Earth days).

adiasg commented 4 years ago

It also makes sense to prepend 'epoch' or 'e' to these to reduce ambiguity when the context isn't clear.

Also serves great as units - eHour/eH, eDay/eD, etc. Example usage: this smart contract allows for withdrawal only after 2 eWeeks.

dankrad commented 4 years ago

It would be nice if the custody period (2^14 = 16,384 epochs = 73 days) would fit into this. It's annoying to call it "8 weeks" when it's actually a bit more than 10 weeks long. I guess the best name right now would be "short quarter"?

vbuterin commented 4 years ago

I suppose? Though I do think if we take @adiasg's suggestion and call them eWeeks then saying a custody period is 8 eWeeks is not so bad.

(Or 2 eMonths)

dankrad commented 4 years ago

I kind of dislike the proposal "epoch hour/eHour" as a physicist, since when two units are combined as a word, it conventionally means they are multiplied (e.g. kilowatt hours). And an epoch is clearly a unit. Something more like the "kibibyte" approach would be more appropriate. In fact, this is pretty much the same idea of approximating units with powers of two. Suggestions:

vbuterin commented 4 years ago

I actually didn't intepret eHour as meaning "epoch hour", I interpreted it as "ethereum hour" :rofl:

We have regular miles and nautical miles, and now regular hours and ethereum hours.

dankrad commented 4 years ago

I'm happy with Ethereum hour :)

MicahZoltu commented 4 years ago

We have regular miles and nautical miles, and now regular hours and ethereum hours.

And this is something that causes no end of confusion, mistakes, bugs, etc. Redefining terms to mean something subtlety different is just asking for miscommunication, errors, etc. so I advocate very strongly against this proposal.

Language is a tool that allows humans to compress a complex thoughts into a very low bandwidth communication channel (sound waves). The human brain is highly optimized to utilized this channel for decoding and storage. When a term that has a hot path in the brain (e.g., the listener knows and is familiar with it) is redefined to mean something different, it suddenly becomes very difficult to think about the thing easily, especially for a newcomer.

Tl;DR: Use an appropriate term, or make up a new one if you can't figure it out an appropriate term. Don't redefine existing words, especially when those words need to retain their existing meaning within the topic being discussed.


What exactly is the problem with just saying "eight epochs"?

dankrad commented 4 years ago

What exactly is the problem with just saying "eight epochs"?

There is no problem in saying eight epochs. However, if it's 500 or 5000 epochs, you have to think every time how long that is. It is a day, a week, or a year? For many minor technical points, that might not matter. For example, how long is a custody period? That isn't too relevant to the typical staker. However, for example for challenge periods, it suddenly really matters in human terms, because as a staking operator, I really want to make sure I can never be offline for longer than that period. It thus helps having terms that make this clear, and at least to me, being able to talk about an "Ethereum week" or "Ethereum quarter" does that much better than "2^11 epochs".

MicahZoltu commented 4 years ago

Why not just say "about a week" or "about a month" in that case? That way it is clear to the newbie listener/reader that you are talking about a humanized order of magnitude, not an exact value, and there isn't a risk that the person doesn't fail to realize that custom jargon is being used.

mratsim commented 4 years ago

Every time I encounter non-standard units of time or distance:

It's always a struggle to reframe those in what actually matters, and this is also the same for non-metric units like feet, miles, ounces, pounds.

Currencies are a typical example as well, 80% of the cases you reframe to your currency of reference, i.e. the one you are using daily.

Eth hours/days/months is more ergonomic to use for people as they have a common scale reference in the name. Regarding the month unit, it's inaccurate anyway, you have lunar months, you have 28, 29, 30 and 31 days months. Having an EthMonth is way easier to grasp in terms of timeline than 8192 epochs.

MicahZoltu commented 4 years ago

I would be much less opposed to this if the terms were not cribbed directly from English. For example, eears, eonths, eeks, eays, eours, einutes, eeconds would at least make it abundantly clear to any outside listener/reader that they need to go look up what those terms meant, but would allow for standardized order of magnitude values in communication. My problem with eth-month or ethereum-month is that I can almost guarantee that people will shorthand it to month and confusion will be introduced.

vbuterin commented 4 years ago

Having an EthMonth is way easier to grasp in terms of timeline than 8192 epochs.

The goal is exactly this. It's hard to remember what 256 epochs or 2048 epochs or 65536 epochs actually means, so it makes sense to have a unit to represent these larger quantities that people can naturally understand. Having a name with a bit more distance to existing terms than "ethereum day" / "ethereum month" could be reasonable.

For example, eears, eonths, eeks, eays, eours, einutes, eeconds would at least make it abundantly clear to any outside listener/reader

An "eek" for the 9 day duration is not that bad!

nrhirsch commented 4 years ago

Hours and days, years are based on planetary/solar movements of our earth. If Ethereum wants to make some time measure then I think it should have its own name for such things, not to use the ones proposed. I’m a proponent of ethereum and a miner but those names are a little presumptuous.