Auditing Smart Contract: Best Practices and Pitfalls