Skip to main content

Ligo

LIGO is a functional programming language that is intended to be both user-friendly and to avoid patterns that make formal verification difficult.

LIGO offers two syntaxes:

  • JsLIGO, a sytax that is inspired by TypeScript/JavaScript
  • CameLIGO, a syntax that is inspired by OCaml

You can use either syntax and compile to Michelson to run on Tezos.

To learn LIGO, see these tutorials:

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.

Further reading