diff --git a/src/proto_alpha/lib_protocol/apply_results.ml b/src/proto_alpha/lib_protocol/apply_results.ml index 346b542c012daef2ef0c84fa9df10ef34b11f9a4..5ca742c480b5c45f9a4a6c4da876787b7144f5f5 100644 --- a/src/proto_alpha/lib_protocol/apply_results.ml +++ b/src/proto_alpha/lib_protocol/apply_results.ml @@ -526,20 +526,15 @@ module Manager_result = struct ~op_case:Operation.Encoding.Manager_operations.update_consensus_key_case ~encoding: Data_encoding.( - obj2 - (dft "consumed_gas" Gas.Arith.n_integral_encoding Gas.Arith.zero) - (dft "consumed_milligas" Gas.Arith.n_fp_encoding Gas.Arith.zero)) + obj1 (dft "consumed_milligas" Gas.Arith.n_fp_encoding Gas.Arith.zero)) ~select:(function | Successful_manager_result (Update_consensus_key_result _ as op) -> Some op | _ -> None) ~kind:Kind.Update_consensus_key_manager_kind ~proj:(function - | Update_consensus_key_result {consumed_gas} -> - (Gas.Arith.ceil consumed_gas, consumed_gas)) - ~inj:(fun (consumed_gas, consumed_milligas) -> - assert (Gas.Arith.(equal (ceil consumed_milligas) consumed_gas)) ; - Update_consensus_key_result {consumed_gas = consumed_milligas}) + | Update_consensus_key_result {consumed_gas} -> consumed_gas) + ~inj:(fun consumed_gas -> Update_consensus_key_result {consumed_gas}) let set_deposits_limit_case = make diff --git a/src/proto_alpha/lib_protocol/bootstrap_storage.ml b/src/proto_alpha/lib_protocol/bootstrap_storage.ml index 02f7a938c93e83f9a140270cc2c0513ea4f79217..7c3de02badec173dfa832a420e0b505dbc34f574 100644 --- a/src/proto_alpha/lib_protocol/bootstrap_storage.ml +++ b/src/proto_alpha/lib_protocol/bootstrap_storage.ml @@ -53,7 +53,7 @@ let init_account (ctxt, balance_updates) amount >>=? fun (ctxt, new_balance_updates) -> (match public_key with - | Some public_key -> + | Some public_key -> ( Contract_manager_storage.reveal_manager_key ctxt public_key_hash @@ -64,11 +64,10 @@ let init_account (ctxt, balance_updates) contract (Some (Option.value ~default:public_key_hash delegate_to)) >>=? fun ctxt -> - (match consensus_key with + match consensus_key with | None -> return ctxt | Some consensus_key -> Delegate_consensus_key.init ctxt public_key_hash consensus_key) - >>=? fun ctxt -> return ctxt | None -> fail_when (Option.is_some delegate_to) diff --git a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml index 023247a68263803a0758d32ef3fd03d9be6c8fdb..3a96b922d1818fc56ce27fc11cc1efd1ba15dc14 100644 --- a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml +++ b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml @@ -85,20 +85,27 @@ let pp ppf {delegate; consensus_pkh} = consensus_pkh ; Format.fprintf ppf "@]" -let check_inactive ctxt pkh = +(* Invariant: + No two delegates use the same active consensus key at a given time. + + To ensure that, {!Storage.Consensus_keys} contains keys that will be active + at cycle `current + preserved_cycles + 1`. +*) + +let check_unused ctxt pkh = let open Lwt_tzresult_syntax in let*! is_active = Storage.Consensus_keys.mem ctxt pkh in fail_when is_active Invalid_consensus_key_update_active -let set_inactive = Storage.Consensus_keys.remove +let set_unused = Storage.Consensus_keys.remove -let set_active = Storage.Consensus_keys.add +let set_used = Storage.Consensus_keys.add let init ctxt delegate pk = let open Lwt_tzresult_syntax in let pkh = Signature.Public_key.hash pk in - let* () = check_inactive ctxt pkh in - let*! ctxt = set_active ctxt pkh in + let* () = check_unused ctxt pkh in + let*! ctxt = set_used ctxt pkh in Storage.Contract.Consensus_key.init ctxt (Contract_repr.Implicit delegate) pk let active_pubkey ctxt delegate = @@ -170,12 +177,12 @@ let register_update ctxt delegate pk = (Invalid_consensus_key_update_noop first_active_cycle) in let pkh = Signature.Public_key.hash pk in - let* () = check_inactive ctxt pkh in - let*! ctxt = set_active ctxt pkh in + let* () = check_unused ctxt pkh in + let*! ctxt = set_used ctxt pkh in let* {consensus_pkh = old_pkh; _} = active_pubkey_for_cycle ctxt delegate update_cycle in - let*! ctxt = set_inactive ctxt old_pkh in + let*! ctxt = set_unused ctxt old_pkh in let*! ctxt = Storage.Contract.Pending_consensus_keys.add (ctxt, Contract_repr.Implicit delegate) diff --git a/src/proto_alpha/lib_protocol/delegate_storage.ml b/src/proto_alpha/lib_protocol/delegate_storage.ml index 373f18be208bea5e7c9062796f7bf34daeac52ac..f0bf60d9cd128e206ecf867d0bdc75f74b8d8be2 100644 --- a/src/proto_alpha/lib_protocol/delegate_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_storage.ml @@ -250,8 +250,9 @@ let delegated_balance ctxt delegate = let drain ctxt ~delegate ~destination = let open Lwt_tzresult_syntax in + let destination_contract = Contract_repr.Implicit destination in let*! is_destination_allocated = - Contract_storage.allocated ctxt (Contract_repr.Implicit destination) + Contract_storage.allocated ctxt destination_contract in let delegate_contract = Contract_repr.Implicit delegate in let* ctxt, _, balance_updates1 = @@ -265,13 +266,13 @@ let drain ctxt ~delegate ~destination = let* manager_balance = spendable_balance ctxt delegate in let*? one_percent = Tez_repr.(manager_balance /? 100L) in let fees = Tez_repr.(max one one_percent) in - let*? transfered = Tez_repr.(manager_balance -? fees) in + let*? transferred = Tez_repr.(manager_balance -? fees) in let* ctxt, balance_updates2 = Token.transfer ctxt (`Contract delegate_contract) - (`Contract (Contract_repr.Implicit destination)) - transfered + (`Contract destination_contract) + transferred in return ( ctxt,