mirror of
https://github.com/logos-blockchain/research.git
synced 2026-08-07 19:53:10 +00:00
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""Protocol constants and epoch/window geometry.
|
|
|
|
All slot geometry derives from the pair ``(k, f)`` so a scaled-down ``k`` (used for
|
|
parameter sweeps) automatically shrinks the epoch and measurement window. See
|
|
``cryptarchia-v1-protocol.md`` and ``cryptarchia-total-stake-inference.md``.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
# --- True protocol values (full scale) -------------------------------------
|
|
K_TRUE = 2160 # security parameter (blocks)
|
|
F = 1.0 / 30.0 # slot activation coefficient (fixed; never tuned)
|
|
W_DEFAULT = 300 # uncle reference window w_u (slots)
|
|
BETA_DEFAULT = 1.0 # TSI learning rate
|
|
SLOT_SECONDS = 1 # slot length
|
|
|
|
|
|
def floor_k_over_f(k: int, f: float = F) -> int:
|
|
"""``floor(k / f)`` — the base quantum of the epoch schedule."""
|
|
return int(k / f)
|
|
|
|
|
|
def epoch_len(k: int, f: float = F) -> int:
|
|
"""Epoch length in slots: ``10 * floor(k/f)``."""
|
|
return 10 * floor_k_over_f(k, f)
|
|
|
|
|
|
def period_T(k: int, f: float = F) -> int:
|
|
"""TSI measurement window length ``T`` in slots: ``6 * floor(k/f)``.
|
|
|
|
This is the first ``6*floor(k/f)`` slots of the (previous) epoch over which the
|
|
block density is measured.
|
|
"""
|
|
return 6 * floor_k_over_f(k, f)
|
|
|
|
|
|
def expected_blocks_in_window(k: int, f: float = F) -> float:
|
|
"""Expected honest-chain block count in the measurement window at equilibrium."""
|
|
return period_T(k, f) * f
|