Formal Verification of Smart Contracts