The language adopts certain design principles to make contracts tractable and hence easier to reason about:
Separation between computation and communication: Every in-contract computation (e.g., changing its balance or computing a value of a function) is implemented as a standalone, atomic transition, i.e., without involving any other parties. Whenever such involvement is required (e.g., for transferring control to another party), a transition would end, with an explicit communication, by meansSee full review