Early rate$2,400 of senior audit time for $500. Early members keep the rate as it climbs.$2,400 of senior audit time for $500See how →
F-2026-0027·logic-error

Rejection-sampling fallback is biased toward registry order

Fixedescrowarbitrationdispute-resolution
TL;DR

After the rejection-sampling limit, selection falls back to the first eligible juror in registry order rather than drawing uniformly, giving earlier registry positions a small deterministic advantage.

Severity
LOW
Impact
LOW
Likelihood
MEDIUM
Method
MManual review
CAT.
Complexity
MEDIUM
Exploitability
LOW
02Section · Description

Description

After MAX_SELECTION_ATTEMPTS (128) rejections for a panel slot, selection falls back to the first non-excluded entry in registry order rather than drawing uniformly from the remainder:

solidity
if (!found) {
for (uint256 i = 0; i < eligibleCount; i++) {
if (!excluded[i]) { panel[picked] = eligible[i]; ... break; }
}
}

Earlier registry positions therefore receive a small deterministic advantage in selection, most pronounced when the panel is near-saturated relative to the eligible set. The effect is bounded and applies only to draws that exhaust rejection sampling.

03Section · Recommendation

Recommendation

When rejection attempts are exhausted, draw uniformly from the bounded list of remaining eligible indices using fresh entropy derived from the same seed.

04Section · Resolution

Resolution

Fixed. On exhausted rejection sampling the fallback now draws uniformly from the remaining survivors using fresh entropy, rather than taking the first entry in registry order.

05Section · Affected files

Affected files

  • lib/ArbitrationPoolSelectLib.sol#L123-L133
Status
Fixed
F-2026-0027