  Distributed immutable ledgers, or blockchains, allow the secure digitization
of evidential transactions without relying on a trusted third-party. Evidential
transactions involve the exchange of any form of physical evidence, such as
money, birth certificate, visas, tickets, etc. Most of the time, evidential
transactions occur in the context of complex procedures, called evidential
protocols, among physical agents. The blockchain provides the mechanisms to
transfer evidence, while smart contracts - programs executing within the
blockchain in a decentralized and replicated fashion - allow encoding
evidential protocols on top of a blockchain.
  As a smart contract foregoes trusted third-parties and runs on several
machines anonymously, it constitutes a highly critical program that has to be
secure and trusted-by-design. While most of the current smart contract
languages focus on easy programmability, they do not directly address the need
of guaranteeing trust and accountability, which becomes a significant issue
when evidential protocols are encoded as smart contracts.
