exceptions are state-reverting
an exception undoes all changes made to the state in the current call and flag an error to the caller
assert
test for internal errors. Shouldn’t be triggered for a properly. functioning code
require
check conditions
revert
flag an error and revert the current call
assert-style exceptions consumes all gas available and
require-style exceptions does not