ligo/src/proto/alpha/asset_repr.ml
2017-02-25 18:14:05 +01:00

62 lines
1.8 KiB
OCaml

(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2016. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
type t = int32
type asset = t
let of_int32 i = i
let to_int32 i = i
let encoding =
let open Data_encoding in
describe
~title: "Asset type"
~description: "A type of asset"
(conv to_int32 of_int32 int32)
module Map = struct
module Raw = Map.Make(struct
type t = asset * Ed25519.Public_key_hash.t
let compare (a1, pk1) (a2, pk2) =
if Compare.Int32.(a1 = a2) then
Ed25519.Public_key_hash.compare pk1 pk2
else
Compare.Int32.compare a1 a2
end)
type t = Tez_repr.tez Raw.t
let empty = Raw.empty
let add map asset key quantity =
let previous_quantity =
try Raw.find (asset, key) map
with Not_found -> Tez_repr.zero in
Tez_repr.(previous_quantity +? quantity) >>? fun total ->
ok (Raw.add (asset, key) total map)
let of_tuple_list_exn tl =
List.fold_left
(fun map (key, qty) -> Raw.add key qty map)
Raw.empty tl
let encoding =
let open Data_encoding in
describe
~title: "Assets"
~description: "A list of assets held in the contract"
(conv
Raw.bindings
(Json.wrap_error of_tuple_list_exn)
(list
(tup2
(tup2 encoding Ed25519.Public_key_hash.encoding)
Tez_repr.encoding)))
end