low level vulnerablity
Use .call instead of .transfer to send ether
.transfer will relay 2300 gas and .call will relay all the gas. If the receive/fallback function from the recipient proxy contract has complex logic, using .transfer will fail, causing integration issues.Unbounded loop
1 | function claimGovFees() public { |
Use time units directly
1 | uint constant private DAY = 24 * 60 * 60; |
Chainlink price feed is not sufficiently validated and can return stale price
1 | (uint80 roundId, int256 assetChainlinkPriceInt, , uint256 updatedAt, uint80 answeredInRound) = IPrice(_chainlinkFeed).latestRoundData(); |
- Use the safe variant and ERC721.mint
- Add an event for critical parameter changes
- Declare interfaces on separate files
- Constants should be upper case
- Replace constant private with private constant