package tezos-protocol-013-PtJakart
Tezos protocol 013-PtJakart package
Install
Dune Dependency
Authors
Maintainers
Sources
tezos-octez-v20.1.tag.bz2
sha256=ddfb5076eeb0b32ac21c1eed44e8fc86a6743ef18ab23fff02d36e365bb73d61
sha512=d22a827df5146e0aa274df48bc2150b098177ff7e5eab52c6109e867eb0a1f0ec63e6bfbb0e3645a6c2112de3877c91a17df32ccbff301891ce4ba630c997a65
doc/src/tezos_raw_protocol_013_PtJakart/ticket_token_map.ml.html
Source file ticket_token_map.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
(*****************************************************************************) (* *) (* Open Source License *) (* Copyright (c) 2021 Trili Tech, <contact@trili.tech> *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a *) (* copy of this software and associated documentation files (the "Software"),*) (* to deal in the Software without restriction, including without limitation *) (* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) (* and/or sell copies of the Software, and to permit persons to whom the *) (* Software is furnished to do so, subject to the following conditions: *) (* *) (* The above copyright notice and this permission notice shall be included *) (* in all copies or substantial portions of the Software. *) (* *) (* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) (* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) (* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) (* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) (* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) (* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) (* DEALINGS IN THE SOFTWARE. *) (* *) (*****************************************************************************) open Alpha_context (** A carbonated map where the keys are [Ticket_hash.t] values. *) module Ticket_token_map = Carbonated_map.Make (struct type t = Ticket_hash.t let compare = Ticket_hash.compare let compare_cost _ = Ticket_costs.Constants.cost_compare_ticket_hash end) (** Conceptually a map from [Ticket_token.ex_token] to values. Since ticket-tokens are expensive to compare we use [Ticket_hash.t] keys instead, and store the ticket-token along with the value. *) type 'a t = (Ticket_token.ex_token * 'a) Ticket_token_map.t let empty = Ticket_token_map.empty let key_of_ticket_token ctxt (Ticket_token.Ex_token {ticketer; _} as token) = (* We use the [ticket_balance_key] function for generating a key-hash for comparing tokens. Since an owner contract is required we use [ticketer] but any dummy value would work as long as it's consistent. *) Ticket_balance_key.of_ex_token ctxt ~owner:(Destination.Contract ticketer) token let update ctxt key f m = key_of_ticket_token ctxt key >>=? fun (key_hash, ctxt) -> let f ctxt val_opt = (match val_opt with | Some (_tkn, value) -> f ctxt (Some value) | None -> f ctxt None) >|? fun (val_opt, ctxt) -> (Option.map (fun v -> (key, v)) val_opt, ctxt) in Ticket_token_map.update ctxt key_hash f m |> Lwt.return let fold ctxt f = Ticket_token_map.fold ctxt (fun ctxt acc _key_hash (tkn, value) -> f ctxt acc tkn value) let find ctxt ticket_token map = key_of_ticket_token ctxt ticket_token >>=? fun (key_hash, ctxt) -> Ticket_token_map.find ctxt key_hash map >>?= fun (val_opt, ctxt) -> return (Option.map snd val_opt, ctxt) let lift_merge_overlap merge_overlap ctxt (tkn1, v1) (_tkn2, v2) = merge_overlap ctxt v1 v2 >|? fun (v, ctxt) -> ((tkn1, v), ctxt) let of_list ctxt ~merge_overlap token_values = List.fold_left_es (fun (map, ctxt) (token, value) -> key_of_ticket_token ctxt token >>=? fun (key_hash, ctxt) -> Lwt.return (Ticket_token_map.update ctxt key_hash (fun ctxt old_val -> match old_val with | None -> ok (Some (token, value), ctxt) | Some old -> lift_merge_overlap merge_overlap ctxt old (token, value) >|? fun (x, ctxt) -> (Some x, ctxt)) map)) (Ticket_token_map.empty, ctxt) token_values let map ctxt f = Ticket_token_map.map ctxt (fun ctxt _key (tkn, value) -> f ctxt tkn value >|? fun (new_value, ctxt) -> ((tkn, new_value), ctxt)) let to_list ctxt map = Ticket_token_map.to_list ctxt map >>? fun (list, ctxt) -> (* Consume gas for traversing the list again and remove the key-hash. *) Gas.consume ctxt (Carbonated_map_costs.fold_cost ~size:(Ticket_token_map.size map)) >|? fun ctxt -> (List.map snd list, ctxt) let merge ctxt ~merge_overlap = Ticket_token_map.merge ctxt ~merge_overlap:(lift_merge_overlap merge_overlap)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>