From 12df3422a9c4bda34706c7e8e5f1790304f2423c Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 8 Jun 2023 19:35:33 +0200 Subject: [PATCH 1/3] Proto/Staking_pseudotokens: init --- .../staking_pseudotokens_storage.ml | 44 ++++++++++++++----- .../staking_pseudotokens_storage.mli | 8 ++++ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml b/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml index bc7cf45c70fe..7439e943ce1a 100644 --- a/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml +++ b/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml @@ -23,6 +23,35 @@ (* *) (*****************************************************************************) +let init_frozen_deposits_pseudotokens_from_frozen_deposits_tez ctxt contract + ~frozen_deposits_tez = + let open Lwt_result_syntax in + let initial_pseudotokens = + Staking_pseudotoken_repr.of_int64_exn + (Tez_repr.to_mutez frozen_deposits_tez) + in + let+ ctxt = + Storage.Contract.Frozen_deposits_pseudotokens.init + ctxt + contract + initial_pseudotokens + in + (ctxt, initial_pseudotokens) + +let init_frozen_deposits_pseudotokens_from_frozen_deposits_balance ctxt contract + = + let open Lwt_result_syntax in + let* {current_amount = frozen_deposits_tez; initial_amount = _} = + Frozen_deposits_storage.get ctxt contract + in + let+ ctxt, _pseudotokens = + init_frozen_deposits_pseudotokens_from_frozen_deposits_tez + ctxt + contract + ~frozen_deposits_tez + in + ctxt + (** Avoids a stitching. Initializes contract's pseudotokens so that 1 pseudotoken = 1 mutez. *) let get_or_init_frozen_deposits_pseudotokens ctxt contract ~frozen_deposits_tez @@ -33,17 +62,10 @@ let get_or_init_frozen_deposits_pseudotokens ctxt contract ~frozen_deposits_tez in match frozen_deposits_pseudotokens_opt with | None -> - let initial_pseudotokens = - Staking_pseudotoken_repr.of_int64_exn - (Tez_repr.to_mutez frozen_deposits_tez) - in - let+ ctxt = - Storage.Contract.Frozen_deposits_pseudotokens.init - ctxt - contract - initial_pseudotokens - in - (ctxt, initial_pseudotokens) + init_frozen_deposits_pseudotokens_from_frozen_deposits_tez + ctxt + contract + ~frozen_deposits_tez | Some frozen_deposits_pseudotokens -> return (ctxt, frozen_deposits_pseudotokens) diff --git a/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.mli b/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.mli index 2f8523e46d0a..d272ba9b10c7 100644 --- a/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.mli +++ b/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.mli @@ -27,6 +27,14 @@ {!Storage.Contract.Frozen_deposits_pseudotokens} and {!Storage.Contract.Costaking_pseudotokens} tables. *) +(** [init_frozen_deposits_pseudotokens_from_frozen_deposits_balance ctxt contract] + initializes [contract]'s frozen deposits pseudotokens usings [contract]'s + current frozen deposits tez. + This function must be called whenever a contract's frozen deposits tez are + initialized. *) +val init_frozen_deposits_pseudotokens_from_frozen_deposits_balance : + Raw_context.t -> Contract_repr.t -> Raw_context.t tzresult Lwt.t + (** [frozen_deposits_pseudotokens_for_tez_amount ctxt delegate tez_amount] returns the amount of [delegate]'s stake pseudotokens the [tez_amount] is currently worth. -- GitLab From ff507ec8f1e313019c9ef0c11b232d994bd5ca74 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 8 Jun 2023 19:36:54 +0200 Subject: [PATCH 2/3] Proto: init pseudotokens for bootstrap accounts --- src/proto_alpha/lib_protocol/bootstrap_storage.ml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_protocol/bootstrap_storage.ml b/src/proto_alpha/lib_protocol/bootstrap_storage.ml index ef3d318ab579..2fa101d4d61b 100644 --- a/src/proto_alpha/lib_protocol/bootstrap_storage.ml +++ b/src/proto_alpha/lib_protocol/bootstrap_storage.ml @@ -90,7 +90,13 @@ let init_account (ctxt, balance_updates) ctxt (`Contract contract) (`Frozen_deposits public_key_hash) - amount_to_freeze) + amount_to_freeze + >>=? fun (ctxt, balance_updates) -> + Staking_pseudotokens_storage + .init_frozen_deposits_pseudotokens_from_frozen_deposits_balance + ctxt + contract + >|=? fun ctxt -> (ctxt, balance_updates)) | None -> fail_when (Option.is_some delegate_to) -- GitLab From 767ca1c2ef1fc0bc0a6f66c17a283ca99b1c11f2 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 8 Jun 2023 19:55:52 +0200 Subject: [PATCH 3/3] Proto/Stitching: init delegates frozen deposits pseudotoken at protocol migration --- src/proto_alpha/lib_protocol/init_storage.ml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_protocol/init_storage.ml b/src/proto_alpha/lib_protocol/init_storage.ml index fbbee67e3ac0..8e97b0ceef4e 100644 --- a/src/proto_alpha/lib_protocol/init_storage.ml +++ b/src/proto_alpha/lib_protocol/init_storage.ml @@ -151,6 +151,20 @@ let initialize_total_supply_for_o ctxt = ctxt (Tez_repr.of_mutez_exn 940_000_000_000_000L) +(** Initializes frozen deposits pseudotokens for all existing delegates. *) +let init_delegates_frozen_deposits_pseudotokens_for_o ctxt = + Delegate_storage.fold + ctxt + ~order:`Undefined + ~init:(ok ctxt) + ~f:(fun delegate ctxt -> + let open Lwt_result_syntax in + let*? ctxt in + Staking_pseudotokens_storage + .init_frozen_deposits_pseudotokens_from_frozen_deposits_balance + ctxt + (Contract_repr.Implicit delegate)) + (** Migration of the context field storing the Liquidity Baking EMA. The key of the field is renamed from "liquidity_baking_escape_ema" to "liquidity_baking_toggle_ema" and @@ -273,7 +287,9 @@ let prepare_first_block _chain_id ctxt ~typecheck_smart_contract Remove_zero_amount_ticket_migration_for_o.remove_zero_ticket_entries ctxt >>= fun ctxt -> migrate_liquidity_baking_ema ctxt >>=? fun ctxt -> - Adaptive_inflation_storage.init_ema ctxt >>=? fun ctxt -> return (ctxt, [])) + Adaptive_inflation_storage.init_ema ctxt >>=? fun ctxt -> + init_delegates_frozen_deposits_pseudotokens_for_o ctxt >>=? fun ctxt -> + return (ctxt, [])) >>=? fun (ctxt, balance_updates) -> List.fold_left_es patch_script ctxt Legacy_script_patches.addresses_to_patch >>=? fun ctxt -> -- GitLab