assertPurpose:
assert fails → there is a bug in your code.Example:
uint public balance;
function deposit(uint _amount) public {
balance += _amount;
// critical invariant check
assert(balance >= _amount); // balance cannot possibly go below amount after adding
}
👉 If assert fails, something is horribly wrong — logic bug, overflow (pre-Solidity 0.8), etc.
Use assert sparingly, for impossible-to-fail conditions.
requirePurpose:
require fails → transaction is revertedExample:
function deposit(uint _amount) public {
require(_amount > 0, "Amount must be positive");
require(balance + _amount >= balance, "Overflow"); // precondition check
balance += _amount;
}