Expected number of bad committees per year === The following script suggests ~31 bad committees per year. ```python import math def factorial(n): return n * factorial(n - 1) if n else 1 def choose(n, k): return factorial(n) / factorial(k) / factorial(n - k) def eq_k_probability(n, k, p): return p**k * (1 - p)**(n - k) * choose(n, k) def ge_k_probability(n, k, p): return sum([eq_k_probability(n, i, p) for i in range(k, n + 1)]) # Protocol parameters SECONDS_PER_SLOT = 12 MAX_COMMITTEES_PER_SLOT = 64 SLOTS_PER_EPOCH = 32 TARGET_COMMITTEE_SIZE = 128 BAD_COMMITTEE_THRESHOLD = math.ceil(2 / 3 * TARGET_COMMITTEE_SIZE) SLOTS_PER_YEAR = 365.25 * 24 * 60 * 60 / SECONDS_PER_SLOT COMMITEES_PER_YEAR = MAX_COMMITTEES_PER_SLOT * SLOTS_PER_YEAR # Security assumptions RANDAO_BIAS_BITS = 25 # Optimistic (no SSLE makes forcing RANDAO no-reveals easy by DoSing proposers) ATTACKER_CONTROL = 1/3 bad_committee_probability = ge_k_probability(TARGET_COMMITTEE_SIZE, BAD_COMMITTEE_THRESHOLD, ATTACKER_CONTROL) bad_committees_per_year = 2**RANDAO_BIAS_BITS * COMMITEES_PER_YEAR * bad_committee_probability print("Expected number of bad committees per year:", bad_committees_per_year) ```