Skip to main content

Safety Bounds & Parameters

Reference: Signals CLMSR Whitepaper v1.0 -- §7-§11, Appendix B

This section documents the guardrails that keep Signals predictable. Operators can use it as a checklist when configuring new markets; auditors can map each constant to its on-chain definition to confirm that the implementation enforces the theory.

Maker loss remains bounded

The CLMSR maker's worst-case loss is

Lossmax=αln(n)\text{Loss}_{\max} = \alpha \ln(n)

where α\alpha is the liquidity parameter and nn the number of bins. Narrower tick spacing increases nn and therefore the bound, so operators should size α\alpha according to their tolerance: choose alpha = Loss_target / ln(n) to align the model with the treasury budget. Because the loss formula depends only on α\alpha and nn, you can predict the bound before deploying a market.

Guards inside the lazy segment tree

Lazy multiplication works because a set of conservative constants keeps exponentials tame:

ConstantPurposeValue
MAX_EXP_INPUT_WADMaximum exponent input per chunk1.0e18
MIN_FACTORSmallest multiplier allowed per update0.01e18
MAX_FACTORLargest multiplier allowed per update100e18
FLUSH_THRESHOLDPending factor threshold that triggers a flush1e21
MAX_TICK_COUNTMaximum number of bins supported1,000,000
MAX_CHUNKS_PER_TXUpper bound on exponential chunks per call1,000

LazyMulSegmentTree.sol enforces the same limits as the whitepaper. Attempts to exceed these numbers revert with explicit errors such as CE.InvalidFactor or CE.BinCountExceedsLimit, making failures easy to diagnose.

Discipline around settlement

  • settleMarket only executes after block.timestamp reaches the configured settlementTimestamp (or endTimestamp when no override exists).
  • Submitted settlement values are clamped into [minTick, maxTick], protecting the pool from outlier prints.
  • Settlement emits per-position results deterministically, keeping gas bounded even when thousands of ranges remain open.

Implementation status

ItemWhitepaperContracts
Constants aboveNormative✅ Matches (LazyMulSegmentTree.sol, CLMSRMarketCore.sol)
Claim expiryNot specifiedNo expiry (old guidance referencing “90 days” has been removed)
Timelock / multisigOut of scopeCore stays Ownable; governance wrappers will be documented separately

If new governance controls or oracle sources are added, they will appear as extensions layered on top of this base spec. The CLMSR mechanism itself--loss bounds, chunking limits, rounding rules--remains unchanged.