[L-01] Avoid floating pragmas for non-library contracts.
Impact
While floating pragmas make sense for libraries to allow them to be included with multiple different versions of applications, it may be a security risk for application implementations.
A known vulnerable compiler version may accidentally be selected or security tools might fall-back to an older compiler version ending up checking a different EVM compilation that is ultimately deployed on the blockchain.
It is recommended to pin to a concrete compiler version.
[L-03] _safemint() should be used rather than _mint() wherever possible
Impact
_mint() is discouraged in favor of _safeMint() which ensures that the recipient is either an EOA or implements IERC721Receiver. Both OpenZeppelin and solmate have versions of this function
[L-01] Avoid floating pragmas for non-library contracts.
Impact
While floating pragmas make sense for libraries to allow them to be included with multiple different versions of applications, it may be a security risk for application implementations.
A known vulnerable compiler version may accidentally be selected or security tools might fall-back to an older compiler version ending up checking a different EVM compilation that is ultimately deployed on the blockchain.
It is recommended to pin to a concrete compiler version.
Findings:
[L-02]
require()
/revert()
statements should have descriptive strings.Impact
Consider adding descriptive strings in
require()
/revert()
.Findings:
[L-03]
_safemint()
should be used rather than_mint()
wherever possibleImpact
_mint()
is discouraged in favor of_safeMint()
which ensures that the recipient is either an EOA or implementsIERC721Receiver
. Both OpenZeppelin and solmate have versions of this functionFindings: