Used pragma solidity ^0.8.0
to indicate the lowest compiler version so as to ensure all contracts and dependencies are compiled accurately.
Used require
to perform validations of input parameters in functions.
Used assert
to validate situations that should never happen, especially after state changes. Used this towards the end of functions.
Used function modifiers to only perform validations of input parameters.
Removed or commented out unused variables.