回滚机制(reverting)是为了确保transaction的原子性,主要分为require样式和assert样式。
assert用于检查程序运行条件是否满足(例如数组访问是否越界)
require用于检查用户输入或外部调用返回值
执行失败需要给出异常提示,throw
已经deprecated,应该采用revert()
如果采用throw
抛出异常,所有的剩余gas
都会消耗殆尽;而采用revert()
的话,会回滚以前所有transaction
的状态,同时交还没有消耗完的gas