Язык принимает определенные принципы проектирования, чтобы сделать контракты удобными и, следовательно, более легкими в рассуждении:
Разделение между вычислением и коммуникацией: каждое вычисление в контракте (например, изменение его баланса или вычисление значения функции) реализуется как автономный атомарный переход, то есть без участия каких-либо других сторон. Всякий раз, когда такое участие требуется (например, для передачи управления другой стороне), переход будет заканчиваться явным сообщением посредством отправки и получения сообщений.
Разделение между эффективными и чистыми вычислениями: любые внутриконтрактные вычисления, происходящие во время перехода, должны завершаться и иметь предсказуемый эффект на состояние контракта и выполнение.
Разделение между вызовом и связанными вызовами контрактов: язык разрешает только хвостовые вызовы, то есть каждый вызов внешней функции (то есть другого контракта) должен выполняться как абсолютно последняя инструкция.