Cutoff

A Benchmarker’s cutoff is a cap on the number of their solutions that can earn rewards, it is used when determining qualifiers. In TIG, a “cutoff” is attributed to each Benchmarker, this limits the number of their solutions which can qualify for block rewards. The cutoff acts as a hard defense, ensuring that Benchmarkers balance their Proof of Work, this protects the protocol against manipulation of the Pareto Frontier.

Calculation of the Cutoff

For each challenge xx, a Benchmarker ii is attributed a cutoff, denoted cutoffi,x{cutoff}_{i,x}. Benchmarkers are capped by their cutoffi,x{cutoff}_{i,x}, that is, Benchmarker ii can’t have more than cutoffi,x{cutoff}_{i,x} qualifiers for challenge xx. A Benchmarker’s cutoff is recalculated every block:

Case 1: If Benchmarker ii has less than 10 active solutions in each challenge:


cutoffi,x=0\text{cutoff}_{i,x} = 0

Case 2: Otherwise:


cutoffi,x=max{10,  moving_challenge_factori×1.2×max{total_qualifiersx,5000}}\text{cutoff}_{i,x} = \text{max}\Big\{ 10,~~ \text{moving\_challenge\_factor}_i \times 1.2 \times \text{max}\{\text{total\_qualifiers}_x, 5000\} \Big\}

The first component of the cutoff provides a minimum failsafe that stops Benchmarkers from submitting a small amount of unbalanced proof-of-work. Without this, a Benchmarker could sidestep significant imbalance penalties by spreading activity across multiple aliases, possibly exploiting free compute.

If a Benchmarker has more than 10 solutions in each challenge, then the second component of the cutoff is active. Note that a Benchmarker ii‘s moving_challenge_factori{moving\_challenge\_factor}_i is a moving average of their challenge factors across all challenges. If there are nn challenges, then at block tt, moving_challenge_factori{moving\_challenge\_factor}_i is calculated as:


moving_challenge_factori(t)=(1w)challenge_factori(t)+wmoving_challenge_factori(t1)\text{moving\_challenge\_factor}_i(t) = (1-w) \cdot \langle \text{challenge\_factor}_i(t) \rangle + w \cdot \text{moving\_challenge\_factor}_i(t-1)

where ww is a weight initially set to 0.80.8. Note that challenge_factori(t)\langle \text{challenge\_factor}_i(t) is the average of the challenge factors of Benchmarker ii from the previous block.

This second component of the cutoff ensures that once a Benchmarker has solved at least 10 instances across all challenges, they can qualify for rewards, and the 1.2 multiplier allows their cutoff to grow gradually. We use a moving average to avoid situations where a sudden upward shift in the Pareto frontier would instantaneously reduce a Benchmarker’s qualifiers to zero, imposing an overly harsh penalty.