Since assert would consume all gas and require would return all gas, Is there any reason to use assert not require? Use require to refund gas seems always a better choice than consuming them? I saw some explanation in https://ethereum.stackexchange.com/questions/15166/difference-between-require-and-assert-and-the-difference-between-revert-and-thro but I still don't get it, why choosing a command that consuming all gas, any benefit?