Merge branch 'dankrad-custody-256bit' into dankrad-custody-0.01bit
This commit is contained in:
commit
a0175ca1b3
|
@ -32,4 +32,4 @@ Each preset is a key-value mapping.
|
||||||
|
|
||||||
Presets may contain comments to describe the values.
|
Presets may contain comments to describe the values.
|
||||||
|
|
||||||
See [`mainnet.yaml`](./mainnet.yaml) for a complete example.
|
See [`mainnet_phase0.yaml`](./mainnet_phase0.yaml) for a complete example.
|
||||||
|
|
|
@ -151,75 +151,9 @@ DOMAIN_DEPOSIT: 0x03000000
|
||||||
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
||||||
DOMAIN_SELECTION_PROOF: 0x05000000
|
DOMAIN_SELECTION_PROOF: 0x05000000
|
||||||
DOMAIN_AGGREGATE_AND_PROOF: 0x06000000
|
DOMAIN_AGGREGATE_AND_PROOF: 0x06000000
|
||||||
|
<<<<<<< HEAD:configs/mainnet.yaml
|
||||||
# Phase 1
|
# Phase 1
|
||||||
DOMAIN_SHARD_PROPOSAL: 0x80000000
|
DOMAIN_SHARD_PROPOSAL: 0x80000000
|
||||||
DOMAIN_SHARD_COMMITTEE: 0x81000000
|
DOMAIN_SHARD_COMMITTEE: 0x81000000
|
||||||
DOMAIN_LIGHT_CLIENT: 0x82000000
|
DOMAIN_LIGHT_CLIENT: 0x82000000
|
||||||
DOMAIN_CUSTODY_BIT_SLASHING: 0x83000000
|
DOMAIN_CUSTODY_BIT_SLASHING: 0x83000000
|
||||||
|
|
||||||
|
|
||||||
# Phase 1: Upgrade from Phase 0
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
PHASE_1_FORK_VERSION: 0x01000000
|
|
||||||
# [STUB]
|
|
||||||
PHASE_1_GENESIS_SLOT: 32
|
|
||||||
INITIAL_ACTIVE_SHARDS: 64
|
|
||||||
|
|
||||||
# Phase 1: General
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
# 2**10` (= 1024)
|
|
||||||
MAX_SHARDS: 1024
|
|
||||||
# 2**3 (= 8) | online epochs | ~51 min
|
|
||||||
ONLINE_PERIOD: 8
|
|
||||||
# 2**7 (= 128)
|
|
||||||
LIGHT_CLIENT_COMMITTEE_SIZE: 128
|
|
||||||
# 2**8 (= 256) | epochs | ~27 hours
|
|
||||||
LIGHT_CLIENT_COMMITTEE_PERIOD: 256
|
|
||||||
# 2**18 (= 262,144)
|
|
||||||
SHARD_BLOCK_CHUNK_SIZE: 262144
|
|
||||||
# 2**2 (= 4)
|
|
||||||
MAX_SHARD_BLOCK_CHUNKS: 4
|
|
||||||
# 3 * 2**16` (= 196,608)
|
|
||||||
TARGET_SHARD_BLOCK_SIZE: 196608
|
|
||||||
# Note: MAX_SHARD_BLOCKS_PER_ATTESTATION is derived from the list length.
|
|
||||||
SHARD_BLOCK_OFFSETS: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
|
|
||||||
# len(SHARD_BLOCK_OFFSETS)
|
|
||||||
MAX_SHARD_BLOCKS_PER_ATTESTATION: 12
|
|
||||||
# 2**14 (= 16,384) Gwei
|
|
||||||
MAX_GASPRICE: 16384
|
|
||||||
# 2**3 (= 8) Gwei
|
|
||||||
MIN_GASPRICE: 8
|
|
||||||
# 2**3 (= 8)
|
|
||||||
GASPRICE_ADJUSTMENT_COEFFICIENT: 8
|
|
||||||
|
|
||||||
|
|
||||||
# Phase 1: Custody Game
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
|
|
||||||
# 1/1024 chance of custody bit 1
|
|
||||||
CUSTODY_PROBABILITY_EXPONENT: 10
|
|
||||||
|
|
||||||
# Time parameters
|
|
||||||
# 2**1 (= 2) epochs, 12.8 minutes
|
|
||||||
RANDAO_PENALTY_EPOCHS: 2
|
|
||||||
# 2**15 (= 32,768) epochs, ~146 days
|
|
||||||
EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS: 32768
|
|
||||||
# 2**14 (= 16,384) epochs ~73 days
|
|
||||||
EPOCHS_PER_CUSTODY_PERIOD: 16384
|
|
||||||
# 2**11 (= 2,048) epochs, ~9 days
|
|
||||||
CUSTODY_PERIOD_TO_RANDAO_PADDING: 2048
|
|
||||||
# 2**15 (= 32,768) epochs, ~146 days
|
|
||||||
MAX_CHUNK_CHALLENGE_DELAY: 32768
|
|
||||||
|
|
||||||
# Max operations
|
|
||||||
# 2**8 (= 256)
|
|
||||||
MAX_CUSTODY_KEY_REVEALS: 256
|
|
||||||
MAX_EARLY_DERIVED_SECRET_REVEALS: 1
|
|
||||||
MAX_CUSTODY_CHUNK_CHALLENGES: 4
|
|
||||||
MAX_CUSTODY_CHUNK_CHALLENGE_RESP: 16
|
|
||||||
MAX_CUSTODY_SLASHINGS: 1
|
|
||||||
|
|
||||||
# Reward and penalty quotients
|
|
||||||
EARLY_DERIVED_SECRET_REVEAL_SLOT_REWARD_MULTIPLE: 2
|
|
||||||
# 2**8 (= 256)
|
|
||||||
MINOR_REWARD_QUOTIENT: 256
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
# Mainnet preset - phase 1
|
||||||
|
|
||||||
|
|
||||||
|
# phase1-fork
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
PHASE_1_FORK_VERSION: 0x01000000
|
||||||
|
# [STUB]
|
||||||
|
PHASE_1_GENESIS_SLOT: 32
|
||||||
|
INITIAL_ACTIVE_SHARDS: 64
|
||||||
|
|
||||||
|
|
||||||
|
# beacon-chain
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# Misc
|
||||||
|
# 2**10 (= 1,024)
|
||||||
|
MAX_SHARDS: 1024
|
||||||
|
# 2**7 (= 128)
|
||||||
|
LIGHT_CLIENT_COMMITTEE_SIZE: 128
|
||||||
|
# 2**3 (= 8)
|
||||||
|
GASPRICE_ADJUSTMENT_COEFFICIENT: 8
|
||||||
|
|
||||||
|
# Shard block configs
|
||||||
|
# 2**20 (= 1048,576) bytes
|
||||||
|
MAX_SHARD_BLOCK_SIZE: 1048576
|
||||||
|
# 2**18 (= 262,144) bytes
|
||||||
|
TARGET_SHARD_BLOCK_SIZE: 262144
|
||||||
|
# Note: MAX_SHARD_BLOCKS_PER_ATTESTATION is derived from the list length.
|
||||||
|
SHARD_BLOCK_OFFSETS: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
|
||||||
|
# len(SHARD_BLOCK_OFFSETS)
|
||||||
|
MAX_SHARD_BLOCKS_PER_ATTESTATION: 12
|
||||||
|
# 2**12 (= 4,096)
|
||||||
|
BYTES_PER_CUSTODY_CHUNK: 4096
|
||||||
|
# ceillog2(MAX_SHARD_BLOCK_SIZE // BYTES_PER_CUSTODY_CHUNK)
|
||||||
|
CUSTODY_RESPONSE_DEPTH: 8
|
||||||
|
|
||||||
|
# Gwei values
|
||||||
|
# 2**14 (= 16,384) Gwei
|
||||||
|
MAX_GASPRICE: 16384
|
||||||
|
# 2**3 (= 8) Gwei
|
||||||
|
MIN_GASPRICE: 8
|
||||||
|
|
||||||
|
# Time parameters
|
||||||
|
# 2**3 (= 8) | online epochs
|
||||||
|
ONLINE_PERIOD: 8
|
||||||
|
# 2**8 (= 256) | epochs
|
||||||
|
LIGHT_CLIENT_COMMITTEE_PERIOD: 256
|
||||||
|
|
||||||
|
# Max operations per block
|
||||||
|
# 2**20 (= 1,048,576)
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGE_RECORDS: 1048576
|
||||||
|
|
||||||
|
# Domain types
|
||||||
|
DOMAIN_SHARD_PROPOSAL: 0x80000000
|
||||||
|
DOMAIN_SHARD_COMMITTEE: 0x81000000
|
||||||
|
DOMAIN_LIGHT_CLIENT: 0x82000000
|
||||||
|
# custody-game spec
|
||||||
|
DOMAIN_CUSTODY_BIT_SLASHING: 0x83000000
|
||||||
|
|
||||||
|
|
||||||
|
# custody-game
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# Time parameters
|
||||||
|
# 2**1 (= 2) epochs, 12.8 minutes
|
||||||
|
RANDAO_PENALTY_EPOCHS: 2
|
||||||
|
# 2**15 (= 32,768) epochs, ~146 days
|
||||||
|
EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS: 32768
|
||||||
|
# 2**14 (= 16,384) epochs ~73 days
|
||||||
|
EPOCHS_PER_CUSTODY_PERIOD: 16384
|
||||||
|
# 2**11 (= 2,048) epochs, ~9 days
|
||||||
|
CUSTODY_PERIOD_TO_RANDAO_PADDING: 2048
|
||||||
|
# 2**14 (= 16,384) epochs
|
||||||
|
CUSTODY_RESPONSE_DEADLINE: 16384
|
||||||
|
# 2**15 (= 32,768) epochs, ~146 days
|
||||||
|
MAX_CHUNK_CHALLENGE_DELAY: 32768
|
||||||
|
|
||||||
|
# Misc parameters
|
||||||
|
# 2**256 - 189
|
||||||
|
CUSTODY_PRIME: 115792089237316195423570985008687907853269984665640564039457584007913129639747
|
||||||
|
# 3
|
||||||
|
CUSTODY_SECRETS: 3
|
||||||
|
# 2**5 (= 32) bytes
|
||||||
|
BYTES_PER_CUSTODY_ATOM: 32
|
||||||
|
# 1/1024 chance of custody bit 1
|
||||||
|
CUSTODY_PROBABILITY_EXPONENT: 10
|
||||||
|
|
||||||
|
# Max operations
|
||||||
|
# 2**8 (= 256)
|
||||||
|
MAX_CUSTODY_KEY_REVEALS: 256
|
||||||
|
# 2**0 (= 1)
|
||||||
|
MAX_EARLY_DERIVED_SECRET_REVEALS: 1
|
||||||
|
# 2**2 (= 2)
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGES: 4
|
||||||
|
# 2** 4 (= 16)
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGE_RESP: 16
|
||||||
|
# 2**0 (= 1)
|
||||||
|
MAX_CUSTODY_SLASHINGS: 1
|
||||||
|
|
||||||
|
# Reward and penalty quotients
|
||||||
|
EARLY_DERIVED_SECRET_REVEAL_SLOT_REWARD_MULTIPLE: 2
|
||||||
|
# 2**8 (= 256)
|
||||||
|
MINOR_REWARD_QUOTIENT: 256
|
|
@ -151,78 +151,3 @@ DOMAIN_DEPOSIT: 0x03000000
|
||||||
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
DOMAIN_VOLUNTARY_EXIT: 0x04000000
|
||||||
DOMAIN_SELECTION_PROOF: 0x05000000
|
DOMAIN_SELECTION_PROOF: 0x05000000
|
||||||
DOMAIN_AGGREGATE_AND_PROOF: 0x06000000
|
DOMAIN_AGGREGATE_AND_PROOF: 0x06000000
|
||||||
# Phase 1
|
|
||||||
DOMAIN_SHARD_PROPOSAL: 0x80000000
|
|
||||||
DOMAIN_SHARD_COMMITTEE: 0x81000000
|
|
||||||
DOMAIN_LIGHT_CLIENT: 0x82000000
|
|
||||||
DOMAIN_CUSTODY_BIT_SLASHING: 0x83000000
|
|
||||||
|
|
||||||
|
|
||||||
# Phase 1: Upgrade from Phase 0
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
# [customized] for testnet distinction
|
|
||||||
PHASE_1_FORK_VERSION: 0x01000001
|
|
||||||
# [customized] for testing
|
|
||||||
PHASE_1_GENESIS_SLOT: 8
|
|
||||||
# [customized] reduced for testing
|
|
||||||
INITIAL_ACTIVE_SHARDS: 2
|
|
||||||
|
|
||||||
|
|
||||||
# Phase 1: General
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
# [customized] reduced for testing
|
|
||||||
MAX_SHARDS: 8
|
|
||||||
# 2**3 (= 8) | online epochs
|
|
||||||
ONLINE_PERIOD: 8
|
|
||||||
# 2**7 (= 128)
|
|
||||||
LIGHT_CLIENT_COMMITTEE_SIZE: 128
|
|
||||||
# 2**8 (= 256) | epochs
|
|
||||||
LIGHT_CLIENT_COMMITTEE_PERIOD: 256
|
|
||||||
# 2**18 (= 262,144)
|
|
||||||
SHARD_BLOCK_CHUNK_SIZE: 262144
|
|
||||||
# 2**2 (= 4)
|
|
||||||
MAX_SHARD_BLOCK_CHUNKS: 4
|
|
||||||
# 3 * 2**16` (= 196,608)
|
|
||||||
TARGET_SHARD_BLOCK_SIZE: 196608
|
|
||||||
# Note: MAX_SHARD_BLOCKS_PER_ATTESTATION is derived from the list length.
|
|
||||||
SHARD_BLOCK_OFFSETS: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
|
|
||||||
# len(SHARD_BLOCK_OFFSETS)
|
|
||||||
MAX_SHARD_BLOCKS_PER_ATTESTATION: 12
|
|
||||||
# 2**14 (= 16,384) Gwei
|
|
||||||
MAX_GASPRICE: 16384
|
|
||||||
# 2**3 (= 8) Gwei
|
|
||||||
MIN_GASPRICE: 8
|
|
||||||
# 2**3 (= 8)
|
|
||||||
GASPRICE_ADJUSTMENT_COEFFICIENT: 8
|
|
||||||
|
|
||||||
|
|
||||||
# Phase 1: Custody Game
|
|
||||||
# ---------------------------------------------------------------
|
|
||||||
|
|
||||||
# 1/4 chance of custody bit 1 [customized for faster testing]
|
|
||||||
CUSTODY_PROBABILITY_EXPONENT: 2
|
|
||||||
|
|
||||||
# Time parameters
|
|
||||||
# 2**1 (= 2) epochs
|
|
||||||
RANDAO_PENALTY_EPOCHS: 2
|
|
||||||
# 2**7 (= 128) epochs, ~13.7 hours [customized for faster testing]
|
|
||||||
EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS: 128
|
|
||||||
# 2**6 (= 64) epochs ~6.8 hours [customized for faster testing]
|
|
||||||
EPOCHS_PER_CUSTODY_PERIOD: 64
|
|
||||||
# 2**4 (= 16) epochs, ~1.7 hours [customized for faster testing]
|
|
||||||
CUSTODY_PERIOD_TO_RANDAO_PADDING: 16
|
|
||||||
# 2**7 (= 128) epochs, ~13.7 hours [customize for faster testing]
|
|
||||||
MAX_CHUNK_CHALLENGE_DELAY: 128
|
|
||||||
|
|
||||||
# Max operations
|
|
||||||
# 2**8 (= 256)
|
|
||||||
MAX_CUSTODY_KEY_REVEALS: 256
|
|
||||||
MAX_EARLY_DERIVED_SECRET_REVEALS: 1
|
|
||||||
MAX_CUSTODY_CHUNK_CHALLENGES: 2
|
|
||||||
MAX_CUSTODY_CHUNK_CHALLENGE_RESP: 8
|
|
||||||
MAX_CUSTODY_SLASHINGS: 1
|
|
||||||
|
|
||||||
# Reward and penalty quotients
|
|
||||||
EARLY_DERIVED_SECRET_REVEAL_SLOT_REWARD_MULTIPLE: 2
|
|
||||||
# 2**8 (= 256)
|
|
||||||
MINOR_REWARD_QUOTIENT: 256
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
# Minimal preset - phase 1
|
||||||
|
|
||||||
|
|
||||||
|
# phase1-fork
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# [customized] for testnet distinction
|
||||||
|
PHASE_1_FORK_VERSION: 0x01000001
|
||||||
|
# [customized] for testing
|
||||||
|
PHASE_1_GENESIS_SLOT: 8
|
||||||
|
# [customized] reduced for testing
|
||||||
|
INITIAL_ACTIVE_SHARDS: 2
|
||||||
|
|
||||||
|
|
||||||
|
# beacon-chain
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# Misc
|
||||||
|
# [customized] reduced for testing
|
||||||
|
MAX_SHARDS: 8
|
||||||
|
# 2**7 (= 128)
|
||||||
|
LIGHT_CLIENT_COMMITTEE_SIZE: 128
|
||||||
|
# 2**3 (= 8)
|
||||||
|
GASPRICE_ADJUSTMENT_COEFFICIENT: 8
|
||||||
|
|
||||||
|
# Shard block configs
|
||||||
|
# 2**20 (= 1048,576) bytes
|
||||||
|
MAX_SHARD_BLOCK_SIZE: 1048576
|
||||||
|
# 2**18 (= 262,144) bytes
|
||||||
|
TARGET_SHARD_BLOCK_SIZE: 262144
|
||||||
|
# Note: MAX_SHARD_BLOCKS_PER_ATTESTATION is derived from the list length.
|
||||||
|
SHARD_BLOCK_OFFSETS: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
|
||||||
|
# len(SHARD_BLOCK_OFFSETS)
|
||||||
|
MAX_SHARD_BLOCKS_PER_ATTESTATION: 12
|
||||||
|
# 2**12 (= 4,096)
|
||||||
|
BYTES_PER_CUSTODY_CHUNK: 4096
|
||||||
|
# ceillog2(MAX_SHARD_BLOCK_SIZE // BYTES_PER_CUSTODY_CHUNK)
|
||||||
|
CUSTODY_RESPONSE_DEPTH: 8
|
||||||
|
|
||||||
|
# Gwei values
|
||||||
|
# 2**14 (= 16,384) Gwei
|
||||||
|
MAX_GASPRICE: 16384
|
||||||
|
# 2**3 (= 8) Gwei
|
||||||
|
MIN_GASPRICE: 8
|
||||||
|
|
||||||
|
# Time parameters
|
||||||
|
# 2**3 (= 8) | online epochs
|
||||||
|
ONLINE_PERIOD: 8
|
||||||
|
# 2**8 (= 256) | epochs
|
||||||
|
LIGHT_CLIENT_COMMITTEE_PERIOD: 256
|
||||||
|
|
||||||
|
# Max operations per block
|
||||||
|
# 2**20 (= 1,048,576)
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGE_RECORDS: 1048576
|
||||||
|
|
||||||
|
# Domain types
|
||||||
|
DOMAIN_SHARD_PROPOSAL: 0x80000000
|
||||||
|
DOMAIN_SHARD_COMMITTEE: 0x81000000
|
||||||
|
DOMAIN_LIGHT_CLIENT: 0x82000000
|
||||||
|
# custody-game spec
|
||||||
|
DOMAIN_CUSTODY_BIT_SLASHING: 0x83000000
|
||||||
|
|
||||||
|
|
||||||
|
# custody-game
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# Time parameters
|
||||||
|
# 2**1 (= 2) epochs
|
||||||
|
RANDAO_PENALTY_EPOCHS: 2
|
||||||
|
# [customized] quicker for testing
|
||||||
|
EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS: 128
|
||||||
|
# [customized] quicker for testing
|
||||||
|
EPOCHS_PER_CUSTODY_PERIOD: 64
|
||||||
|
# [customized] quicker for testing
|
||||||
|
CUSTODY_PERIOD_TO_RANDAO_PADDING: 8
|
||||||
|
# [customized] quicker for testing
|
||||||
|
CUSTODY_RESPONSE_DEADLINE: 128
|
||||||
|
# [customize for faster testing]
|
||||||
|
MAX_CHUNK_CHALLENGE_DELAY: 128
|
||||||
|
|
||||||
|
|
||||||
|
# Misc parameters
|
||||||
|
# 2**256 - 189
|
||||||
|
CUSTODY_PRIME: 115792089237316195423570985008687907853269984665640564039457584007913129639747
|
||||||
|
# 3
|
||||||
|
CUSTODY_SECRETS: 3
|
||||||
|
# 2**5 (= 32) bytes
|
||||||
|
BYTES_PER_CUSTODY_ATOM: 32
|
||||||
|
# 1/4 chance of custody bit 1 [customized for faster testing]
|
||||||
|
CUSTODY_PROBABILITY_EXPONENT: 2
|
||||||
|
|
||||||
|
|
||||||
|
# Max operations
|
||||||
|
# 2**8 (= 256)
|
||||||
|
MAX_CUSTODY_KEY_REVEALS: 256
|
||||||
|
# 2**0 (= 1)
|
||||||
|
MAX_EARLY_DERIVED_SECRET_REVEALS: 1
|
||||||
|
# [customized]
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGES: 2
|
||||||
|
# [customized]
|
||||||
|
MAX_CUSTODY_CHUNK_CHALLENGE_RESP: 8
|
||||||
|
# 2**0 (= 1)
|
||||||
|
MAX_CUSTODY_SLASHINGS: 1
|
||||||
|
|
||||||
|
# Reward and penalty quotients
|
||||||
|
EARLY_DERIVED_SECRET_REVEAL_SLOT_REWARD_MULTIPLE: 2
|
||||||
|
# 2**8 (= 256)
|
||||||
|
MINOR_REWARD_QUOTIENT: 256
|
|
@ -44,9 +44,11 @@ This document is the beacon chain fork choice spec, part of Ethereum 2.0 Phase 0
|
||||||
|
|
||||||
The head block root associated with a `store` is defined as `get_head(store)`. At genesis, let `store = get_forkchoice_store(genesis_state)` and update `store` by running:
|
The head block root associated with a `store` is defined as `get_head(store)`. At genesis, let `store = get_forkchoice_store(genesis_state)` and update `store` by running:
|
||||||
|
|
||||||
- `on_tick(time)` whenever `time > store.time` where `time` is the current Unix time
|
- `on_tick(store, time)` whenever `time > store.time` where `time` is the current Unix time
|
||||||
- `on_block(block)` whenever a block `block: SignedBeaconBlock` is received
|
- `on_block(store, block)` whenever a block `block: SignedBeaconBlock` is received
|
||||||
- `on_attestation(attestation)` whenever an attestation `attestation` is received
|
- `on_attestation(store, attestation)` whenever an attestation `attestation` is received
|
||||||
|
|
||||||
|
Any of the above handlers that trigger an unhandled exception (e.g. a failed assert or an out-of-range list access) are considered invalid. Invalid calls to handlers must not modify `store`.
|
||||||
|
|
||||||
*Notes*:
|
*Notes*:
|
||||||
|
|
||||||
|
@ -342,22 +344,23 @@ def on_tick(store: Store, time: uint64) -> None:
|
||||||
```python
|
```python
|
||||||
def on_block(store: Store, signed_block: SignedBeaconBlock) -> None:
|
def on_block(store: Store, signed_block: SignedBeaconBlock) -> None:
|
||||||
block = signed_block.message
|
block = signed_block.message
|
||||||
# Make a copy of the state to avoid mutability issues
|
# Parent block must be known
|
||||||
assert block.parent_root in store.block_states
|
assert block.parent_root in store.block_states
|
||||||
|
# Make a copy of the state to avoid mutability issues
|
||||||
pre_state = store.block_states[block.parent_root].copy()
|
pre_state = store.block_states[block.parent_root].copy()
|
||||||
# Blocks cannot be in the future. If they are, their consideration must be delayed until the are in the past.
|
# Blocks cannot be in the future. If they are, their consideration must be delayed until the are in the past.
|
||||||
assert get_current_slot(store) >= block.slot
|
assert get_current_slot(store) >= block.slot
|
||||||
# Add new block to the store
|
|
||||||
store.blocks[hash_tree_root(block)] = block
|
|
||||||
|
|
||||||
# Check that block is later than the finalized epoch slot (optimization to reduce calls to get_ancestor)
|
# Check that block is later than the finalized epoch slot (optimization to reduce calls to get_ancestor)
|
||||||
finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)
|
finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)
|
||||||
assert block.slot > finalized_slot
|
assert block.slot > finalized_slot
|
||||||
# Check block is a descendant of the finalized block at the checkpoint finalized slot
|
# Check block is a descendant of the finalized block at the checkpoint finalized slot
|
||||||
assert get_ancestor(store, hash_tree_root(block), finalized_slot) == store.finalized_checkpoint.root
|
assert get_ancestor(store, block.parent_root, finalized_slot) == store.finalized_checkpoint.root
|
||||||
|
|
||||||
# Check the block is valid and compute the post-state
|
# Check the block is valid and compute the post-state
|
||||||
state = state_transition(pre_state, signed_block, True)
|
state = state_transition(pre_state, signed_block, True)
|
||||||
|
# Add new block to the store
|
||||||
|
store.blocks[hash_tree_root(block)] = block
|
||||||
# Add new state for this block to the store
|
# Add new state for this block to the store
|
||||||
store.block_states[hash_tree_root(block)] = state
|
store.block_states[hash_tree_root(block)] = state
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
- [Gwei values](#gwei-values)
|
- [Gwei values](#gwei-values)
|
||||||
- [Initial values](#initial-values)
|
- [Initial values](#initial-values)
|
||||||
- [Time parameters](#time-parameters)
|
- [Time parameters](#time-parameters)
|
||||||
|
- [Max operations per block](#max-operations-per-block)
|
||||||
- [Domain types](#domain-types)
|
- [Domain types](#domain-types)
|
||||||
- [Updated containers](#updated-containers)
|
- [Updated containers](#updated-containers)
|
||||||
- [Extended `AttestationData`](#extended-attestationdata)
|
- [Extended `AttestationData`](#extended-attestationdata)
|
||||||
|
@ -112,12 +113,14 @@ Configuration is not namespaced. Instead it is strictly an extension;
|
||||||
|
|
||||||
### Shard block configs
|
### Shard block configs
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value | Unit |
|
||||||
| - | - |
|
| - | - | - |
|
||||||
| `MAX_SHARD_BLOCK_SIZE` | `2**20` (= 1,048,576) |
|
| `MAX_SHARD_BLOCK_SIZE` | `2**20` (= 1,048,576) | bytes |
|
||||||
| `TARGET_SHARD_BLOCK_SIZE` | `2**18` (= 262,144) |
|
| `TARGET_SHARD_BLOCK_SIZE` | `2**18` (= 262,144) | bytes |
|
||||||
| `SHARD_BLOCK_OFFSETS` | `[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]` |
|
| `SHARD_BLOCK_OFFSETS` | `[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]` | - |
|
||||||
| `MAX_SHARD_BLOCKS_PER_ATTESTATION` | `len(SHARD_BLOCK_OFFSETS)` |
|
| `MAX_SHARD_BLOCKS_PER_ATTESTATION` | `len(SHARD_BLOCK_OFFSETS)` | - |
|
||||||
|
| `BYTES_PER_CUSTODY_CHUNK` | `2**12` (= 4,096) | bytes |
|
||||||
|
| `CUSTODY_RESPONSE_DEPTH` | `ceillog2(MAX_SHARD_BLOCK_SIZE // BYTES_PER_CUSTODY_CHUNK)` | - |
|
||||||
|
|
||||||
### Gwei values
|
### Gwei values
|
||||||
|
|
||||||
|
@ -138,20 +141,11 @@ Configuration is not namespaced. Instead it is strictly an extension;
|
||||||
| - | - | :-: | :-: |
|
| - | - | :-: | :-: |
|
||||||
| `ONLINE_PERIOD` | `OnlineEpochs(2**3)` (= 8) | online epochs | ~51 mins |
|
| `ONLINE_PERIOD` | `OnlineEpochs(2**3)` (= 8) | online epochs | ~51 mins |
|
||||||
| `LIGHT_CLIENT_COMMITTEE_PERIOD` | `Epoch(2**8)` (= 256) | epochs | ~27 hours |
|
| `LIGHT_CLIENT_COMMITTEE_PERIOD` | `Epoch(2**8)` (= 256) | epochs | ~27 hours |
|
||||||
| `MAX_SHARD_BLOCK_SIZE` | `2**20` (= 1,048,576) | bytes | - |
|
|
||||||
| `TARGET_SHARD_BLOCK_SIZE` | `2**18` (= 262,144) | bytes | - |
|
### Max operations per block
|
||||||
| `SHARD_BLOCK_OFFSETS` | `[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]` | list of slot offsets | - |
|
| Name | Value |
|
||||||
| `MAX_SHARD_BLOCKS_PER_ATTESTATION` | `len(SHARD_BLOCK_OFFSETS)` | - | - |
|
| - | - |
|
||||||
| `MAX_GASPRICE` | `Gwei(2**14)` (= 16,384) | Gwei | |
|
| `MAX_CUSTODY_CHUNK_CHALLENGE_RECORDS` | `2**20` (= 1,048,576) |
|
||||||
| `MIN_GASPRICE` | `Gwei(2**3)` (= 8) | Gwei | |
|
|
||||||
| `GASPRICE_ADJUSTMENT_COEFFICIENT` | `2**3` (= 8) | | |
|
|
||||||
| `DOMAIN_SHARD_PROPOSAL` | `DomainType('0x80000000')` | | |
|
|
||||||
| `DOMAIN_SHARD_COMMITTEE` | `DomainType('0x81000000')` | | |
|
|
||||||
| `DOMAIN_LIGHT_CLIENT` | `DomainType('0x82000000')` | | |
|
|
||||||
| `MAX_CUSTODY_CHUNK_CHALLENGE_RECORDS` | `2**20` (= 1,048,576) | | |
|
|
||||||
| `BYTES_PER_CUSTODY_CHUNK` | `2**12` | bytes | |
|
|
||||||
| `CUSTODY_RESPONSE_DEPTH` | `ceillog2(MAX_SHARD_BLOCK_SIZE // BYTES_PER_CUSTODY_CHUNK)` | - | - |
|
|
||||||
| `NO_SIGNATURE` | `BLSSignature(b'\x00' * 96)` | | |
|
|
||||||
|
|
||||||
### Domain types
|
### Domain types
|
||||||
|
|
||||||
|
|
|
@ -72,18 +72,18 @@ This document details the beacon chain additions and changes in Phase 1 of Ether
|
||||||
| `EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS` | `2**15` (= 32,768) | epochs | ~146 days |
|
| `EARLY_DERIVED_SECRET_PENALTY_MAX_FUTURE_EPOCHS` | `2**15` (= 32,768) | epochs | ~146 days |
|
||||||
| `EPOCHS_PER_CUSTODY_PERIOD` | `2**14` (= 16,384) | epochs | ~73 days |
|
| `EPOCHS_PER_CUSTODY_PERIOD` | `2**14` (= 16,384) | epochs | ~73 days |
|
||||||
| `CUSTODY_PERIOD_TO_RANDAO_PADDING` | `2**11` (= 2,048) | epochs | ~9 days |
|
| `CUSTODY_PERIOD_TO_RANDAO_PADDING` | `2**11` (= 2,048) | epochs | ~9 days |
|
||||||
| `CHUNK_RESPONSE_DEADLINE` | `2**14` (= 16,384) | epochs | ~73 days |
|
|
||||||
| `MAX_CHUNK_CHALLENGE_DELAY` | `2**15` (= 32,768) | epochs | ~146 days |
|
| `MAX_CHUNK_CHALLENGE_DELAY` | `2**15` (= 32,768) | epochs | ~146 days |
|
||||||
|
| `CHUNK_RESPONSE_DEADLINE` | `2**14` (= 16,384) | epochs | ~73 days |
|
||||||
|
|
||||||
### Max operations per block
|
### Max operations per block
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| - | - |
|
| - | - |
|
||||||
| `MAX_CUSTODY_KEY_REVEALS` | `2**8` (= 256) |
|
| `MAX_CUSTODY_KEY_REVEALS` | `2**8` (= 256) |
|
||||||
| `MAX_EARLY_DERIVED_SECRET_REVEALS` | `1` |
|
| `MAX_EARLY_DERIVED_SECRET_REVEALS` | `2**0` (= 1) |
|
||||||
| `MAX_CUSTODY_CHUNK_CHALLENGES` | `2**2` (= 4) |
|
| `MAX_CUSTODY_CHUNK_CHALLENGES` | `2**2` (= 4) |
|
||||||
| `MAX_CUSTODY_CHUNK_CHALLENGE_RESPONSES` | `2**4` (= 16) |
|
| `MAX_CUSTODY_CHUNK_CHALLENGE_RESPONSES` | `2**4` (= 16) |
|
||||||
| `MAX_CUSTODY_SLASHINGS` | `1` |
|
| `MAX_CUSTODY_SLASHINGS` | `2**0` (= 1) |
|
||||||
|
|
||||||
### Reward and penalty quotients
|
### Reward and penalty quotients
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from ruamel.yaml import YAML
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from os.path import join
|
|
||||||
from typing import Dict, Any
|
from typing import Dict, Any
|
||||||
|
|
||||||
|
from ruamel.yaml import YAML
|
||||||
|
|
||||||
config: Dict[str, Any] = {}
|
config: Dict[str, Any] = {}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,11 +36,19 @@ def load_config_file(configs_dir: str, presets_name: str) -> Dict[str, Any]:
|
||||||
:param presets_name: The name of the presets. (lowercase snake_case)
|
:param presets_name: The name of the presets. (lowercase snake_case)
|
||||||
:return: Dictionary, mapping of constant-name -> constant-value
|
:return: Dictionary, mapping of constant-name -> constant-value
|
||||||
"""
|
"""
|
||||||
path = Path(join(configs_dir, presets_name + '.yaml'))
|
present_dir = Path(configs_dir) / presets_name
|
||||||
yaml = YAML(typ='base')
|
_, _, config_files = next(os.walk(present_dir))
|
||||||
loaded = yaml.load(path)
|
config_files.sort()
|
||||||
|
loaded_config = {}
|
||||||
|
for config_file_name in config_files:
|
||||||
|
yaml = YAML(typ='base')
|
||||||
|
path = present_dir / config_file_name
|
||||||
|
loaded = yaml.load(path)
|
||||||
|
loaded_config.update(loaded)
|
||||||
|
assert loaded_config != {}
|
||||||
|
|
||||||
out: Dict[str, Any] = dict()
|
out: Dict[str, Any] = dict()
|
||||||
for k, v in loaded.items():
|
for k, v in loaded_config.items():
|
||||||
if isinstance(v, list):
|
if isinstance(v, list):
|
||||||
# Clean up integer values. YAML parser renders lists of ints as list of str
|
# Clean up integer values. YAML parser renders lists of ints as list of str
|
||||||
out[k] = [int(item) if item.isdigit() else item for item in v]
|
out[k] = [int(item) if item.isdigit() else item for item in v]
|
||||||
|
|
Loading…
Reference in New Issue