Use for checking invariants that should never be false. If an `assert` fails, it indicates a bug in your code, not invalid user input. Before Solidity 0.8.0, `assert` consumed all remaining gas (using the `INVALID` opcode); since 0.8.0, it reverts cleanly like `require`. Still, the semantic conventi