Submitted by Trust, also found by cccz
Exchange.sol#L378
The Blur Exchange supplied docs state:
Off-chain methods
Oracle cancellations - if the order is signed with an expirationTime of 0, a user can request an oracle to stop producing authorization signatures; without a recent signature, the order will not be able to be matched
From the docs, we can expect that when expirationTime is 0 , trader wishes to enable dynamic oracle cancellations. However, the recent code refactoring broke not only this functionality but all orders with expirationTime = 0.
Previous _validateOrderParameters:
New _validateOrderParameters:
Note the requirements on expirationTime in _canSettleOrder (old) and _validateOrderParameters (new).
If expirationTime == 0, the condition was satisfied without looking at block.timestamp < expirationTime.
In the new code, block.timestamp < expirationTime is always required in order for the order to be valid. Clearly, block.timestamp < 0 will always be false, so all orders that wish to make use of off-chain cancellation will never execute.
All orders which use expirationTime == 0 to support oracle cancellation are not executable.
Manual audit, diffing tool
Implement the checks the same way as they were in the previous version of Exchange.
nonfungible47 (Blur) acknowledged and commented:
