A Guide to Formal Verification of Smart Contracts