Unified consensus-rate control combining bitsQ primary controller, equalizer profiles, and anti-stall for ConvergenceX Proof-of-Work.
cASERT's bitsQ primary controller originally used an exponential moving average formula (half-life based), pioneered by Mark Lundeberg and Jonathan Toomim for Bitcoin Cash (November 2020 hard fork). Since block 5,175, bitsQ uses an avg288-based model: it compares the average of the last 288 block intervals against the 600s target. Since block 5,270, a dynamic cap scales with deviation (0% dead band at ±15s, then 0%/0.5%/1.0%/2.0%/3.0% max). Median removed from consensus (block 5,270+). The half-life exponential is preserved for pre-5175 blocks only. cASERT was designed by Neob for SOST (2026), extending the controller with equalizer profiles and anti-stall decay into a unified consensus-rate control system for ConvergenceX.
| Property | Detail |
|---|---|
| Core formula | next_bitsq = anchor_bitsq * 2^(-td / halflife) |
| Time delta (td) | actual_time - expected_time (deviation from ideal schedule) |
| Exponential response | Difficulty doubles/halves every halflife period |
| SOST implementation | Integer-only cubic polynomial approximation of 2^x |
| Encoding | Q16.16 fixed-point arithmetic, no floating point in consensus |
| BITSQ mode (current) | avg288-based (block 5,175+): avg of last 288 intervals vs 600s target. Dynamic cap (5,270+): 0% dead band (±15s), 0%/0.5%/1.0%/2.0%/3.0% max. Median removed from consensus (block 5,270+) |
| Median288 | HISTORICAL: median288 override with ±30 s dead band and 0.5/1.5/2.5/3% steps only for blocks 5,260–5,269; removed from consensus at block 5,270 |
| Legacy half-life | V1: 48h (genesis–1,449), V2: 24h (1,450–5,174). Preserved for historical blocks only |
| Legacy delta cap | V1: 6.25%, V2: 12.5% symmetric. Preserved for historical blocks only |
| TARGET_SPACING | 600s (10 minutes) |
cASERT is a unified three-layer consensus-rate control system: (1) the bitsQ primary controller provides difficulty adjustment (avg288-based since block 5,175, with dynamic cap since block 5,270), (2) equalizer profiles introduce discrete hardening levels when the chain runs ahead of schedule, and (3) anti-stall decay ensures liveness under sudden hashrate loss. ConvergenceX PoW has a stability_metric (gradient descent convergence) that can be tightened. cASERT monitors how far ahead of schedule the chain is and introduces discrete hardening levels to prevent fast-block attacks. The equalizer ceiling is height-gated: H13 pre-V12 (#5,750..#7,349), H20 from V12 (#7,350..#11,999), and H35 from V13 (#12,000+). Profiles H14–H20 activated at V12 #7,350; profiles H21–H35 activate at V13 #12,000 (full 43-profile range live from V13; margin=115).
| Profile | H= | Scale | K | Steps | Margin | Compute | |
|---|---|---|---|---|---|---|---|
| E7 | A | -7 | 1 | 1 | 1 | 200 | 1 |
| E6 | A | -6 | 1 | 1 | 2 | 195 | 2 |
| E5 | A | -5 | 1 | 2 | 2 | 190 | 4 |
| E4 | A | -4 | 1 | 2 | 3 | 185 | 6 |
| E3 | A | -3 | 1 | 3 | 3 | 180 | 9 |
| E2 | A | -2 | 1 | 3 | 4 | 175 | 12 |
| E1 | A | -1 | 1 | 4 | 4 | 170 | 16 |
| B0 | A | 0 | 1 | 4 | 4 | 165 | 16 |
| H1 | A | +1 | 1 | 4 | 5 | 160 | 20 |
| H2 | A | +2 | 1 | 5 | 5 | 155 | 25 |
| H3 | A | +3 | 1 | 5 | 6 | 150 | 30 |
| H4 | A | +4 | 1 | 6 | 6 | 145 | 36 |
| H5 | A | +5 | 2 | 5 | 5 | 140 | 50 |
| H6 | A | +6 | 2 | 5 | 6 | 135 | 60 |
| H7 | A | +7 | 2 | 6 | 6 | 130 | 72 |
| H8 | A | +8 | 2 | 6 | 7 | 125 | 84 |
| H9 | A | +9 | 2 | 7 | 7 | 120 | 98 |
| H10 | A | +10 | 2 | 7 | 8 | 115 | 112 |
| H11 | A | +11 | 2 | 8 | 8 | 115 | 128 |
| H12 | A | +12 | 2 | 8 | 9 | 115 | 144 |
| H13 | A | +13 | 2 | 9 | 9 | 115 | 162 |
| H14 | A* | +14 | 2 | 9 | 10 | 115 | 180 |
| H15 | A* | +15 | 2 | 10 | 10 | 115 | 200 |
| H16 | A* | +16 | 2 | 10 | 11 | 115 | 220 |
| H17 | A* | +17 | 2 | 11 | 11 | 115 | 242 |
| H18 | A* | +18 | 2 | 11 | 12 | 115 | 264 |
| H19 | A* | +19 | 2 | 12 | 12 | 115 | 288 |
| H20 | A* | +20 | 2 | 12 | 13 | 115 | 312 |
| H21 | A** | +21 | 2 | 13 | 13 | 115 | 338 |
| H22 | A** | +22 | 2 | 13 | 14 | 115 | 364 |
| H23 | A** | +23 | 2 | 14 | 14 | 115 | 392 |
| H24 | A** | +24 | 2 | 14 | 15 | 115 | 420 |
| H25 | A** | +25 | 2 | 15 | 15 | 115 | 450 |
| H26 | A** | +26 | 2 | 15 | 16 | 115 | 480 |
| H27 | A** | +27 | 2 | 16 | 16 | 115 | 512 |
| H28 | A** | +28 | 2 | 16 | 17 | 115 | 544 |
| H29 | A** | +29 | 2 | 17 | 17 | 115 | 578 |
| H30 | A** | +30 | 2 | 17 | 18 | 115 | 612 |
| H31 | A** | +31 | 2 | 18 | 18 | 115 | 648 |
| H32 | A** | +32 | 2 | 18 | 19 | 115 | 684 |
| H33 | A** | +33 | 2 | 19 | 19 | 115 | 722 |
| H34 | A** | +34 | 2 | 19 | 20 | 115 | 760 |
| H35 | A** | +35 | 2 | 20 | 20 | 115 | 800 |
43 profiles E7(-7) through H35(+35). H10–H35 margin=115. Compute = scale × k × steps.
A = Active pre-V12 (#5,750..#7,349) — 21 profiles E7 through H13.
A* = Active from V12 (#7,350..#11,999) — 7 additional profiles H14 through H20 (V12 ceiling, 28 active total).
A** = Active from V13 (#12,000+) — 15 additional profiles H21 through H35 (V13 ceiling, full 43-profile range active; this closes the equalizer calibration started in V6).
R = Reserved — previously (pre-V13) the upper segment was reserved for future activation as network hashrate grows; from V13 / block 12,000 no equalizer profile remains reserved. 43-profile table since block 5,750 (before: legacy 40-profile E4–H35 table). Scale 1 for E7–H4, scale 2 for H5–H35.
Current selection (direct lag map, #5,323+): lag = (h−1) − floor((prev.time − genesis)/600), positive = chain ahead; target = B0 if lag ≤ 0, else min(lag, ceiling); up immediate, down at least 1 level/block. The validator recomputes the profile and the declared profile_index must equal it.
Relief ladder: current V12 triangular cascade (7,350+) — from 540 s elapsed, n = min(1+(elapsed−540)/60, 7), drop n(n+1)/2 = 1/3/6/10/15/21/28 levels, floor E7. HISTORICAL: V8 single E7 cliff at 605 s (5,750–6,549) → V9 staged drop 3/60 s from 540 s (6,550+) → V10 granular drop 1/60 s from 600 s (6,700+) → V11 linear (7,000) / triangular cap 21 (7,100).
V6 calibration (5,050): lag cap H ≤ lag, live lag (disabled at V10), anti-stall 60 min. bitsQ avg288-based (5,175+), dynamic cap (5,270+). V13 (12,000+) ceiling expansion to H35 completes the cASERT equalizer calibration.
The equalizer operates bidirectionally: E7–E1 ease stability (via the V12 cascade during a slow block, or anti-stall after 6h extra at B0), B0 is the baseline, H1–H35 harden when blocks are fast. All 43 profiles defined. Pre-V12 (#5,750..#7,349): 21 active E7–H13, 22 reserved H14–H35. V12 (#7,350..#11,999): 28 active E7–H20, 15 reserved H21–H35. V13 (#12,000+): 43 active E7–H35, 0 reserved — full equalizer range live. Safety rules cap at B0 when behind schedule (lag ≤ 0). Current: up immediate, down at least 1 level per block (direct lag map, #5,323+). HISTORICAL: slew rate ±1 profile level per block (V6, blocks 5,000–5,322).
43 profiles E7(-7) through H35(+35). Each profile has independently tuned scale, k, steps, and margin. Higher profiles impose stricter stability_metric thresholds on ConvergenceX, making it progressively harder to produce fast blocks. E7–H4 use scale 1; H5–H35 use scale 2. H35 is the hardest profile (k=20, steps=20, margin=115).
If no block is found for an extended period, the cASERT level decays to B0 via zone-based rates. Activation: 3,600 s (60 min) without a block at current heights (since V5 #4,300; the 7,200 s / 2-hour floor is HISTORICAL, before #4,300). First drop immediate. Easing below B0 (−1 level per 1,800 s, down to E7) activates after 6 hours extra at B0. This prevents mining deadlock when hashrate drops suddenly. Note — Slingshot vs anti-stall: they are complementary, not duplicates. Slingshot is a fast, per-block relief that shoves bitsQ down the moment a block runs long; this anti-stall decay is the slow backstop that walks the equalizer profile back to B0 after a prolonged (60 min+) outage. They act on different variables.
After activation, decay uses current level zone (not original):
H35→...→H7: FAST (600s/level = 10min/level) — 60 min
H6→H5→H4: MEDIUM (900s/level = 15min/level) — 45 min
H3→H2→H1: SLOW (1200s/level = 20min/level) — 60 min
First drop is immediate. Decay stops at B0. Easing below B0 (−1 level per 1,800s, down to E7) only after 6 hours extra at B0.
In plain terms: when a block is taking abnormally long to mine, Slingshot gives the difficulty one extra, bounded shove downward so the network finds the next block sooner — then immediately resets. Think of it as a separate emergency brake from the equalizer cascade and the anti-stall decay, built for one job: stop a run of bad luck from compounding into back-to-back stalls when the cascade is already sitting at its E7 floor.
Technically: Slingshot is a single-shot multiplier applied to bitsQ after the avg288 controller and the dynamic cap, then re-clamped to MIN_BITSQ. It is self-resetting — the next block re-evaluates fresh against avg288, so there is no compounding: three slow blocks in a row each receive their own single drop, never drop × drop × drop. It does not replace cASERT, the relief cascade, the DTD lottery or SbPoW.
| V12 tier (block 7,350+) | fires when current_elapsed > | bitsQ drop |
|---|---|---|
| T1 | 1,200 s (20 min) | −6.5% |
| T2 | 1,800 s (30 min) | −12.5% |
| T3 | 3,600 s (60 min) | −25% |
| T4 | 7,200 s (120 min) | −37.5% |
| T5 | 10,800 s (180 min) | −50% — catastrophic relief |
Strict greater-than at each threshold; the highest crossed tier wins and is applied as a same-block drop. Short blocks never cross even T1, so no relief is given when the chain is already healthy.
The original Slingshot (block 7,000) required two gates: the previous block was slow (prev_elapsed > 1,800 s, 30 min) and the current block is also taking long (current_elapsed > 600 s, 10 min). When both fire: bitsQ = bitsQ_avg288 × 0.875 (−12.5%). The second gate withheld “free relief” once the chain had already recovered.
From block 7,350 Slingshot is keyed on a single signal — current_elapsed — across the 5-tier ladder above. The same-block, single-gate design makes the V11 second gate structural: short blocks never reach T1, so relief is only ever given mid-stall. Emergency-only by construction.
Every block re-derives Slingshot from the chain alone (stateless & deterministic — any two nodes compute the same drop). The drop is applied after the avg288 / dynamic-cap clamp and re-clamped to MIN_BITSQ, so it can never push difficulty below the global floor. An additional safety layer above cASERT, the cascade, the lottery and SbPoW — never a replacement.
| Property | Detail |
|---|---|
| Exponential moving average formula | 2^(-td / halflife) — same mathematical approach |
| Anchor-based calculation | Uses first block of epoch as anchor reference |
| Q16.16 fixed-point encoding | Same integer representation, no floating point |
| Global difficulty clamps | MIN_BITSQ / MAX_BITSQ bounds enforced |
| Per-block retargeting | Every block, not every N blocks |
| Epoch structure | BLOCKS_PER_EPOCH = 131,553 blocks (~2.5 years) |
| Version | Block | Changes |
|---|---|---|
| V1 | Genesis | 48h half-life, 6.25% delta cap, ±1 slew rate |
| V2 | 1,450 | 24h half-life, 12.5% delta cap |
| V3 | 4,100 | Slew rate ±1 → ±3, lag floor (lag/8 minimum profile), improved equalizer responsiveness |
| V3.1 | 4,110 | Stored profile_index from BlockMeta (prevents slew rate bypass), anti-stall floor set to 7,200s |
| V4 | 4,170 | Ahead Guard (HISTORICAL, active #4,170–#4,999 only): clamps bitsQ downward change to 1/64 (~1.56%)/block when chain ≥16 blocks ahead. Hysteresis: enter ≥16, exit ≤8 |
| V5 | 4,300 | Anti-stall activation 7,200 s → 3,600 s (60 min) — still current |
| V6 | 5,000 | Slew rate ±3 → ±1, H10–H35 scale=2 (V6 calibration), H35 hardest (k=20, steps=20, margin=115) |
| V7 avg288 | 5,175 | bitsQ switches to avg288-based: avg of last 288 block intervals vs 600s target. Half-life exponential no longer used (preserved for historical blocks only) |
| V7 dyncap | 5,270 | Dynamic cap: 0% dead band (±15s), 0%/0.5%/1.0%/2.0%/3.0% max scaling with deviation. Median removed from consensus (block 5,270+). (5,260–5,269 HISTORICAL: ±30 s with median288 override) |
| Direct lag | 5,323 | Equalizer direct lag map replaces the PID/EWMA selector (now HISTORICAL): target = B0 if lag ≤ 0, else min(lag, ceiling); up immediate, down at least 1 level/block. No bitsQ change. |
| V8 cliff | 5,750 | 43-profile table E7–H35 (was 40 profiles E4–H35). HISTORICAL single-step relief valve (5,750–6,549): profile drops to E7 after 605 s without a block. H13 ceiling (was H12). Removes H10/H11 dead-zones during stalls. |
| V9 staged | 6,550 | Staged relief cascade: drop 3 profile levels every 60 s starting at 540 s elapsed. Floor stays at E7. Future-drift cap MAX_FUTURE_DRIFT_STAGED=60 s. |
| V10 granular | 6,700 | Granular relief cascade: drop 1 profile level every 60 s starting at 600 s elapsed. Lag-advance disabled at this height — lag is computed strictly from chain.back().time, validation deterministic w.r.t. block.timestamp. Floor stays at E7. No supply / reward change. |
| V11 Slingshot | 7,000 | Slingshot single-shot bitsQ relief activates (dual-gate, single tier): when prev_elapsed > 1,800 s and current_elapsed > 600 s, bitsQ = bitsQ_avg288 × 0.875 (−12.5%). Self-resetting, no compounding. Additional liveness layer above the relief cascade — see the Slingshot Relief section. Equalizer relief cascade becomes linear (HISTORICAL). |
| V11 Phase 2 | 7,100 | Consensus surface upgrade alongside cASERT: SbPoW (Signature-Bound PoW) activation — every valid block requires a Schnorr-style signature from the miner identity key over the block header, making pool topologies that delegate work without sharing the key cryptographically self-defeating. DTD lottery activates simultaneously (bootstrap 2-of-3 cadence; the 1-of-3 cadence opens at V11_PHASE2_HEIGHT + LOTTERY_HIGH_FREQ_WINDOW = 7,100 + 5,000 = 12,100 and ran until #25,000 — since V15 the DTD draws on every block, 3-of-3). Equalizer relief cascade becomes triangular with cap 21 levels (HISTORICAL). No change to cASERT bitsQ math or to the equalizer profile table; cASERT continues to feed powDiffQ to ConvergenceX exactly as before. Anti-pool primary defense. |
| V12 | 7,350 | Equalizer hardening ceiling rises H13 → H20. Active profile set grows from 21 (E7..H13) to 28 (E7..H20). 15 profiles H21..H35 remain reserved for V13. validator_profile_ceiling_at(height) returns H20 from this height. Slingshot reworked to a single-gate 5-tier same-block ladder keyed on current_elapsed (T1 −6.5% @20 min → T5 −50% @180 min). V12 triangular cascade (current): from 540 s elapsed, n = min(1+(elapsed−540)/60, 7), drop n(n+1)/2 — 1/3/6/10/15/21/28 levels, floor E7. |
| V13 | 12,000 | Coordinated hard fork combining four consensus-level changes. (1) cASERT equalizer ceiling rises H20 → H35 — the full 43-profile range E7..H35 becomes active for the first time, closing the equalizer calibration started in V6. (2) DTD lottery cooldown 5 → 6: lottery_exclusion_window_at(height) returns 6 for height ≥ V13_HEIGHT, restoring deterministic 2-firing exclusion under the 1-of-3 cadence that ran from block 12,100 (superseded at #25,000 by the every-block 3-of-3 cadence). (3) Future-timestamp drift cap 60 s → 30 s: max_future_drift_at(height) returns 30 for height ≥ V13_HEIGHT — NTP synchronisation strongly recommended post-V13; any host whose clock is more than 30 s ahead of true time will produce blocks that every validator rejects. (4) Beacon Phase II-A activates: BEACON_PHASE2A_ACTIVATION_HEIGHT = V13_HEIGHT. RC1 metadata signed (release_status = signed_metadata_only). DTD flip at 12,100 is automatic and verified. |
| V14 | 15,000 | H3/H4 consensus hardening (already in deployed binaries — no node re-update needed). The spend-side Gold Vault governance bundle and the PoPC / Escrow automation once proposed for this height were deferred and never activated: Gold Vault and PoPC are now paused indefinitely / legacy, superseded by the DTD / DTD Jackpot architecture. No cASERT bitsQ or equalizer change. |
| V14.5 | 16,000 | Atomic-swap HTLC CLAIM/REFUND consensus fix (EVM leg). Functional gate for the on-chain HTLC path. No cASERT bitsQ or equalizer change. |
| V14.7 | 17,000 | Atomic-swap relay/policy flag-day — mempool relay and standardness rules for HTLC transactions. No cASERT bitsQ or equalizer change. |
| V15 | 25,000 | DTD Jackpot goes live. The reserve already accumulated in the Gold Vault + PoPC addresses is redistributed to DTD winners on a 288-block cadence (~48 h), first jackpot at #25,290, base 100 / cap 500 SOST, rollover, draining over ~3 years — supply-neutral (no new emission). Constitutional reserve freeze: those outputs become spendable only by the canonical jackpot transaction (S13). Emission transition — the 25%+25% coinbase allocations now feed the DTD distribution. Atomic-swap dashboard; BTC HTLC code present but gated OFF. No cASERT bitsQ or equalizer change. |
| V16 | 30,000 | DTD Jackpot V2. From this height the jackpot becomes an independent, node-gated, linear-PoW-weighted draw: eligibility = an active node identity (NODE_BIND + per-epoch heartbeats) with a valid SbPoW key and ≥3 SbPoW blocks in the last 5,000; win chance is linear in SbPoW blocks. No jackpot cooldown, no anti-dominance. Base 100 / cap 500 SOST, rollover, paid from the existing reserve (supply-neutral). First V2 draw #30,186. Normal DTD is unchanged and does not require any node bind. No cASERT bitsQ or equalizer change. |
All forks are forward-only (no regenesis). Nodes enforce fork rules based on block height. Since V13, cASERT’s bitsQ controller and equalizer profile table are unchanged — V14 through V16 are consensus-surface upgrades (atomic swap, DTD Jackpot, DTD Jackpot V2) that add no new bitsQ or equalizer rule. The current cycle runs through V16 at block 30,000 (DTD Jackpot V2; first V2 draw #30,186). Gold Vault and PoPC spend-side governance proposed during the V13/V14 review were deferred and are now paused/legacy, superseded by the DTD / DTD Jackpot architecture.
| Feature | Description |
|---|---|
| Anti-stall decay | Decay activates after 3,600s (60 min, current; 7,200s HISTORICAL before #4,300) without a block — zone-based, proportional, no ceiling |
| Level system | Discrete levels (not continuous) for deterministic consensus — any two nodes compute the same level |
| Floor at B0 | Chain always gets at least B0 stability requirements, even when behind schedule |
| Stateless recalculation | Any node can compute the cASERT level from the chain alone, no extra state needed |
| ConvergenceX integration | cASERT adjusts the stability_metric threshold, not the PoW target directly |
| Contraction coefficient | c = 7/10, ensuring d_final <= 0.7 * d_initial + margin |
The anti-stall decay ensures liveness under sudden hashrate loss. If no valid block arrives for DECAY_START seconds, the cASERT hardening is gradually reduced. This decay is deterministic and computed from the timestamp of the previous block, making it fully verifiable by all nodes.
| Condition | Response |
|---|---|
| Stall < activation threshold | No decay — cASERT level applies at full scale |
| Stall >= activation threshold | decay_factor reduces cASERT scale progressively |
| Result | Mining continues even if hashrate drops dramatically |
| Parameter | Value | Description |
|---|---|---|
| BITSQ mode (current) | avg288-based (5,175+) | Compares avg of last 288 block intervals vs 600s target. Half-life exponential preserved for pre-5175 blocks only |
| BITSQ dynamic cap | 0%/0.5%/1.0%/2.0%/3.0% (5,270+) | Dead band ±15s (0%), then 0.5% (15–60 s), 1.0% (60–120 s), 2.0% (120–240 s), 3.0% (>240 s). Median removed from consensus (block 5,270+) |
| Legacy HALF_LIFE | V1: 172,800s (48h), V2: 86,400s (24h) | Preserved for historical blocks: V1 genesis–1,449, V2 1,450–5,174 |
| Legacy DELTA_CAP | V1: 6.25%, V2: 12.5% | Preserved for historical blocks: V1 genesis–1,449, V2 1,450–5,174 |
| TARGET_SPACING | 600s | 10-minute target between blocks |
| BLOCKS_PER_EPOCH | 131,553 | Blocks per difficulty epoch (~2.5 years) |
| GENESIS_BITSQ | 765,730 | Initial difficulty in Q16.16 (11.6841, calibrated) |
| MIN_BITSQ | 65,536 | Minimum difficulty (1.0 in Q16.16) |
| MAX_BITSQ | 16,711,680 | Maximum difficulty (255.0 in Q16.16) |
| CASERT_H_MIN / H_MAX | -7 / 35 | Profile range: E7 (deep easing) to H35 (max hardening); 43 profiles. Pre-V12 (#5,750..#7,349): 21 active E7–H13. V12 (#7,350..#11,999): 28 active E7–H20. V13 (#12,000+): 43 active E7–H35 (full range). |
| CASERT_K_R | 0.05 | Instantaneous rate gain (was 0.25) — HISTORICAL (PID/EWMA, bypassed since #5,323) |
| CASERT_K_L | 0.40 | Schedule lag gain — dominant (was 0.10) — HISTORICAL (PID/EWMA, bypassed since #5,323) |
| CASERT_K_I | 0.15 | Integrator gain (was 0.05) — HISTORICAL (PID/EWMA, bypassed since #5,323) |
| CASERT_K_B | 0.05 | Burst score gain (was 0.30) — HISTORICAL (PID/EWMA, bypassed since #5,323) |
| CASERT_K_V | 0.02 | Volatility gain (was 0.10) — HISTORICAL (PID/EWMA, bypassed since #5,323) |
| SLEW_RATE | ±1/block (V6+) | HISTORICAL (V3: ±3, V6 block 5,000: ±1, until #5,322). Current: up immediate, down at least 1 level/block (direct lag map) |
| ANTISTALL_FLOOR_V6C | 3,600s | 60-minute stall before anti-stall decay activates (current; 7,200s HISTORICAL before #4,300) |
| SLINGSHOT relief | V11 #7,000 / V12 #7,350 | Single-shot bitsQ relief. V11: dual-gate −12.5%. V12: 5 tiers on current_elapsed — T1 −6.5% (20m), T2 −12.5% (30m), T3 −25% (60m), T4 −37.5% (120m), T5 −50% (180m). Applied after avg288/dynamic-cap, re-clamped to MIN_BITSQ; self-resetting |
| ANTISTALL_DECAY | zone-based | First drop immediate, then H35–H7: 600s/lvl, H6–H4: 900s/lvl, H3–H1: 1200s/lvl. Decays to B0. After 6h at B0: −1 level per 1,800s down to E7. |
| Safety: behind schedule | cap B0 | Never harden when chain is behind schedule (lag ≤ 0) |
| Safety: <10 blocks | cap B0 | HISTORICAL (PID era): require 10 blocks before any hardening |
| CX_C_NUM / CX_C_DEN | 7/10 | Convergence ratio for stability test |