diff --git a/src/proto_alpha/lib_protocol/bootstrap_storage.ml b/src/proto_alpha/lib_protocol/bootstrap_storage.ml index ef3d318ab579597fd5c6de7637a1181757e721bd..2fa101d4d61b64090a3b92e91643b8b06de019b4 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) diff --git a/src/proto_alpha/lib_protocol/init_storage.ml b/src/proto_alpha/lib_protocol/init_storage.ml index fbbee67e3ac05b96a054e677fd6ee15f029f5171..8e97b0ceef4ef9f4af34f719b20ff0fd5c1aa912 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 -> diff --git a/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml b/src/proto_alpha/lib_protocol/staking_pseudotokens_storage.ml index bc7cf45c70fed02e1a85312f3d72e2448d6ef63b..7439e943ce1abbd33657812ae50f12464980e9c0 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 2f8523e46d0a6af78a1d73d32859504745af61f3..d272ba9b10c7ced1c84562dec23442469e45bb06 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.