The LibWellMinting contract has ABIEncoderV2 enabled, as seen by the pragma directive `pragma experimental ABIEncoderV2. This experimental feature allows the contract to use complex types, such as structs and arbitrarily nested arrays, in function arguments and return values.
Albeit, the use of ABIEncoderV2 comes with certain risks, particularly when dealing with types shorter than 32 bytes, such as bytesNN
, bool
, and enum
, when they are part of an array or a struct and encoded directly from storage. In such cases, if these storage references are used directly inside abi.encode(...)
as arguments in external function calls or in event data without prior assignment to a local variable, it can lead to data corruption or invalid reverts.
In short, the LibWellMinting contract has ABIEncoderV2 enabled, which could potentially lead to issues with shorter-than-32-bytes types in certain scenarios.
There are several instances in several contracts which are in scope:
When possible, do not use experimental features in the final live deployment. Validate and check that all the conditions above are true for integers and arrays (i.e. all using uint256).
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.