There are two aspects that must be taken into account when choosing between assert () and require () A reservation: if you write unit tests that are intentionally contrary to contracts, you may have to deal with ContractException – Jon Skeet explains it well here. Wiring z.B. a Contract.ContractFailed-Handler in your test configuration with a handler that calls SetHandled, and then throws a public exception that you can intercept and maintain in your UTs. The require function should be used to ensure that valid conditions, such as contract inputs or status variables, are met, or to verify return values for calls from external contracts. If the application is correct, the analysis tools can evaluate your contract to identify the conditions and functional calls that lead to a failed implementation. Code that works correctly should never get an instruction from Assert that failed. If this happens, there is an error in your contract that you should correct. A non-assertion agreement (abbreviated non-assertion) is an agreement entered into by a party not to enforce any patents or other intellectual property rights it may have against another party or party. Non-uses are often used as patent infringement settlement agreements designed and designed with the aim of pre-emptively resolving future infringement disputes. Basically, Assert is only there to avoid something really serious, but it shouldn`t be possible for the condition to be deemed wrong. assert is condition-only because static code analysis tools (perhaps solidity compilers in future releases) will be able to detect the developer`s error warning at compile time. The require () and assert () functions were added to solidity before the Byzanz fork in v0.4.10.
Before Byzantium, they behaved identically, but they were already compiled into different opcodes. This meant that some contracts concluded before Byzanz behaved differently after the range, the main difference being the repayment of unused gas. You can use two different types of assertions – Debug.Assert and Contract.Assert. If you only need to verify the prerequisites in a debugging environment, use the Contract Assert code provider, if not the Contract.Assert Contract code provider, and the prerequisites are checked in both debug and output environments. When should I debug.assert on code contracts or vice versa? I want to check the condition of a method and I am confused to choose one over the other….