# Coding Standards

* The WISE contract is written entirely in Solidity and compiled with solc 0.7.2.
* The code should adhere to the formats prescribed by the [style guide](https://solidity.readthedocs.io/en/v0.7.2/style-guide.html) section of in the official [Solidity 0.7.2 documentation](https://solidity.readthedocs.io/en/v0.7.2/).
* All public interfaces (at a minimum) should be annotated using the [NatSpec format](https://solidity.readthedocs.io/en/v0.7.2/natspec-format.html).
* Unit tests should provide 100% coverage of the source code.  All conceivable edge and corner cases should be covered.
* Function and variable names should convey their purpose and usage as clearly and tersely as possible, in plain English.  Avoid using digits, unnecessary abbreviations, acronyms, shorthand, or slang.
* Functions should be as short as is practical.  They should do what their name implies, and not much else.  A good rule of thumb is that a function should try to be viewable in its entirety on a typical monitor, at a typical font size, if at all possible.
* Comments should be employed wisely.  Don't comment to explain what code does.  Good function and variable names will accomplish that.  Rather, use comments to explain why something is coded a certain way,  Use comments to explain any non-obvious technical points or decisions involved in a piece of code.
* `require()` function calls should return a short but descriptive error message, always prefixed with "WISE: ".
* Avoid duplicated code (don't repeat yourself).
* Wherever possible and practical, write with gas efficiency as a priority.  Some parts of the code may sacrifice minuscule gas efficiencies for various important reasons.  When deemed to be of greater value, code legibility, clean architecture, and a straightforward and fully featured end-user experience should take priority over such tiny gas savings.
