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-0003·configuration

Expert tier fee coefficient duplicates the Community constant, underpaying Expert jurors

Fixedescrowarbitrationdispute-resolution
TL;DR

The Expert tier fee coefficient is a copy of the Community constant with a one-digit slip. Expert jurors are paid about 2.2x below schedule, and the appeal deposit and slash caps derived from it are under-sized by the same factor.

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

Description

The three tier fee coefficients are:

solidity
uint256 internal constant TIER_FEE_COEFF_COMMUNITY = 2_828_427_124_748_380_195;
uint256 internal constant TIER_FEE_COEFF_VERIFIED = 4_472_135_955_001_158_785;
uint256 internal constant TIER_FEE_COEFF_EXPERT = 2_828_427_124_746_380_195;

COMMUNITY and EXPERT are the same value differing by 2,000,000 wei out of roughly 2.83e18 — ...124_748_380_195 against ...124_746_380_195, a difference in the thirteenth significant digit. This is a copy of the Community constant with a digit slip, not an independently derived value.

Each coefficient should be the fee at the top of its band divided by the square root of that band ceiling: Community 2000/sqrt(500k) = 2.8284, Verified 10000/sqrt(5M) = 4.4721, Expert 20000/sqrt(10M) = 6.3246. The Expert slot holds the Community figure instead, and because it is also lower than the Verified coefficient, the fee is non-monotonic across the band boundary.

Vulnerable Scenario: The following steps illustrate the issue:

  1. A dispute opens with a base of 5,000,000 cNGN. caseTier returns 1 (Verified) and _sqrtFee computes 4.4721e18 x sqrt(5e24) / 1e9 = 10,000 cNGN per juror.
  2. A second dispute opens with a base of 5,000,001 cNGN — one wei larger. caseTier now returns 2 (Expert) and _sqrtFee computes 2.8284e18 x sqrt(5e24) / 1e9 = 6,324 cNGN per juror.
  3. The fee falls 37% for a larger dispute, decided by jurors required to stake 500,000 cNGN instead of 200,000.
  4. At the documented Expert reference point of 10,000,000 cNGN the fee is 8,944 cNGN against an intended 20,000, and the tierFeeCapExpert cap does not bind until a dispute base near 50,000,000 cNGN.
03Section · Impact

Impact

Expert jurors are paid roughly 2.2x below the intended schedule across the entire Expert band, at the tier with the highest stake requirement and the hardest recruitment.

Because _minAppealDeposit, the dissent slash cap in cappedSlashFromStakeRate, and the overturn slash cap in cappedSlashFromBps are all derived from the case fee, each falls with it — so appealing and misvoting on the largest disputes are cheaper than on smaller ones.

04Section · Recommendation

Recommendation

Set TIER_FEE_COEFF_EXPERT to the derived value, approximately 6_324_555_320_336_759_000, and add unit tests asserting caseTierFee output at each band edge against the intended schedule — 2,000 at 500k, 10,000 at 5M, and the 20,000 cap binding at 10M. The absence of any test asserting a fee value is why a duplicated constant survived.

05Section · Resolution

Resolution

Fixed. The Expert coefficient is now 6_324_555_320_337, distinct from Community's 2_828_427_124_748. Crossing from Verified into Expert now pays more per juror rather than less, and the shipped fee matches the designed one.

06Section · Affected files

Affected files

  • contracts/lib/ArbitrationPoolLib.sol#L67-L69
  • contracts/lib/ArbitrationPoolLib.sol#L140-L150
Status
Fixed
F-2026-0003