Scilla (short for Smart Contract Intermediate-Level LAnguage) is an intermediate-level smart contract language being developed for the Zilliqa blockchain. Scilla is designed as a principled language with smart contract safety in mind.
Scilla imposes a structure on smart contracts that will make applications less vulnerable to attacks by eliminating certain known vulnerabilities directly at the language-level. Furthermore, the principled structure of Scilla will make applications inherently more secure and amenable to formal verification.
The language is being developed hand-in-hand with formalization of its semantics and its embedding into the Coq proof assistant — a state-of-the art tool for mechanized proofs about properties of programs. Coq is based on advanced dependently-typed theory and features a large set of mathematical libraries. It has been successfully applied previously to implement certified (i.e., fully mechanically verified) compilers, concurrent and distributed applications, including blockchains among others.
Zilliqa — the underlying blockchain platform on which Scilla contracts are run — has been designed to be scalable. It employs the idea of sharding to validate transactions in parallel. Zilliqa has an intrinsic token named Zilling (ZIL for short) that are required to run smart contracts on Zilliqa.
Scilla is under active research and development and hence parts of the specification described in this document are subject to change. Scilla currently comes with an interpreter binary that has been integrated into two Scilla-specific web-based IDEs. Trying out Scilla presents the features of the two IDEs.
There are several resources to learn about Scilla and Zilliqa. Some of these are given below:
- Scilla Design Principles
- Trying out Scilla
- Scilla by Example
- A Second Example: Crowdfunding
- A Third Example: A Simple Token Exchange
- Scilla in Depth
- Structure of a Scilla Contract
- Primitive Data Types & Operations
- Algebraic Datatypes
- More ADT examples
- Standard Libraries
- User-defined Libraries
- Scilla versions
- The Scilla Standard Library
- Scilla Tips and Tricks
- The Scilla checker
- Interpreter Interface