Getting Smart About Smart Contract Vulnerabilities