--- id: cheat-sheet title: Cheat Sheet --- import Syntax from '@theme/Syntax'; <div className="cheatsheet"> <Syntax syntax="pascaligo"> <div className="codeTable"> <div className="primitive">Strings</div> <div className="example"> ```pascaligo const name: string = "Tezos"; ``` </div> <div className="primitive"> Characters </div> <div className="example"> ```pascaligo const t: string = "t"; ``` </div> <div className="primitive"> Integers </div> <div className="example"> ```pascaligo const i: int = 42; ``` </div> <div className="primitive"> Natural numbers </div> <div className="example"> ```pascaligo const n: nat = 7n; ``` </div> <div className="primitive"> Unit </div> <div className="example"> ```pascaligo const u: unit = unit; ``` </div> <div className="primitive"> Boolean </div> <div className="example"> ```pascaligo const hasDriversLicense: bool = False; const adult: bool = True; ``` </div> <div className="primitive"> Boolean Logic </div> <div className="example"> ```pascaligo const booleanLogic: bool = (not True) = False = (False and True) = (False or False); ``` </div> <div className="primitive"> Mutez (micro tez) </div> <div className="example"> ```pascaligo const tez: tez = 42tez; ``` </div> <div className="primitive"> Address </div> <div className="example"> ```pascaligo const tz1address: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address); const kt1address: address = ("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address); ``` </div> <div className="primitive"> Addition </div> <div className="example"> ```pascaligo const add_int: int = 3 + 4; const add_nat: nat = 3n + 4n; ``` </div> <div className="primitive"> Multiplication & Division </div> <div className="example"> ```pascaligo const mul_int: int = 3 + 4; const mul_nat: nat = 3n + 4n; const div_int: int = 10 / 5; const div_nat: nat = 10n / 5n; ``` </div> <div className="primitive"> Modulo </div> <div className="example"> ```pascaligo const mod_nat: nat = 10 mod 3; ``` </div> <div className="primitive"> Tuples </div> <div className="example"> ```pascaligo type name is (string * string); const winner: name = ("John", "Doe"); const firstName: string = winner.0; const lastName: string = winner.1; ``` </div> <div className="primitive"> Types </div> <div className="example"> ```pascaligo type age is int; type name is string ``` </div> <div className="primitive"> Includes </div> <div className="example"> ```#include "library.ligo"``` </div> <div className="primitive"> Functions (short form) </div> <div className="example"> ```pascaligo function add (const a : int ; const b : int) : int is a + b ``` </div> <div className="primitive"> Functions (long form) </div> <div className="example"> ```pascaligo function add (const a : int ; const b : int) : int is block { const result: int = a + b; } with result ``` </div> <div className="primitive"> If Statement </div> <div className="example"> ```pascaligo function if_statement (const age : int) : int is block { var id: int := -1; if age < 16 then { failwith ("Too young to drive"); } else { id := 1; } } with id ``` </div> <div className="primitive"> Options </div> <div className="example"> ```pascaligo type middleName is option(string); const middleName : middleName = Some("Foo"); const middleName : middleName = None; ``` </div> <div className="primitive"> Assignment </div> <div className="example"> ```pascaligo const age: int = 5; ``` </div> <div className="primitive"> Assignment on an existing variable </div> <div className="example"> :::caution This feature is not supported at the top-level scope, you can use it e.g. within functions. Works for Records and Maps as well. ::: ```pascaligo function assignment_existing (const age : int) : int is block { var x : int := 2; x := 3; } with x ``` </div> <div className="primitive"> Type Annotations </div> <div className="example"> ```pascaligo const someAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address); ``` </div> <div className="primitive"> Variants </div> <div className="example"> ```pascaligo group=variants type action is | Increment of int | Decrement of int; ``` </div> <div className="primitive"> Variant *(pattern)* matching </div> <div className="example"> ```pascaligo group=variants function main (const action : action; const input : int) : int is (case action of Increment (n) -> input + 1 | Decrement (n) -> input - 1 end) ``` </div> <div className="primitive"> Records </div> <div className="example"> ```pascaligo type person is record age: int; name: string; end const john : person = record age = 18; name = "john doe"; end const name: string = john.name; ``` </div> <div className="primitive"> Maps </div> <div className="example"> ```pascaligo type prices is map(nat, tez); const prices: prices = map 10n -> 60mutez; 50n -> 30mutez; 100n -> 10mutez; end const price: option(tez) = prices[50n]; function mutate (const u: unit) : unit is block { prices[200n] := 10mutez; } with unit; ``` </div> <div className="primitive"> Contracts & Accounts </div> <div className="example"> ```pascaligo group=tezos_specific const destinationAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address); const contract : contract (unit) = ( case (Tezos.get_contract_opt (Tezos.sender) : option(contract(unit))) of Some (contract) -> contract | None -> (failwith ("No contract.") : contract (unit)) end); ``` </div> <div className="primitive"> Transactions </div> <div className="example"> ```pascaligo group=tezos_specific const payment: operation = Tezos.transaction(unit, 100mutez, contract); ``` </div> <div className="primitive"> Exception/Failure </div> <div className="example"> ```pascaligo function fail (const u: unit) : unit is failwith("a failure message") ``` </div> </div> </Syntax> <Syntax syntax="cameligo"> <div className="codeTable"> <div className="primitive">Strings</div> <div className="example"> ```cameligo let name: string = "Tezos" ``` </div> <div className="primitive"> Characters </div> <div className="example"> ```cameligo let t: string = "t" ``` </div> <div className="primitive"> Integers </div> <div className="example"> ```cameligo let i: int = 42 ``` </div> <div className="primitive"> Natural numbers </div> <div className="example"> ```cameligo let n: nat = 7n ``` </div> <div className="primitive"> Unit </div> <div className="example"> ```cameligo let u: unit = unit ``` </div> <div className="primitive"> Boolean </div> <div className="example"> ```cameligo let has_drivers_license: bool = false let adult: bool = true ``` </div> <div className="primitive"> Boolean Logic </div> <div className="example"> ```cameligo let booleanLogic: bool = (not true) = false = (false && true) = (false || false) ``` </div> <div className="primitive"> Mutez (micro tez) </div> <div className="example"> ```cameligo let tez: tez = 42tez let tez: tez = 7mutez ``` </div> <div className="primitive"> Address </div> <div className="example"> ```cameligo let tz1address: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) let kt1address: address = ("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address) ``` </div> <div className="primitive"> Addition </div> <div className="example"> ```cameligo let add_int: int = 3 + 4 let add_nat: nat = 3n + 4n ``` </div> <div className="primitive"> Multiplication & Division </div> <div className="example"> ```cameligo let mul_int: int = 3 + 4 let mul_nat: nat = 3n + 4n let div_int: int = 10 / 5 let div_nat: nat = 10n / 5n ``` </div> <div className="primitive"> Modulo </div> <div className="example"> ```cameligo let mod_nat: nat = 10 mod 3 ``` </div> <div className="primitive"> Tuples </div> <div className="example"> ```cameligo type name = (string * string) let winner: name = "John", "Doe" let firstName: string = winner.0 let lastName: string = winner.1 ``` </div> <div className="primitive"> Types </div> <div className="example"> ```cameligo type age = int type name = string ``` </div> <div className="primitive"> Includes </div> <div className="example"> ```#include "library.mligo"``` </div> <div className="primitive"> Functions </div> <div className="example"> ```cameligo let add (a : int) (b : int) : int = a + b ``` </div> <div className="primitive"> If Statement </div> <div className="example"> ```cameligo let if_statement (age : int) : int = if age < 16 then (failwith ("Too young to drive"): int) else 1 ``` </div> <div className="primitive"> Options </div> <div className="example"> ```cameligo type middle_name = string option let middle_name : middle_name = Some "Foo" let middle_name : middle_name = None ``` </div> <div className="primitive"> Variable Binding </div> <div className="example"> ```cameligo let age: int = 5 ``` </div> <div className="primitive"> Type Annotations </div> <div className="example"> ```cameligo let someAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) ``` </div> <div className="primitive"> Variants </div> <div className="example"> ```cameligo group=variants type action = | Increment of int | Decrement of int ``` </div> <div className="primitive"> Variant *(pattern)* matching </div> <div className="example"> ```cameligo group=variants let a: action = Increment 5 let result: int = match a with | Increment n -> n + 1 | Decrement n -> n - 1 ``` </div> <div className="primitive"> Records </div> <div className="example"> ```cameligo type person = { age: int; name: string; } let john : person = { age = 18; name = "john doe"; } let name: string = john.name ``` </div> <div className="primitive"> Maps </div> <div className="example"> ```cameligo type prices = (nat, tez) map let prices: prices = Map.literal [ (10n, 60mutez); (50n, 30mutez); (100n, 10mutez); ] let price: tez option = Map.find_opt 50n prices let prices : prices = Map.update 200n (Some 5mutez) prices ``` </div> <div className="primitive"> Contracts & Accounts </div> <div className="example"> ```cameligo group=tezos_specific let destinationAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) let contract : unit contract = match (Tezos.get_contract_opt Tezos.sender : unit contract option) with Some contract -> contract | None -> (failwith "no contract" : unit contract) ``` </div> <div className="primitive"> Transactions </div> <div className="example"> ```cameligo group=tezos_specific let payment: operation = Tezos.transaction unit 100mutez contract ``` </div> <div className="primitive"> Exception/Failure </div> <div className="example"> ```cameligo let fail (u: unit) : unit = failwith "a failure message" ``` </div> </div> </Syntax> <Syntax syntax="reasonligo"> <div className="codeTable"> <div className="primitive">Strings</div> <div className="example"> ```reasonligo let name: string = "Tezos" ``` </div> <div className="primitive"> Characters </div> <div className="example"> ```reasonligo let t: string = "t" ``` </div> <div className="primitive"> Integers </div> <div className="example"> ```reasonligo let i: int = 42 ``` </div> <div className="primitive"> Natural numbers </div> <div className="example"> ```reasonligo let n: nat = 7n ``` </div> <div className="primitive"> Unit </div> <div className="example"> ```reasonligo let u: unit = unit ``` </div> <div className="primitive"> Boolean </div> <div className="example"> ```reasonligo let has_drivers_license: bool = false let adult: bool = true ``` </div> <div className="primitive"> Boolean Logic </div> <div className="example"> ```reasonligo let booleanLogic: bool = (!true) == false == (false && true) == (false || false) ``` </div> <div className="primitive"> Mutez (micro tez) </div> <div className="example"> ```reasonligo let tez: tez = 42tez let tez: tez = 7mutez ``` </div> <div className="primitive"> Address </div> <div className="example"> ```reasonligo let tz1address: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) let kt1address: address = ("KT1JepfBfMSqkQyf9B1ndvURghGsSB8YCLMD": address) ``` </div> <div className="primitive"> Addition </div> <div className="example"> ```reasonligo let add_int: int = 3 + 4 let add_nat: nat = 3n + 4n ``` </div> <div className="primitive"> Multiplication & Division </div> <div className="example"> ```reasonligo let mul_int: int = 3 + 4 let mul_nat: nat = 3n + 4n let div_int: int = 10 / 5 let div_nat: nat = 10n / 5n ``` </div> <div className="primitive"> Modulo </div> <div className="example"> ```reasonligo let mod_nat: nat = 10 mod 3 ``` </div> <div className="primitive"> Tuples </div> <div className="example"> ```reasonligo type name = (string, string) let winner: name = ("John", "Doe") let firstName: string = winner[0] let lastName: string = winner[1] ``` </div> <div className="primitive"> Types </div> <div className="example"> ```reasonligo type age = int type name = string ``` </div> <div className="primitive"> Includes </div> <div className="example"> ```#include "library.religo"``` </div> <div className="primitive"> Functions (short form) </div> <div className="example"> ```reasonligo let add = (a: int, b: int): int => a + b ``` </div> <div className="primitive"> Functions (long form) </div> <div className="example"> ```reasonligo let add = (a: int, b: int): int => { let c = a; let d = b; c + d }; ``` </div> <div className="primitive"> If Statement </div> <div className="example"> ```reasonligo let if_statement = (age : int) : int => if (age < 16) { (failwith ("Too young to drive"): int) } else { 1 } ``` </div> <div className="primitive"> Options </div> <div className="example"> ```reasonligo type middle_name = option(string); let middle_name : middle_name = Some ("Foo"); let middle_name : middle_name = None; ``` </div> <div className="primitive"> Variable Binding </div> <div className="example"> ```reasonligo let age: int = 5 ``` </div> <div className="primitive"> Type Annotations </div> <div className="example"> ```reasonligo let someAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) ``` </div> <div className="primitive"> Variants </div> <div className="example"> ```reasonligo group=variants type action = | Increment (int) | Decrement (int) ``` </div> <div className="primitive"> Variant *(pattern)* matching </div> <div className="example"> ```reasonligo group=variants let a: action = Increment(5) let result: int = switch (a) { | Increment(n) => n + 1 | Decrement(n) => n - 1 } ``` </div> <div className="primitive"> Records </div> <div className="example"> ```reasonligo type person = { age: int, name: string } let john : person = { age: 18, name: "john doe" } let name: string = john.name ``` </div> <div className="primitive"> Maps </div> <div className="example"> ```reasonligo type prices = map (nat, tez) let prices: prices = Map.literal ([ (10n, 60mutez), (50n, 30mutez), (100n, 10mutez), ]) let price: option(tez) = Map.find_opt(50n, prices) let prices : prices = Map.update(200n, (Some 5mutez), prices) ``` </div> <div className="primitive"> Contracts & Accounts </div> <div className="example"> ```reasonligo group=tezos_specific let destinationAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) let contract : contract(unit) = switch (Tezos.get_contract_opt(Tezos.sender) : option(contract(unit))) { | Some(contract) => contract | None => (failwith("no contract") : contract(unit)) } ``` </div> <div className="primitive"> Transactions </div> <div className="example"> ```reasonligo group=tezos_specific let payment: operation = Tezos.transaction(unit, 100mutez, contract); ``` </div> <div className="primitive"> Exception/Failure </div> <div className="example"> ```reasonligo let fail = (u: unit) : unit => failwith("a failure message") ``` </div> </div> </Syntax> </div>