Uniswap v4 dynamic LP fees are expressed in units where 1e6 = 100%, i.e., fee rates are in hundredths of a bip. A sell fee of 3000 represents 0.3% (3000 / 1_000_000). When emitting analytics events, the computed feeAmount should use the same denominator so off-chain systems and dashboards reflect the correct fee magnitude.
In _beforeSwap(), the event ReFiSold(sender, swapAmount, feeAmount) computes feeAmount using a denominator of 100000 instead of 1_000_000. This scales the reported fee by 10× (e.g., 3000 becomes ~3%), misleading analytics, alerting systems, and revenue accounting that rely on the event.
Likelihood: High
Happens on every sell swap where the hook emits ReFiSold, regardless of pool, users, or amounts.
Occurs continuously in production usage; no special edge case required.
Impact: Low
Analytics misinformation: Off‑chain dashboards and data pipelines will record 10× larger fees than actually charged, corrupting revenue metrics, trader cost analysis, and protocol reporting.
Operational errors: Treasury forecasting, alerts, and fee‑based automations may trigger incorrectly (e.g., assuming unusually high fees or revenue), leading to misguided decisions.
This test that demonstrates the discrepancy between the event’s feeAmount and the correct calculation:
Use the correct denominator 1_000_000 (1e6) for dynamic fees:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.