assert corresponds to conditions that must never happen if the smart-contract code is correct my intuition tells me that someone calling an smart-contract that raises an assert must never be "punished" with gas expenditure since caller was not to fault. (Maybe nodes ought to black-list smart-contracts raising asserts and/or a mechanism be in place to allow to redirect new version/patched contracts with no assert).
On the opposite
require corresponds to checks on the input data to functions, so my intuition tells me that invocation with incorrect data ought to be punished.
I think there is something I do NOT understand, or I just completely misunderstood the original intention of