Designing Smart Contracts