Smart Contracts > Smart Contract Languages
Ligo
Last Updated: 29th June 2023
Introduction to LIGO
The LIGO design philosophy can be described as follows:
- Create a clean simple language with no unnecessary parts.
- Offer multiple familiar syntaxes so users can get up and running quickly.
- Encourage people to write simple code, so that it's easy to formally verify the compiled output using a project like Mi-Cho-Coq.
- Significantly reduce the risk that your smart contract will lose its balance to an avoidable exploit.
LIGO is a functional language designed to include the features you need while avoiding patterns that make formal verification hard. Most useful smart contracts can express their core functionality in under a thousand lines of code. This makes them a good target for formal methods, and what can't be easily proven can at least be extensively tested. The simplicity of LIGO also keeps its compiled output unbloated. We hope to have a simple, strongly typed language with a low footprint.
LIGO currently offers two syntaxes:
- JsLIGO, a TypeScript/JavaScript-inspired syntax that aims to be familiar to those coming from TypeScript/JavaScript
- CameLIGO, an OCaml-inspired syntax that allows you to write in a functional style
Let's define a LIGO contract in the two flavours above.
CameLIGO
type storage = int type parameter = Increment of int | Decrement of int | Reset type return = operation list * storage let main (action, store : parameter * storage) : return = [], (match action with Increment n -> store + n | Decrement n -> store - n | Reset -> 0)
JsLIGO
type storage = int; type parameter = ["Increment", int] | ["Decrement", int] | ["Reset"]; type return_ = [list<operation>, storage]; let main = (action: parameter, store: storage) : return_ => { return [ list([]), match(action, { Increment: n => store + n, Decrement: n => store - n, Reset: () => 0 }) ]; };
This LIGO contract accepts the following LIGO expressions: Increment(n)
, Decrement(n)
and Reset
. Those serve as entrypoint
identification.
You can find documentation of LIGO on its website along with tutorials there. Also, see the material on OpenTezos.