Smart contracts can be described as digital contracts where the terms of the deal between two or more parties are set in the form of code. They are capable of verifying if the terms of the deal have been met or not. These vulnerabilities are hard to spot during development as they have been inherited from the design phase making auditing mandatory.