Camel – Types

Chapter 2 : Types

Welcome onboard captain, I’m the ship’s mechanic. The first thing to do before departing is to define your ship’s parameters. Go ahead!

LIGO is a strongly and statically typed language. This means that the compiler checks how your contract processes data. If it passes the test, your contract will not fail at run-time due to inconsistent assumptions on your data. This is called type checking.

Built-in types

LIGO comes with all basic types built-in like string, int or tez for account balance or monetary transactions. You can find all built-in types on the LIGO gitlab.

Type aliases

Type aliasing consists in renaming a given type, when the context calls for a more precise name. This increases readability and maintainability of your smart contracts. For example we can choose to alias a string type as an animal breed – this will allow us to comunicate our intent with added clarity.

type breed = string
let dog_breed : breed = “Saluki”

Simple types

The type account_balances denotes a map from addresses to tez

type account_balances = (address, tez) map

let ledger : account_balances =
Map.literal [((“tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx” : address), 10mutez)]

ℹ️We will look more deeply into the map construct in the following chapters.

Structured types

Often contracts require complex data structures, which in turn require well-typed storage or functions to work with. LIGO offers a simple way to compose simple types into structured types. The first of those structured types is the record, which aggregates types as fields and index them with a field name. In the example below we define an account type whick keeps the balance and number of previous transactions for a given account.

type account = {
balance : tez;
transactions : nat

let my_account : account = {
balance = 10mutez;
transactions = 5n

ℹ️We will look more deeply into the record construct in the following chapters.

Your mission

1- There is an online editor in the top right corner of this page. In the editor, define ship_code as a string type.

2- Then define the constant my_ship as a ship_code of value “020433”.

3- Then go ahead and validate your mission for a comparative view with the solution.


Type your solution above and validate your answer