  The Ethereum blockchain platform supports the execution of decentralised
applications or smart contracts. These typically hold and transfer digital
currency to other parties on the platform; however, they have been subject to
numerous attacks due to the unintentional introduction of bugs. Over a billion
dollars worth of currency has been stolen since its release in July 2015. As
smart contracts cannot be updated after deployment, it is imperative that the
programming language supports the development of robust contracts.
  We propose Flint, a new statically-typed programming language specifically
designed for writing robust smart contracts. Flint's features enforce the
writing of safe and predictable code. To encourage good practices, we introduce
protection blocks. Protection blocks restrict who can run code and when (using
typestate) it can be executed. To prevent vulnerabilities relating to the
unintentional loss of currency, Flint Asset traits provide safe atomic
operations, ensuring the state of contracts is always consistent. Writes to
state are restricted, simplifying reasoning about smart contracts.
