Unified consensus-rate control combining bitsQ primary controller, equalizer profiles, and anti-stall for ConvergenceX Proof-of-Work.
cASERT's bitsQ primary controller uses an exponential moving average inspired by BCH's ASERT algorithm (designed by Mark Lundeberg and Jonathan Toomim, November 2020 hard fork). cASERT was designed by NeoB for SOST Protocol (2026), unifying the exponential controller with equalizer profiles and anti-stall decay into a single 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_HALF_LIFE | 43,200s (12 hours) |
| Per-block delta cap | 6.25% |
| TARGET_SPACING | 600s (10 minutes) |
cASERT is a unified three-layer consensus-rate control system: (1) the bitsQ primary controller provides exponential difficulty adjustment, (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.
| Level | Blocks Ahead | Threshold | Behavior |
|---|---|---|---|
| L1 | 0 – 4 | NORMAL | Standard operation, baseline stability requirements |
| L2 | 5 – 25 | CASERT_L2_BLOCKS = 5 | First hardening stage, scale = 2 |
| L3 | 26 – 50 | CASERT_L3_BLOCKS = 26 | Increased stability requirements, scale = 3 |
| L4 | 51 – 75 | CASERT_L4_BLOCKS = 51 | Aggressive hardening, scale = 4 |
| L5 | 76 – 100 | CASERT_L5_BLOCKS = 76 | Near-maximum fixed hardening, scale = 5 |
| L6+ | 101+ | level = 6 + floor((ahead-101)/50) | Unbounded hardening, scale grows with distance |
cASERT only HARDENS difficulty, never relaxes it. When the chain is behind schedule, cASERT bitsQ handles the adjustment. This prevents attackers from exploiting difficulty drops.
The hardening scale equals the level number. Higher levels impose stricter stability_metric thresholds on ConvergenceX, making it progressively harder to produce fast blocks.
If no block is found for an extended period, the cASERT level decays gradually. Activation: dynamic — max(ahead × 600s, 2h). No ceiling. This prevents mining deadlock when hashrate drops suddenly.
Activation: max(450 × 600, 7200) = 270,000s (75 hours)
After activation, decay uses current level tier (not original):
L10→L9→L8: FAST (10min/level) — 30 min
L7→L6→L5→L4: MEDIUM (20min/level) — 80 min
L3→L2→L1: SLOW (30min/level) — 60 min
Total decay L10→L1: 170 min (2h 50m)
Total from mining start: 75h + 2h 50m = ~78 hours
| 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) |
| Feature | Description |
|---|---|
| Anti-stall decay | Decay activates after max(ahead 00D7 600s, 7200s) without a block 2014 proportional, no ceiling |
| Level system | Discrete levels (not continuous) for deterministic consensus — any two nodes compute the same level |
| Floor at L1 | Chain always gets at least L1 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_HALF_LIFE | 43,200s | 12-hour half-life for bitsQ exponential adjustment |
| BITSQ_DELTA_CAP | 6.25% | Per-block relative delta cap for bitsQ adjustment |
| 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_L2_BLOCKS | 5 | Blocks ahead to enter L2 |
| CASERT_L3_BLOCKS | 26 | Blocks ahead to enter L3 |
| CASERT_L4_BLOCKS | 51 | Blocks ahead to enter L4 |
| CASERT_L5_BLOCKS | 76 | Blocks ahead to enter L5 |
| CASERT_L6_BLOCKS | 101 | L6+ unbounded starts here |
| CASERT_DECAY_ACTIVATION | max(ahead00D7600, 7200) | Dynamic: proportional to blocks ahead, floor 2h, no ceiling |
| CASERT_DECAY_FAST_SECS | 600s | L8+: 10 min/level (fast recovery) |
| CASERT_DECAY_MEDIUM_SECS | 1,200s | L4–L7: 20 min/level (medium) |
| CASERT_DECAY_SLOW_SECS | 1,800s | L2–L3: 30 min/level (cautious) |
| Activation | height ≥ 2 | Requires at least 2 blocks in chain |
| CX_C_NUM / CX_C_DEN | 7/10 | Convergence ratio for stability test |