Verifying Smart Contracts