--- id: big-map-reference title: Big Map — Scalable hashmap primitive --- ## Defining A Big Map Type ```pascaligo type move is (int * int) type moveset is big_map (address, move) type foo is big_map (int, int) ``` ```cameligo type move = int * int type moveset = (address, move) big_map type foo = (int, int) big_map ``` ```reasonligo type move = (int, int); type moveset = big_map(address, move); type foo = big_map(int, int); ``` ## Creating A Map ```pascaligo const moves: moveset = big_map ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) -> (1,2); ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) -> (0,3); end ``` ```cameligo let moves: moveset = Big_map.literal [ (("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address), (1,2)); (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), (0,3)); ] ``` ```reasonligo 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. ```pascaligo const my_balance : option(move) = moves [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)] ``` ```cameligo let my_balance : move option = Big_map.find_opt ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves ``` ```reasonligo 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. ```pascaligo const my_balance : move = get_force (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), moves); ``` ```cameligo let my_balance : move = Big_map.find ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) moves ``` ```reasonligo 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: ```pascaligo function set_ (var m : moveset) : moveset is block { m [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address)] := (4,9); } with m ``` ```cameligo let updated_map : moveset = Big_map.update ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) (Some (4,9)) moves ``` ```reasonligo 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. ```pascaligo function set_ (var n : int ; var m : foo) : foo is block { m[23] := n ; } with m ``` ```cameligo let add (n,m : int * foo) : foo = Big_map.add 23 n m ``` ```reasonligo 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. ```pascaligo function rm (var m : foo) : foo is block { remove 42 from map m; } with m ``` ```cameligo let rm (m : foo) : foo = Big_map.remove 42 m ``` ```reasonligo 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. ```pascaligo const moves: moveset = big_map ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address) -> (1,2); ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address) -> (0,3); end ``` ```cameligo let moves: moveset = Big_map.literal [ (("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address), (1,2)); (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN": address), (0,3)); ] ``` ```reasonligo 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. ```pascaligo const empty_big_map : big_map(int,int) = big_map end ``` ```cameligo let empty_map : foo = Big_map.empty ``` ```reasonligo let empty_map: foo = Big_map.empty; ```