Clarifications for proposer boost reorgs
This commit is contained in:
parent
35d444b9d2
commit
3f1bc20512
|
@ -94,7 +94,7 @@ CHURN_LIMIT_QUOTIENT: 65536
|
||||||
# 40%
|
# 40%
|
||||||
PROPOSER_SCORE_BOOST: 40
|
PROPOSER_SCORE_BOOST: 40
|
||||||
# 20%
|
# 20%
|
||||||
REORG_WEIGHT_THRESHOLD: 20
|
REORG_HEAD_WEIGHT_THRESHOLD: 20
|
||||||
# 160%
|
# 160%
|
||||||
REORG_PARENT_WEIGHT_THRESHOLD: 160
|
REORG_PARENT_WEIGHT_THRESHOLD: 160
|
||||||
# `2` epochs
|
# `2` epochs
|
||||||
|
|
|
@ -93,7 +93,7 @@ CHURN_LIMIT_QUOTIENT: 32
|
||||||
# 40%
|
# 40%
|
||||||
PROPOSER_SCORE_BOOST: 40
|
PROPOSER_SCORE_BOOST: 40
|
||||||
# 20%
|
# 20%
|
||||||
REORG_WEIGHT_THRESHOLD: 20
|
REORG_HEAD_WEIGHT_THRESHOLD: 20
|
||||||
# 160%
|
# 160%
|
||||||
REORG_PARENT_WEIGHT_THRESHOLD: 160
|
REORG_PARENT_WEIGHT_THRESHOLD: 160
|
||||||
# `2` epochs
|
# `2` epochs
|
||||||
|
|
|
@ -154,8 +154,8 @@ of the block to be proposed (due to withdrawals).
|
||||||
|
|
||||||
If `should_override_forkchoice_update` returns `True` but `get_proposer_head` later chooses the
|
If `should_override_forkchoice_update` returns `True` but `get_proposer_head` later chooses the
|
||||||
canonical head rather than its parent, then this is a misprediction that will cause the node
|
canonical head rather than its parent, then this is a misprediction that will cause the node
|
||||||
to construct a payload with less notice. The result of `get_proposer_head` MUST be honoured in
|
to construct a payload with less notice. The result of `get_proposer_head` MUST be preferred over
|
||||||
preference to the heuristic method.
|
the result of `should_override_forkchoice_update` (when proposer reorgs are enabled).
|
||||||
|
|
||||||
## Helpers
|
## Helpers
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ Any of the above handlers that trigger an unhandled exception (e.g. a failed ass
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| ------------------------------------- | ------------ |
|
| ------------------------------------- | ------------ |
|
||||||
| `PROPOSER_SCORE_BOOST` | `uint64(40)` |
|
| `PROPOSER_SCORE_BOOST` | `uint64(40)` |
|
||||||
| `REORG_WEIGHT_THRESHOLD` | `uint64(20)` |
|
| `REORG_HEAD_WEIGHT_THRESHOLD` | `uint64(20)` |
|
||||||
| `REORG_PARENT_WEIGHT_THRESHOLD` | `uint64(160)`|
|
| `REORG_PARENT_WEIGHT_THRESHOLD` | `uint64(160)`|
|
||||||
| `REORG_MAX_EPOCHS_SINCE_FINALIZATION` | `Epoch(2)` |
|
| `REORG_MAX_EPOCHS_SINCE_FINALIZATION` | `Epoch(2)` |
|
||||||
|
|
||||||
|
@ -431,6 +431,7 @@ def is_finalization_ok(store: Store, slot: Slot) -> bool:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def is_proposing_on_time(store: Store) -> bool:
|
def is_proposing_on_time(store: Store) -> bool:
|
||||||
|
# Use half `SECONDS_PER_SLOT // INTERVALS_PER_SLOT` as the proposer reorg deadline
|
||||||
time_into_slot = (store.time - store.genesis_time) % SECONDS_PER_SLOT
|
time_into_slot = (store.time - store.genesis_time) % SECONDS_PER_SLOT
|
||||||
proposer_reorg_cutoff = SECONDS_PER_SLOT // INTERVALS_PER_SLOT // 2
|
proposer_reorg_cutoff = SECONDS_PER_SLOT // INTERVALS_PER_SLOT // 2
|
||||||
return time_into_slot <= proposer_reorg_cutoff
|
return time_into_slot <= proposer_reorg_cutoff
|
||||||
|
@ -441,7 +442,7 @@ def is_proposing_on_time(store: Store) -> bool:
|
||||||
```python
|
```python
|
||||||
def is_head_weak(store: Store, head_root: Root) -> bool:
|
def is_head_weak(store: Store, head_root: Root) -> bool:
|
||||||
justified_state = store.checkpoint_states[store.justified_checkpoint]
|
justified_state = store.checkpoint_states[store.justified_checkpoint]
|
||||||
reorg_threshold = calculate_committee_fraction(justified_state, REORG_WEIGHT_THRESHOLD)
|
reorg_threshold = calculate_committee_fraction(justified_state, REORG_HEAD_WEIGHT_THRESHOLD)
|
||||||
head_weight = get_weight(store, head_root)
|
head_weight = get_weight(store, head_root)
|
||||||
return head_weight < reorg_threshold
|
return head_weight < reorg_threshold
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue