ligo/gitlab-pages/docs/reference/big_map.md

5.4 KiB

id title
big-map-reference Big Map — Scalable hashmap primitive

Defining A Big Map Type

type move is (int * int)
type moveset is big_map (address, move)
type foo is big_map (int, int)
type move = int * int
type moveset = (address, move) big_map
type foo = (int, int) big_map
type move = (int, int);
type moveset = big_map(address, move);
type foo = big_map(int, int);

Creating A Map

const moves: moveset =
  big_map
    ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) -> (1,2);
    ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) -> (0,3);
  end
let moves: moveset =
  Big_map.literal [
    (("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address), (1,2));
    (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), (0,3));
  ]
let moves: moveset =
  Big_map.literal ([
    ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address, (1,2)),
    ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address, (0,3)),
  ]);

Big_map.find_opt(k: a', m: (a',b') big_map) : b' option

Retrieve the value associated with a particular key. This version returns an option which can either shift logic in response to a missing value or throw an error.

const my_balance : option(move) =
  moves [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)]
let my_balance : move option =
  Big_map.find_opt ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves
let my_balance : option(move) =
  Big_map.find_opt("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address, moves);

Big_map.find(k: a', m: (a', b') big_map) : b'

Forcefully retrieve the value associated with a particular key. If that value doesn't exist, this function throws an error.

const my_balance : move =
  get_force (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), moves);
let my_balance : move =
  Big_map.find ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves
let my_balance : move =
  Big_map.find ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address, moves);

Big_map.update(k: a', v: b', m: (a', b') big_map) : (a', b') big_map

Change the value associated with a particular key, if that value doesn't already exist add it.

The values of a PascaLIGO big map can be updated using the ordinary assignment syntax:


function set_ (var m : moveset) : moveset is
  block {
    m [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)] := (4,9);
  } with m
let updated_map : moveset =
  Big_map.update ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) (Some (4,9)) moves
let updated_map : moveset =
  Big_map.update(("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), Some((4,9)), moves);

Big_map.add(k: a', v: b', m: (a', b') big_map) : (a', b') big_map

Add a key and its associated value to the big map.

function set_ (var n : int ; var m : foo) : foo is block {
  m[23] := n ;
} with m
let add (n,m : int * foo) : foo = Big_map.add 23 n m
let add = ((n,m): (int, foo)): foo => Big_map.add(23, n, m);

Big_map.remove(k: a', m: (a', b') big_map) : (a', b') big_map

Remove a key and its associated value from the big map.

function rm (var m : foo) : foo is block {
  remove 42 from map m;
} with m
let rm (m : foo) : foo = Big_map.remove 42 m
let rm = (m: foo): foo => Big_map.remove(42, m);

Big_map.literal(key_value_pair_list: (a', b') list) : (a', b') big_map

Constructs a big map from a list of key-value pair tuples.

const moves: moveset =
  big_map
    ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) -> (1,2);
    ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) -> (0,3);
  end
let moves: moveset =
  Big_map.literal [
    (("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address), (1,2));
    (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), (0,3));
  ]
let moves: moveset =
  Big_map.literal ([
    ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address, (1,2)),
    ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address, (0,3)),
  ]);

Big_map.empty() : (a', b') big_map

Create an empty big map.

const empty_big_map : big_map(int,int) = big_map end
let empty_map : foo = Big_map.empty
let empty_map: foo = Big_map.empty;