From 8648f4800e5484b5cd4e107e93cc7dd4b897f882 Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 3 Oct 2018 08:27:39 +0100 Subject: [PATCH] Rework the constants for readability --- specs/casper_sharding_v2.1.md | 56 ++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/specs/casper_sharding_v2.1.md b/specs/casper_sharding_v2.1.md index af4793862..457fb8a62 100644 --- a/specs/casper_sharding_v2.1.md +++ b/specs/casper_sharding_v2.1.md @@ -34,27 +34,43 @@ Note: the python code at https://github.com/ethereum/beacon_chain and [an ethres * **Dynasty** - the number of dynasty transitions that have happened in a given chain since genesis * **Cycle** - a span of blocks during which all validators get exactly one chance to make an attestation (unless a dynasty transition happens inside of one) * **Finalized**, **justified** - see Casper FFG finalization here: https://arxiv.org/abs/1710.09437 +* **Withdrawal period** - number of slots between a validator exit and the validator slot being withdrawable +* **Genesis time** - the Unix time of the genesis beacon chain block at slot 0 ### Constants -* **SHARD_COUNT** - a constant referring to the number of shards. Currently set to 1024. -* **DEPOSIT_SIZE** - 32 ETH, or 32 * 10\*\*18 wei -* **MAX_VALIDATOR_COUNT** - 222 = 4194304 # Note: this means that up to ~134 million ETH can stake at the same time -* **GENESIS_TIME** - time of beacon chain startup (slot 0) in seconds since the Unix epoch -* **SLOT_DURATION** - 16 seconds -* **CYCLE_LENGTH** - 64 slots -* **MIN_DYNASTY_LENGTH** - 256 slots -* **MIN_COMMITTEE_SIZE** - 128 (rationale: see recommended minimum 111 here https://vitalik.ca/files/Ithaca201807_Sharding.pdf) -* **SQRT\_E\_DROP\_TIME** - a constant set to reflect the amount of time it will take for the quadratic leak to cut nonparticipating validators' deposits by ~39.4%. Currently set to 2**20 seconds (~12 days). -* **BASE\_REWARD\_QUOTIENT** - 1/this is the per-slot interest rate assuming all validators are participating, assuming total deposits of 1 ETH. Currently set to `2**15 = 32768`, corresponding to ~3.88% annual interest assuming 10 million participating ETH. -* **WITHDRAWAL_PERIOD** - number of slots between a validator exit and the validator slot being withdrawable. Currently set to `2**19 = 524288` slots, or `2**23` seconds ~= 97 days. -* **MAX\_VALIDATOR\_CHANGE\_QUOTIENT** - a maximum of 1/x validators can change during each dynasty. Currently set to 32. -* **PENDING\_LOG\_IN** = 0 (status code) -* **LOGGED\_IN** = 1 (status code) -* **PENDING\_EXIT** = 2 (status code) -* **PENDING\_WITHDRAW** = 3 (status code) -* **PENALIZED** = 128 (status code) -* **WITHDRAWN** = 4 (status code) +| Constant | Value | Unit | Approximation | +| --- | --- | :---: | - | +| `SHARD_COUNT` | 2**10 (= 1,024)| shards | +| `DEPOSIT_SIZE` | 2**5 (= 32) | ETH | +| `MIN_COMMITTEE_SIZE` | 2**7 (= 128) | validators | +| `MAX_VALIDATOR_COUNT` | 2**22 ( = 4,194,304) | validators | +| `GENESIS_TIME` | **TBD** | seconds | +| `SLOT_DURATION` | 2**4 (= 16) | seconds | +| `CYCLE_LENGTH` | 2**6 (= 64) | slots | ~17 minutes | +| `MIN_DYNASTY_LENGTH` | 2**8 (= 256) | slots | ~1.1 hours | +| `SQRT_E_DROP_TIME` | 2**16 (= 65,536) | slots | ~12 days | +| `WITHDRAWAL_PERIOD` | 2**19 (= 524,288) | slots | ~97 days | +| `BASE_REWARD_QUOTIENT` | 2**15 (= 32,76) | — | +| `MAX_VALIDATOR_CHURN_QUOTIENT` | 2**5 (= 32) | — | + +**Notes** + +* At most `MAX_VALIDATOR_COUNT * DEPOSIT_SIZE` (~134 million ETH) can be staked. +* The `SQRT_E_DROP_TIME` constant is the amount of time it takes for the quadratic leak to cut deposits of non-participating validators by ~39.4%. +* The `BASE_REWARD_QUOTIENT` constant is the per-slot interest rate assuming all validators are participating, assuming total deposits of 1 ETH. It corresponds to ~3.88% annual interest assuming 10 million participating ETH. +* At most `1/MAX_VALIDATOR_CHURN_QUOTIENT` of the validators can change during each dynasty. + +**Status codes** + +| Status code | Value | +| - | :-: | +| `PENDING_LOG_IN` | `0` | +| `LOGGED_IN` | `1` | +| `PENDING_EXIT` | `2` | +| `PENDING_WITHDRAW` | `3` | +| `WITHDRAWN` | `4` | +| `PENALIZED` | `128` | ### PoW chain changes @@ -474,7 +490,7 @@ Let `time_since_finality = block.slot - last_finalized_slot`, and let `B` be the * `total_deposits = sum([v.balance for i, v in enumerate(validators) if i in get_active_validator_indices(validators, current_dynasty)])` and `total_deposits_in_ETH = total_deposits // 10**18` * `reward_quotient = BASE_REWARD_QUOTIENT * int_sqrt(total_deposits_in_ETH)` (1/this is the per-slot max interest rate) -* `quadratic_penalty_quotient = (SQRT_E_DROP_TIME / SLOT_DURATION)**2` (after D slots, ~D2/2 divided by this is the portion lost by offline validators) +* `quadratic_penalty_quotient = SQRT_E_DROP_TIME**2` (after D slots, ~D2/2 divided by this is the portion lost by offline validators) For each slot `S` in the range `last_state_recalculation - CYCLE_LENGTH ... last_state_recalculation - 1`: @@ -532,7 +548,7 @@ def change_validators(validators): # The maximum total wei that can deposit+withdraw max_allowable_change = max( DEPOSIT_SIZE * 2, - total_deposits // MAX_VALIDATOR_CHANGE_QUOTIENT + total_deposits // MAX_VALIDATOR_CHURN_QUOTIENT ) # Go through the list start to end depositing+withdrawing as many as possible total_changed = 0