From 5012bd2a92ce579e56caa924ba98d2a5b3d8720a Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 12 Oct 2022 11:32:07 +0200 Subject: [PATCH 1/6] Proto/Delegate_storage: fix typo --- src/proto_alpha/lib_protocol/delegate_storage.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_storage.ml b/src/proto_alpha/lib_protocol/delegate_storage.ml index 373f18be208b..81453ea105e2 100644 --- a/src/proto_alpha/lib_protocol/delegate_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_storage.ml @@ -265,13 +265,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 + transferred in return ( ctxt, -- GitLab From 2df1b04991b50c8f556e4fd0d7687de8d70672fa Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 12 Oct 2022 10:56:57 +0200 Subject: [PATCH 2/6] Proto: remove useless return --- src/proto_alpha/lib_protocol/bootstrap_storage.ml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/proto_alpha/lib_protocol/bootstrap_storage.ml b/src/proto_alpha/lib_protocol/bootstrap_storage.ml index 02f7a938c93e..7c3de02badec 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) -- GitLab From ffb71ac0c8ccfd6eabd4cb1c6c567825c8febb66 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 12 Oct 2022 11:29:07 +0200 Subject: [PATCH 3/6] Proto/Delegate_storage: factorize destination_contract --- src/proto_alpha/lib_protocol/delegate_storage.ml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_storage.ml b/src/proto_alpha/lib_protocol/delegate_storage.ml index 81453ea105e2..f0bf60d9cd12 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 = @@ -270,7 +271,7 @@ let drain ctxt ~delegate ~destination = Token.transfer ctxt (`Contract delegate_contract) - (`Contract (Contract_repr.Implicit destination)) + (`Contract destination_contract) transferred in return -- GitLab From c6dcf645af3edd37a6c999d489b008e536a42cac Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 12 Oct 2022 11:18:46 +0200 Subject: [PATCH 4/6] Proto/Apply_results: remove consumed_gas field from Update_consensus_key_result We don't use it since !5536 --- src/proto_alpha/lib_protocol/apply_results.ml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/proto_alpha/lib_protocol/apply_results.ml b/src/proto_alpha/lib_protocol/apply_results.ml index 346b542c012d..5ca742c480b5 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 -- GitLab From 7a5d52771a7204c44bca47bba6bb6a18ad08a6ca Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 12 Oct 2022 11:53:52 +0200 Subject: [PATCH 5/6] Proto/Delegate_consensus_key: rename active to used to remove ambiguity with active/pending key --- .../lib_protocol/delegate_consensus_key.ml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml index 023247a68263..5dba76988e07 100644 --- a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml +++ b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml @@ -85,20 +85,20 @@ let pp ppf {delegate; consensus_pkh} = consensus_pkh ; Format.fprintf ppf "@]" -let check_inactive ctxt pkh = +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 +170,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) -- GitLab From 58d64dde73161be2d06915285bc3c8cc40ac5434 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Mon, 17 Oct 2022 11:00:46 +0200 Subject: [PATCH 6/6] Proto/Delegate_consensus_key: document invariant --- src/proto_alpha/lib_protocol/delegate_consensus_key.ml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml index 5dba76988e07..3a96b922d181 100644 --- a/src/proto_alpha/lib_protocol/delegate_consensus_key.ml +++ b/src/proto_alpha/lib_protocol/delegate_consensus_key.ml @@ -85,6 +85,13 @@ let pp ppf {delegate; consensus_pkh} = consensus_pkh ; Format.fprintf ppf "@]" +(* 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 -- GitLab