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+). Block 5,323 hotfix. The half-life exponential is preserved for pre-5175 blocks only. cASERT was designed by NeoB for SOST Protocol (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+). Block 5,323 hotfix |
| Median288 | Median removed from consensus (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) and H20 from V12 (#7,350+). Profiles H14–H20 activate at V12 #7,350; H21–H35 stay reserved (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 | R | +21 | 2 | 13 | 13 | 115 | 338 |
| H22 | R | +22 | 2 | 13 | 14 | 115 | 364 |
| H23 | R | +23 | 2 | 14 | 14 | 115 | 392 |
| H24 | R | +24 | 2 | 14 | 15 | 115 | 420 |
| H25 | R | +25 | 2 | 15 | 15 | 115 | 450 |
| H26 | R | +26 | 2 | 15 | 16 | 115 | 480 |
| H27 | R | +27 | 2 | 16 | 16 | 115 | 512 |
| H28 | R | +28 | 2 | 16 | 17 | 115 | 544 |
| H29 | R | +29 | 2 | 17 | 17 | 115 | 578 |
| H30 | R | +30 | 2 | 17 | 18 | 115 | 612 |
| H31 | R | +31 | 2 | 18 | 18 | 115 | 648 |
| H32 | R | +32 | 2 | 18 | 19 | 115 | 684 |
| H33 | R | +33 | 2 | 19 | 19 | 115 | 722 |
| H34 | R | +34 | 2 | 19 | 20 | 115 | 760 |
| H35 | R | +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+) — 7 additional profiles H14 through H20 (new ceiling).
R = Reserved — H21 through H35 post-V12 (15 profiles). Defined in specification, reserved for future activation as network hashrate grows. Relief valve: V8 single E7 cliff at 605 s (5,750+) → V9 staged drop 3/60 s from 540 s (6,550+) → V10 granular drop 1/60 s from 600 s (6,700+). Floor stays at E7.
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+). This completes the cASERT equalizer calibration.
The equalizer operates bidirectionally: E7–E1 ease stability (only after 6h extra at B0), B0 is the baseline, H1–H35 harden when blocks are fast. All 43 profiles defined. Pre-V12: 21 active E7–H13, 22 reserved H14–H35. V12 (#7,350+): 28 active E7–H20, 15 reserved H21–H35. Safety rules cap at B0 when behind schedule or with <10 blocks. Slew rate: ±1 profile level per block (V6, block 5,000+).
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. H5–H35 use scale=2 (V6 calibration). H35 is the hardest reserved 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: always 7,200s (2 hours) since V3.1. Easing profiles E1–E4 activate only after 6 hours extra at B0. This prevents mining deadlock when hashrate drops suddenly.
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
Decay stops at B0. Easing E1–E4 only after 6 hours extra at B0.
| 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 always 7,200s |
| V4 | 4,200 | Ahead Guard: clamps bitsQ relaxation to 1.56%/block when chain ≥16 blocks ahead (H8+). Hysteresis: enter ≥16, exit ≤8 |
| 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+). Block 5,323 hotfix |
| V8 cliff | 5,750 | Single-step relief valve: 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. |
All forks are forward-only (no regenesis). Nodes enforce fork rules based on block height.
| Feature | Description |
|---|---|
| Anti-stall decay | Decay activates after 7,200s (always 2 hours) 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 scales with deviation. Median removed from consensus (block 5,270+). Block 5,323 hotfix |
| 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 | -4 / 35 | Profile range: E7 (deep easing) to H35 (max hardening); 43 profiles. Pre-V12: 21 active E7–H13. V12 (#7,350+): 28 active E7–H20. |
| CASERT_K_R | 0.05 | Instantaneous rate gain (was 0.25) |
| CASERT_K_L | 0.40 | Schedule lag gain — dominant (was 0.10) |
| CASERT_K_I | 0.15 | Integrator gain (was 0.05) |
| CASERT_K_B | 0.05 | Burst score gain (was 0.30) |
| CASERT_K_V | 0.02 | Volatility gain (was 0.10) |
| SLEW_RATE | ±1/block (V6+) | Max profile change per block (V3: ±3, V6 block 5,000: returned to ±1) |
| ANTISTALL_FLOOR | 7,200s | 2-hour minimum before anti-stall decay activates |
| ANTISTALL_DECAY | zone-based | H35–H7: 600s/lvl, H6–H4: 900s/lvl, H3–H1: 1200s/lvl. Decays to B0. E1–E4 after 6h at B0. |
| Safety: behind schedule | cap B0 | Never harden when chain is behind schedule (lag ≤ 0) |
| Safety: <10 blocks | cap B0 | Require 10 blocks before any hardening |
| CX_C_NUM / CX_C_DEN | 7/10 | Convergence ratio for stability test |