Scilla short for Smart Contract Intermediate-Level LAnguage is an intermediate-level smart contract language being developed for Zilliqa. Scilla has been 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.
Note that Scilla does not have a type checker implemented yet and hence type safety of contracts written in Scilla is not guaranteed.
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
- Scilla in Depth
- Structure of a Scilla Contract
- Primitive Data Types & Operations
- Algebraic Data Types (ADTs)
- More ADT examples
- Interpreter Interface