The Escrow
contract's Finite State Machine architecture makes ReentrancyGuard
overkill and wastes both gas and bytecode.
The Escrow#resolveDispute()
function is marked nonReentrant
, but it also utilizes the inState(State.Disputed)
modifier and very quickly changes its state before making any state-changing external calls:
Removing the nonReentrant
modifier saves a non-trivial amount of gas and trims bytecode (thereby saving deployment costs) without any adverse consequences.
Unnecessary expenditure of gas.
Manual review.
Remove the nonReentrant
modifier from Escrow#resolveDispute()
and remove the import of OpenZeppelin's ReentrancyGuard
entirely. This is the only usage.
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.