From 128ad287f786b0487522c393dabf5ee188a2bd14 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 13 Dec 2023 15:35:06 +0100 Subject: [PATCH 01/10] Proto/AI: refactor min and max ratio "computation" These functions will be upgraded in a later commit --- .../lib_protocol/adaptive_issuance_storage.ml | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index 23fb8d1ef4e1..fcb45a25cf75 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -106,6 +106,14 @@ let truncate_reward_coeff ~issuance_ratio_min ~issuance_ratio_max f = let f = Q.max f issuance_ratio_min in f +let compute_min + ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = + reward_params.issuance_ratio_min + +let compute_max + ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = + reward_params.issuance_ratio_max + let compute_reward_coeff_ratio_without_bonus = let q_1600 = Q.of_int 1600 in fun ~stake_ratio ~issuance_ratio_max ~issuance_ratio_min -> @@ -119,7 +127,7 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio let Constants_parametric_repr. { issuance_ratio_min = _; - issuance_ratio_max; + issuance_ratio_max = _; max_bonus; growth_rate; center_dz; @@ -127,6 +135,7 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio } = reward_params in + let issuance_ratio_max = compute_max ~reward_params in let base_reward_coeff_dist_to_max = Q.(issuance_ratio_max - base_reward_coeff_ratio) in @@ -163,10 +172,8 @@ let compute_coeff = ~reward_params -> if Tez_repr.(base_total_issued_per_minute = zero) then Q.one else - let Constants_parametric_repr.{issuance_ratio_min; issuance_ratio_max; _} - = - reward_params - in + let issuance_ratio_min = compute_min ~reward_params in + let issuance_ratio_max = compute_max ~reward_params in let q_base_total_issued_per_minute = Tez_repr.to_mutez base_total_issued_per_minute |> Q.of_int64 in @@ -208,11 +215,13 @@ let compute_and_store_reward_coeff_at_cycle_end ctxt ~new_cycle = let stake_ratio = Q.div q_total_frozen_stake q_total_supply (* = portion of frozen stake *) in + let issuance_ratio_min = compute_min ~reward_params in + let issuance_ratio_max = compute_max ~reward_params in let base_reward_coeff_ratio = compute_reward_coeff_ratio_without_bonus ~stake_ratio - ~issuance_ratio_max:reward_params.issuance_ratio_max - ~issuance_ratio_min:reward_params.issuance_ratio_min + ~issuance_ratio_max + ~issuance_ratio_min in let*? bonus = compute_bonus -- GitLab From b0fefd00fffdc019b26f96467e66fa25b1214eec Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 13 Dec 2023 15:38:36 +0100 Subject: [PATCH 02/10] Proto/AI: rename issuance_ratio_{min,max} to be final Regressions to be reset in a later commit --- .../lib_parameters/default_parameters.ml | 4 ++-- .../lib_protocol/adaptive_issuance_storage.ml | 8 +++---- .../lib_protocol/alpha_context.mli | 4 ++-- .../lib_protocol/constants_parametric_repr.ml | 24 +++++++++---------- .../constants_parametric_repr.mli | 4 ++-- src/proto_alpha/lib_protocol/raw_context.ml | 4 ++-- .../test/unit/test_adaptive_issuance.ml | 20 +++++++++------- 7 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index 9c9ef545f9cb..d10247121052 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -279,8 +279,8 @@ let constants_mainnet = launch_ema_threshold = 1_600_000_000l; adaptive_rewards_params = { - issuance_ratio_min = Q.(5 // 10000); - issuance_ratio_max = Q.(1 // 20); + issuance_ratio_final_min = Q.(5 // 10000); + issuance_ratio_final_max = Q.(1 // 20); max_bonus = Protocol.Issuance_bonus_repr.max_bonus_parameter_of_Q_exn Q.(5 // 100); diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index fcb45a25cf75..84740cc8561b 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -108,11 +108,11 @@ let truncate_reward_coeff ~issuance_ratio_min ~issuance_ratio_max f = let compute_min ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = - reward_params.issuance_ratio_min + reward_params.issuance_ratio_final_min let compute_max ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = - reward_params.issuance_ratio_max + reward_params.issuance_ratio_final_max let compute_reward_coeff_ratio_without_bonus = let q_1600 = Q.of_int 1600 in @@ -126,8 +126,8 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio ~(previous_bonus : Issuance_bonus_repr.t) ~reward_params = let Constants_parametric_repr. { - issuance_ratio_min = _; - issuance_ratio_max = _; + issuance_ratio_final_min = _; + issuance_ratio_final_max = _; max_bonus; growth_rate; center_dz; diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index d3b015125674..b6ca492e7b33 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -855,8 +855,8 @@ module Constants : sig } type adaptive_rewards_params = { - issuance_ratio_min : Q.t; - issuance_ratio_max : Q.t; + issuance_ratio_final_min : Q.t; + issuance_ratio_final_max : Q.t; max_bonus : Issuance_bonus_repr.max_bonus; growth_rate : Q.t; center_dz : Q.t; diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml index c6e5a5ab9345..b7ae3cc83395 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml @@ -144,8 +144,8 @@ type zk_rollup = { } type adaptive_rewards_params = { - issuance_ratio_min : Q.t; - issuance_ratio_max : Q.t; + issuance_ratio_final_min : Q.t; + issuance_ratio_final_max : Q.t; max_bonus : Issuance_bonus_repr.max_bonus; growth_rate : Q.t; center_dz : Q.t; @@ -368,36 +368,36 @@ let adaptive_rewards_params_encoding = let open Data_encoding in conv (fun { - issuance_ratio_min; - issuance_ratio_max; + issuance_ratio_final_min; + issuance_ratio_final_max; max_bonus; growth_rate; center_dz; radius_dz; } -> - ( issuance_ratio_min, - issuance_ratio_max, + ( issuance_ratio_final_min, + issuance_ratio_final_max, max_bonus, growth_rate, center_dz, radius_dz )) - (fun ( issuance_ratio_min, - issuance_ratio_max, + (fun ( issuance_ratio_final_min, + issuance_ratio_final_max, max_bonus, growth_rate, center_dz, radius_dz ) -> { - issuance_ratio_min; - issuance_ratio_max; + issuance_ratio_final_min; + issuance_ratio_final_max; max_bonus; growth_rate; center_dz; radius_dz; }) (obj6 - (req "issuance_ratio_min" extremum_encoding) - (req "issuance_ratio_max" extremum_encoding) + (req "issuance_ratio_final_min" extremum_encoding) + (req "issuance_ratio_final_max" extremum_encoding) (req "max_bonus" Issuance_bonus_repr.max_bonus_encoding) (req "growth_rate" growth_rate_encoding) (req "center_dz" center_encoding) diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli index 4533c37e2fe3..7fb3acfd13c8 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli @@ -108,8 +108,8 @@ type zk_rollup = { } type adaptive_rewards_params = { - issuance_ratio_min : (* Maximum yearly issuance rate *) Q.t; - issuance_ratio_max : (* Minimum yearly issuance rate *) Q.t; + issuance_ratio_final_min : (* Maximum yearly issuance rate *) Q.t; + issuance_ratio_final_max : (* Minimum yearly issuance rate *) Q.t; max_bonus : (* Maximum issuance bonus value *) Issuance_bonus_repr.max_bonus; growth_rate : (* Bonus value's growth rate *) Q.t; center_dz : (* Center for bonus *) Q.t; diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index b81fd58726ec..2f2ebeb3794e 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1135,9 +1135,9 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = let adaptive_rewards_params = Constants_parametric_repr. { - issuance_ratio_min = + issuance_ratio_final_min = c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_min; - issuance_ratio_max = + issuance_ratio_final_max = c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_max; max_bonus = c.adaptive_issuance.adaptive_rewards_params.max_bonus; growth_rate = diff --git a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml index 8026f9665ce7..5e5f2f88431c 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml @@ -124,8 +124,8 @@ let test_compute_bonus () = let base_reward_coeff_ratio = compute_reward_coeff_ratio_without_bonus ~stake_ratio - ~issuance_ratio_max:reward_params.issuance_ratio_max - ~issuance_ratio_min:reward_params.issuance_ratio_min + ~issuance_ratio_max:reward_params.issuance_ratio_final_max + ~issuance_ratio_min:reward_params.issuance_ratio_final_min in let*?@ bonus = compute_bonus @@ -142,14 +142,14 @@ let test_compute_bonus () = ~loc:__LOC__ ~f:Q.geq (return full_reward_coeff) - reward_params.issuance_ratio_min + reward_params.issuance_ratio_final_min in let* () = assert_fun ~loc:__LOC__ ~f:Q.leq (return full_reward_coeff) - reward_params.issuance_ratio_max + reward_params.issuance_ratio_final_max in return (bonus :> Q.t) in @@ -360,20 +360,22 @@ let test_compute_coeff () = assert_eq_lwt ~loc:__LOC__ (compute_coeff Q.zero Q.zero) - (compute_coeff reward_params.issuance_ratio_min Q.zero) + (compute_coeff reward_params.issuance_ratio_final_min Q.zero) in (* Test max *) let* () = assert_eq_lwt ~loc:__LOC__ - (compute_coeff (Q.add reward_params.issuance_ratio_max Q.one) Q.zero) - (compute_coeff reward_params.issuance_ratio_max Q.zero) + (compute_coeff + (Q.add reward_params.issuance_ratio_final_max Q.one) + Q.zero) + (compute_coeff reward_params.issuance_ratio_final_max Q.zero) in let* () = assert_eq_lwt ~loc:__LOC__ - (compute_coeff reward_params.issuance_ratio_max Q.(1 // 100)) - (compute_coeff reward_params.issuance_ratio_max Q.zero) + (compute_coeff reward_params.issuance_ratio_final_max Q.(1 // 100)) + (compute_coeff reward_params.issuance_ratio_final_max Q.zero) in return_unit in -- GitLab From 8ea1cf85acbdbdcb3c29f32ef84f3437e4057e08 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 13 Dec 2023 16:21:21 +0100 Subject: [PATCH 03/10] Proto/AI: add progressive min/max parameters Again, regressions to be updated later --- .../lib_parameters/default_parameters.ml | 6 +++++ .../lib_protocol/adaptive_issuance_storage.ml | 4 +++ .../lib_protocol/alpha_context.mli | 4 +++ .../lib_protocol/constants_parametric_repr.ml | 26 ++++++++++++++++++- .../constants_parametric_repr.mli | 16 ++++++++++-- src/proto_alpha/lib_protocol/raw_context.ml | 6 +++++ 6 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index d10247121052..42e0ed334dc6 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -281,6 +281,12 @@ let constants_mainnet = { issuance_ratio_final_min = Q.(5 // 10000); issuance_ratio_final_max = Q.(1 // 20); + (* Placeholder values for progressive min/max *) + (* TODO #6732: fix adaptive rewards parameters *) + issuance_ratio_initial_min = Q.(2 // 100); + issuance_ratio_initial_max = Q.(2 // 100); + initial_period = 3; + transition_period = 3; max_bonus = Protocol.Issuance_bonus_repr.max_bonus_parameter_of_Q_exn Q.(5 // 100); diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index 84740cc8561b..9a3048277483 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -128,6 +128,10 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio { issuance_ratio_final_min = _; issuance_ratio_final_max = _; + issuance_ratio_initial_min = _; + issuance_ratio_initial_max = _; + initial_period = _; + transition_period = _; max_bonus; growth_rate; center_dz; diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index b6ca492e7b33..75cf1765d967 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -857,6 +857,10 @@ module Constants : sig type adaptive_rewards_params = { issuance_ratio_final_min : Q.t; issuance_ratio_final_max : Q.t; + issuance_ratio_initial_min : Q.t; + issuance_ratio_initial_max : Q.t; + initial_period : int; + transition_period : int; max_bonus : Issuance_bonus_repr.max_bonus; growth_rate : Q.t; center_dz : Q.t; diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml index b7ae3cc83395..b66fc7a8e6b9 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml @@ -146,6 +146,10 @@ type zk_rollup = { type adaptive_rewards_params = { issuance_ratio_final_min : Q.t; issuance_ratio_final_max : Q.t; + issuance_ratio_initial_min : Q.t; + issuance_ratio_initial_max : Q.t; + initial_period : int; + transition_period : int; max_bonus : Issuance_bonus_repr.max_bonus; growth_rate : Q.t; center_dz : Q.t; @@ -370,6 +374,10 @@ let adaptive_rewards_params_encoding = (fun { issuance_ratio_final_min; issuance_ratio_final_max; + issuance_ratio_initial_min; + issuance_ratio_initial_max; + initial_period; + transition_period; max_bonus; growth_rate; center_dz; @@ -377,12 +385,20 @@ let adaptive_rewards_params_encoding = } -> ( issuance_ratio_final_min, issuance_ratio_final_max, + issuance_ratio_initial_min, + issuance_ratio_initial_max, + initial_period, + transition_period, max_bonus, growth_rate, center_dz, radius_dz )) (fun ( issuance_ratio_final_min, issuance_ratio_final_max, + issuance_ratio_initial_min, + issuance_ratio_initial_max, + initial_period, + transition_period, max_bonus, growth_rate, center_dz, @@ -390,14 +406,22 @@ let adaptive_rewards_params_encoding = { issuance_ratio_final_min; issuance_ratio_final_max; + issuance_ratio_initial_min; + issuance_ratio_initial_max; + initial_period; + transition_period; max_bonus; growth_rate; center_dz; radius_dz; }) - (obj6 + (obj10 (req "issuance_ratio_final_min" extremum_encoding) (req "issuance_ratio_final_max" extremum_encoding) + (req "issuance_ratio_initial_min" extremum_encoding) + (req "issuance_ratio_initial_max" extremum_encoding) + (req "initial_period" uint8) + (req "transition_period" uint8) (req "max_bonus" Issuance_bonus_repr.max_bonus_encoding) (req "growth_rate" growth_rate_encoding) (req "center_dz" center_encoding) diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli index 7fb3acfd13c8..66a7d0d02728 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli @@ -108,8 +108,20 @@ type zk_rollup = { } type adaptive_rewards_params = { - issuance_ratio_final_min : (* Maximum yearly issuance rate *) Q.t; - issuance_ratio_final_max : (* Minimum yearly issuance rate *) Q.t; + issuance_ratio_final_min : (* Minimum yearly issuance rate *) Q.t; + issuance_ratio_final_max : (* Maximum yearly issuance rate *) Q.t; + issuance_ratio_initial_min : + (* Minimum yearly issuance rate at adaptive issuance activation *) Q.t; + issuance_ratio_initial_max : + (* Maximum yearly issuance rate at adaptive issuance activation *) Q.t; + initial_period : + (* Period in cycles during which the minimum and maximum yearly + issuance rate values stay at their initial values *) + int; + transition_period : + (* Period in cycles during which the minimum and maximum yearly + issuance rate values decrease/increase until they reach their global values *) + int; max_bonus : (* Maximum issuance bonus value *) Issuance_bonus_repr.max_bonus; growth_rate : (* Bonus value's growth rate *) Q.t; center_dz : (* Center for bonus *) Q.t; diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index 2f2ebeb3794e..6981a001084c 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1139,6 +1139,12 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_min; issuance_ratio_final_max = c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_max; + (* Placeholder values for progressive min/max *) + (* TODO #6732: fix adaptive rewards parameters *) + issuance_ratio_initial_min = Q.(2 // 100); + issuance_ratio_initial_max = Q.(2 // 100); + initial_period = 3; + transition_period = 3; max_bonus = c.adaptive_issuance.adaptive_rewards_params.max_bonus; growth_rate = c.adaptive_issuance.adaptive_rewards_params.growth_rate; -- GitLab From 6a88a0851b7009d80070424320a4345cec74e775 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 14 Dec 2023 11:43:31 +0100 Subject: [PATCH 04/10] Proto/AI: pass min and max as arguments --- .../lib_protocol/adaptive_issuance_storage.ml | 19 ++++++++++--------- .../adaptive_issuance_storage.mli | 4 +++- .../lib_protocol/alpha_context.mli | 4 +++- .../test/unit/test_adaptive_issuance.ml | 17 ++++++++++++----- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index 9a3048277483..d2a9edfc6e96 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -122,8 +122,9 @@ let compute_reward_coeff_ratio_without_bonus = (* f is truncated so that 0.05% <= f <= 5% *) truncate_reward_coeff ~issuance_ratio_min ~issuance_ratio_max f -let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio - ~(previous_bonus : Issuance_bonus_repr.t) ~reward_params = +let compute_bonus ~issuance_ratio_max ~seconds_per_cycle ~stake_ratio + ~base_reward_coeff_ratio ~(previous_bonus : Issuance_bonus_repr.t) + ~reward_params = let Constants_parametric_repr. { issuance_ratio_final_min = _; @@ -139,7 +140,6 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio } = reward_params in - let issuance_ratio_max = compute_max ~reward_params in let base_reward_coeff_dist_to_max = Q.(issuance_ratio_max - base_reward_coeff_ratio) in @@ -169,15 +169,14 @@ let compute_bonus ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio let compute_coeff = let q_min_per_year = Q.of_int 525600 in - fun ~base_total_issued_per_minute + fun ~issuance_ratio_max + ~issuance_ratio_min + ~base_total_issued_per_minute ~base_reward_coeff_ratio ~q_total_supply - ~(bonus : Issuance_bonus_repr.t) - ~reward_params -> + ~(bonus : Issuance_bonus_repr.t) -> if Tez_repr.(base_total_issued_per_minute = zero) then Q.one else - let issuance_ratio_min = compute_min ~reward_params in - let issuance_ratio_max = compute_max ~reward_params in let q_base_total_issued_per_minute = Tez_repr.to_mutez base_total_issued_per_minute |> Q.of_int64 in @@ -229,6 +228,7 @@ let compute_and_store_reward_coeff_at_cycle_end ctxt ~new_cycle = in let*? bonus = compute_bonus + ~issuance_ratio_max ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio @@ -237,11 +237,12 @@ let compute_and_store_reward_coeff_at_cycle_end ctxt ~new_cycle = in let coeff = compute_coeff + ~issuance_ratio_max + ~issuance_ratio_min ~base_total_issued_per_minute ~base_reward_coeff_ratio ~q_total_supply ~bonus - ~reward_params in let*! ctxt = Storage.Issuance_bonus.add ctxt for_cycle bonus in let*! ctxt = Storage.Issuance_coeff.add ctxt for_cycle coeff in diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli index 5305a216b73f..2510e74debfe 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli @@ -101,6 +101,7 @@ module Internal_for_tests : sig stake_ratio:Q.t -> issuance_ratio_max:Q.t -> issuance_ratio_min:Q.t -> Q.t val compute_bonus : + issuance_ratio_max:Q.t -> seconds_per_cycle:int64 -> stake_ratio:Q.t -> base_reward_coeff_ratio:Q.t -> @@ -109,10 +110,11 @@ module Internal_for_tests : sig Issuance_bonus_repr.t tzresult val compute_coeff : + issuance_ratio_max:Q.t -> + issuance_ratio_min:Q.t -> base_total_issued_per_minute:Tez_repr.t -> base_reward_coeff_ratio:Q.t -> q_total_supply:Q.t -> bonus:Issuance_bonus_repr.t -> - reward_params:Constants_parametric_repr.adaptive_rewards_params -> Q.t end diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 75cf1765d967..9ac113dbd0f8 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2367,6 +2367,7 @@ module Delegate : sig Q.t val compute_bonus : + issuance_ratio_max:Q.t -> seconds_per_cycle:int64 -> stake_ratio:Q.t -> base_reward_coeff_ratio:Q.t -> @@ -2375,11 +2376,12 @@ module Delegate : sig Issuance_bonus_repr.t tzresult val compute_coeff : + issuance_ratio_max:Q.t -> + issuance_ratio_min:Q.t -> base_total_issued_per_minute:Tez_repr.t -> base_reward_coeff_ratio:Q.t -> q_total_supply:Q.t -> bonus:Issuance_bonus_repr.t -> - reward_params:Constants.Parametric.adaptive_rewards_params -> Q.t end end diff --git a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml index 5e5f2f88431c..dcb56ead77b7 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml @@ -121,14 +121,17 @@ let test_compute_bonus () = let*?@ previous_bonus = Issuance_bonus_repr.of_Q ~max_bonus:reward_params.max_bonus previous_bonus in + let issuance_ratio_max = reward_params.issuance_ratio_global_max in + let issuance_ratio_min = reward_params.issuance_ratio_global_min in let base_reward_coeff_ratio = compute_reward_coeff_ratio_without_bonus ~stake_ratio - ~issuance_ratio_max:reward_params.issuance_ratio_final_max - ~issuance_ratio_min:reward_params.issuance_ratio_final_min + ~issuance_ratio_max + ~issuance_ratio_min in let*?@ bonus = compute_bonus + ~issuance_ratio_max ~seconds_per_cycle ~stake_ratio ~base_reward_coeff_ratio @@ -142,14 +145,14 @@ let test_compute_bonus () = ~loc:__LOC__ ~f:Q.geq (return full_reward_coeff) - reward_params.issuance_ratio_final_min + issuance_ratio_min in let* () = assert_fun ~loc:__LOC__ ~f:Q.leq (return full_reward_coeff) - reward_params.issuance_ratio_final_max + issuance_ratio_max in return (bonus :> Q.t) in @@ -255,7 +258,11 @@ let test_compute_coeff () = let compute_coeff ?(base_total_issued_per_minute = base_total_issued_per_minute) ?(q_total_supply = Q.of_int64 1_000_000_000L) () = - compute_coeff ~base_total_issued_per_minute ~q_total_supply ~reward_params + compute_coeff + ~issuance_ratio_max:reward_params.issuance_ratio_final_max + ~issuance_ratio_min:reward_params.issuance_ratio_final_min + ~base_total_issued_per_minute + ~q_total_supply in (* Test inverse linearity wrt base issuance Base issuance * Issuance coeff = constant (= issuance per unit of time) -- GitLab From 85218864bcdf4e15a14d414570d03149600bc002 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 14 Dec 2023 11:51:01 +0100 Subject: [PATCH 05/10] Proto/AI: progressive min/max --- .../lib_protocol/adaptive_issuance_storage.ml | 62 +++++++++++++++++-- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index d2a9edfc6e96..df928c8cfba1 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -60,6 +60,8 @@ let () = | Undetermined_issuance_coeff_for_cycle cycle -> Some cycle | _ -> None) (fun cycle -> Undetermined_issuance_coeff_for_cycle cycle) +let launch_cycle ctxt = Storage.Adaptive_issuance.Activation.get ctxt + let check_determined_cycle ctxt cycle = let ai_enable = Constants_storage.adaptive_issuance_enable ctxt in if ai_enable then @@ -106,13 +108,58 @@ let truncate_reward_coeff ~issuance_ratio_min ~issuance_ratio_max f = let f = Q.max f issuance_ratio_min in f +let compute_extremum ~launch_cycle ~new_cycle ~initial_period ~transition_period + ~initial ~final = + match launch_cycle with + | None -> + (* This case shouldn't happen, but if it does this value is the most sensible *) + initial + | Some launch_cycle -> + let transition_period = transition_period + 1 in + assert (Compare.Int.(transition_period > 0)) ; + let t1 = Cycle_repr.add launch_cycle initial_period in + let t2 = Cycle_repr.add t1 transition_period in + if Cycle_repr.(new_cycle <= t1) then initial + else if Cycle_repr.(new_cycle >= t2) then final + else + let t = Cycle_repr.diff new_cycle t1 |> Q.of_int32 in + Q.(((final - initial) * t / of_int transition_period) + initial) + let compute_min ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = - reward_params.issuance_ratio_final_min + let Constants_parametric_repr. + { + initial_period; + transition_period; + issuance_ratio_initial_min; + issuance_ratio_final_min; + _; + } = + reward_params + in + compute_extremum + ~initial_period + ~transition_period + ~initial:issuance_ratio_initial_min + ~final:issuance_ratio_final_min let compute_max ~(reward_params : Constants_parametric_repr.adaptive_rewards_params) = - reward_params.issuance_ratio_final_max + let Constants_parametric_repr. + { + initial_period; + transition_period; + issuance_ratio_initial_max; + issuance_ratio_final_max; + _; + } = + reward_params + in + compute_extremum + ~initial_period + ~transition_period + ~initial:issuance_ratio_initial_max + ~final:issuance_ratio_final_max let compute_reward_coeff_ratio_without_bonus = let q_1600 = Q.of_int 1600 in @@ -191,6 +238,7 @@ let compute_and_store_reward_coeff_at_cycle_end ctxt ~new_cycle = let ai_enable = Constants_storage.adaptive_issuance_enable ctxt in if not ai_enable then return ctxt else + let* launch_cycle = launch_cycle ctxt in let reward_params = Constants_storage.adaptive_issuance_rewards_params ctxt in @@ -218,8 +266,12 @@ let compute_and_store_reward_coeff_at_cycle_end ctxt ~new_cycle = let stake_ratio = Q.div q_total_frozen_stake q_total_supply (* = portion of frozen stake *) in - let issuance_ratio_min = compute_min ~reward_params in - let issuance_ratio_max = compute_max ~reward_params in + let issuance_ratio_min = + compute_min ~launch_cycle ~new_cycle ~reward_params + in + let issuance_ratio_max = + compute_max ~launch_cycle ~new_cycle ~reward_params + in let base_reward_coeff_ratio = compute_reward_coeff_ratio_without_bonus ~stake_ratio @@ -273,8 +325,6 @@ let init ctxt = let activate ctxt ~cycle = Storage.Adaptive_issuance.Activation.update ctxt (Some cycle) -let launch_cycle ctxt = Storage.Adaptive_issuance.Activation.get ctxt - let set_adaptive_issuance_enable ctxt = let open Lwt_result_syntax in let+ enable = -- GitLab From c7a37a30734e72afe53248b97f71e38c2924a3b7 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 14 Dec 2023 11:55:50 +0100 Subject: [PATCH 06/10] Proto/AI/tests: expose compute_{min,max} for tests --- .../lib_protocol/adaptive_issuance_storage.ml | 4 ++++ .../lib_protocol/adaptive_issuance_storage.mli | 12 ++++++++++++ src/proto_alpha/lib_protocol/alpha_context.mli | 12 ++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml index df928c8cfba1..18adf5206617 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.ml @@ -391,4 +391,8 @@ module Internal_for_tests = struct let compute_bonus = compute_bonus let compute_coeff = compute_coeff + + let compute_min = compute_min + + let compute_max = compute_max end diff --git a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli index 2510e74debfe..4f007628d215 100644 --- a/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli +++ b/src/proto_alpha/lib_protocol/adaptive_issuance_storage.mli @@ -117,4 +117,16 @@ module Internal_for_tests : sig q_total_supply:Q.t -> bonus:Issuance_bonus_repr.t -> Q.t + + val compute_min : + reward_params:Constants_parametric_repr.adaptive_rewards_params -> + launch_cycle:Cycle_repr.t option -> + new_cycle:Cycle_repr.t -> + Q.t + + val compute_max : + reward_params:Constants_parametric_repr.adaptive_rewards_params -> + launch_cycle:Cycle_repr.t option -> + new_cycle:Cycle_repr.t -> + Q.t end diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 9ac113dbd0f8..9db99c9a6e0e 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2383,6 +2383,18 @@ module Delegate : sig q_total_supply:Q.t -> bonus:Issuance_bonus_repr.t -> Q.t + + val compute_min : + reward_params:Constants.Parametric.adaptive_rewards_params -> + launch_cycle:Cycle_repr.t option -> + new_cycle:Cycle_repr.t -> + Q.t + + val compute_max : + reward_params:Constants.Parametric.adaptive_rewards_params -> + launch_cycle:Cycle_repr.t option -> + new_cycle:Cycle_repr.t -> + Q.t end end -- GitLab From b226f89e77c2c07ba7d57327777ee39ca8f359a8 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 14 Dec 2023 16:34:05 +0100 Subject: [PATCH 07/10] Proto/AI/tests: add unit tests for min/max --- .../test/unit/test_adaptive_issuance.ml | 207 +++++++++++++++++- 1 file changed, 204 insertions(+), 3 deletions(-) diff --git a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml index dcb56ead77b7..23a82c1a994d 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_adaptive_issuance.ml @@ -121,8 +121,8 @@ let test_compute_bonus () = let*?@ previous_bonus = Issuance_bonus_repr.of_Q ~max_bonus:reward_params.max_bonus previous_bonus in - let issuance_ratio_max = reward_params.issuance_ratio_global_max in - let issuance_ratio_min = reward_params.issuance_ratio_global_min in + let issuance_ratio_max = reward_params.issuance_ratio_final_max in + let issuance_ratio_min = reward_params.issuance_ratio_final_min in let base_reward_coeff_ratio = compute_reward_coeff_ratio_without_bonus ~stake_ratio @@ -247,7 +247,6 @@ let test_compute_coeff () = let* b in Assert.equal ~loc Q.equal "" Q.pp_print a b in - let reward_params = Default_parameters.constants_test.adaptive_issuance.adaptive_rewards_params in @@ -386,7 +385,205 @@ let test_compute_coeff () = in return_unit in + return_unit +let test_compute_min_max () = + let open Delegate.Rewards.Internal_for_tests in + let open Lwt_result_wrap_syntax in + (* let assert_eq ~loc a b = Assert.equal ~loc Q.equal "" Q.pp_print a b in *) + let assert_eq_list ~loc a b = + Assert.assert_equal_list ~loc Q.equal "" Q.pp_print a b + in + let reward_params = + Default_parameters.constants_test.adaptive_issuance.adaptive_rewards_params + in + let update_reward_params ?issuance_ratio_final_min ?issuance_ratio_final_max + ?issuance_ratio_initial_min ?issuance_ratio_initial_max ?initial_period + ?transition_period + (reward_params : Constants.Parametric.adaptive_rewards_params) = + let issuance_ratio_final_min = + Option.value + ~default:reward_params.issuance_ratio_final_min + issuance_ratio_final_min + in + let issuance_ratio_final_max = + Option.value + ~default:reward_params.issuance_ratio_final_max + issuance_ratio_final_max + in + let issuance_ratio_initial_min = + Option.value + ~default:reward_params.issuance_ratio_initial_min + issuance_ratio_initial_min + in + let issuance_ratio_initial_max = + Option.value + ~default:reward_params.issuance_ratio_initial_max + issuance_ratio_initial_max + in + let initial_period = + Option.value ~default:reward_params.initial_period initial_period + in + let transition_period = + Option.value ~default:reward_params.transition_period transition_period + in + { + reward_params with + issuance_ratio_final_min; + issuance_ratio_final_max; + issuance_ratio_initial_min; + issuance_ratio_initial_max; + initial_period; + transition_period; + } + in + let compute_aux ~f ?issuance_ratio_final_min ?issuance_ratio_final_max + ?issuance_ratio_initial_min ?issuance_ratio_initial_max ?initial_period + ?transition_period ?(launch_cycle = Some 0l) cycle = + let launch_cycle = Option.map Cycle_repr.of_int32_exn launch_cycle in + let new_cycle = Cycle_repr.of_int32_exn (Int32.of_int cycle) in + let reward_params = + update_reward_params + ?issuance_ratio_final_min + ?issuance_ratio_final_max + ?issuance_ratio_initial_min + ?issuance_ratio_initial_max + ?initial_period + ?transition_period + reward_params + in + f ~reward_params ~launch_cycle ~new_cycle + in + let compute_min = compute_aux ~f:compute_min in + let compute_max = compute_aux ~f:compute_max in + let assert_eq_on_interval ~loc ~f ~from ~to_ expected = + assert (List.length expected = to_ - from + 1) ; + let actual = Stdlib.List.init (to_ - from + 1) (fun i -> f (i + from)) in + assert_eq_list ~loc expected actual + in + (* Python-style list generation *) + let ( *+ ) a b = Stdlib.List.init b (fun _ -> a) in + (* Test before launch cycle *) + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:(compute_min ~launch_cycle:(Some 10l)) + ~from:0 + ~to_:10 + (reward_params.issuance_ratio_initial_min *+ 11) + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:(compute_max ~launch_cycle:(Some 10l)) + ~from:0 + ~to_:10 + (reward_params.issuance_ratio_initial_max *+ 11) + in + (* Test no launch cycle *) + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:(compute_min ~launch_cycle:None) + ~from:0 + ~to_:10 + (reward_params.issuance_ratio_initial_min *+ 11) + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:(compute_max ~launch_cycle:None) + ~from:0 + ~to_:10 + (reward_params.issuance_ratio_initial_max *+ 11) + in + (* From now on, launch_cycle = 0 *) + (* Test initial period *) + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_min + ~from:0 + ~to_:reward_params.initial_period + (reward_params.issuance_ratio_initial_min + *+ (reward_params.initial_period + 1)) + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_max + ~from:0 + ~to_:reward_params.initial_period + (reward_params.issuance_ratio_initial_max + *+ (reward_params.initial_period + 1)) + in + (* Test final period *) + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_min + ~from:(reward_params.initial_period + reward_params.transition_period + 1) + ~to_:(reward_params.initial_period + reward_params.transition_period + 10) + (reward_params.issuance_ratio_final_min *+ 10) + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_max + ~from:(reward_params.initial_period + reward_params.transition_period + 1) + ~to_:(reward_params.initial_period + reward_params.transition_period + 10) + (reward_params.issuance_ratio_final_max *+ 10) + in + (* Test transition period *) + let* () = + let initial_period = 5 in + let transition_period = 5 in + let issuance_ratio_initial_min = Q.(7 // 100) in + let issuance_ratio_final_min = Q.(1 // 100) in + (* Min increases by 1/100th per cycle *) + let issuance_ratio_initial_max = Q.(1 // 10) in + let issuance_ratio_final_max = Q.(7 // 10) in + (* Max increases by 1/10th per cycle *) + let compute_min = + compute_min + ~initial_period + ~transition_period + ~issuance_ratio_initial_max + ~issuance_ratio_initial_min + ~issuance_ratio_final_max + ~issuance_ratio_final_min + in + let compute_max = + compute_max + ~initial_period + ~transition_period + ~issuance_ratio_initial_max + ~issuance_ratio_initial_min + ~issuance_ratio_final_max + ~issuance_ratio_final_min + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_min + ~from:0 + ~to_:15 + ((issuance_ratio_initial_min *+ 6) + @ Q.[6 // 100; 5 // 100; 4 // 100; 3 // 100; 2 // 100] + @ (issuance_ratio_final_min *+ 5)) + in + let* () = + assert_eq_on_interval + ~loc:__LOC__ + ~f:compute_max + ~from:0 + ~to_:15 + ((issuance_ratio_initial_max *+ 6) + @ Q.[2 // 10; 3 // 10; 4 // 10; 5 // 10; 6 // 10] + @ (issuance_ratio_final_max *+ 5)) + in + return_unit + in return_unit let tests = @@ -408,6 +605,10 @@ let tests = "adaptive issuance - reward coeff computation" `Quick test_compute_coeff; + tztest + "adaptive issuance - min/max coeff computation" + `Quick + test_compute_min_max; ] let () = -- GitLab From 0d754c515ee820905f8f931824247d56b3660a17 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Tue, 9 Jan 2024 16:46:41 +0100 Subject: [PATCH 08/10] Proto/AI: set parameters Fix #6732 --- .../lib_parameters/default_parameters.ml | 14 ++++++------- src/proto_alpha/lib_protocol/raw_context.ml | 21 ++++++++++--------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index 42e0ed334dc6..03f75600a512 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -279,14 +279,12 @@ let constants_mainnet = launch_ema_threshold = 1_600_000_000l; adaptive_rewards_params = { - issuance_ratio_final_min = Q.(5 // 10000); - issuance_ratio_final_max = Q.(1 // 20); - (* Placeholder values for progressive min/max *) - (* TODO #6732: fix adaptive rewards parameters *) - issuance_ratio_initial_min = Q.(2 // 100); - issuance_ratio_initial_max = Q.(2 // 100); - initial_period = 3; - transition_period = 3; + issuance_ratio_final_min = Q.(0_25 // 100_00); + issuance_ratio_final_max = Q.(10 // 100); + issuance_ratio_initial_min = Q.(45 // 1000); + issuance_ratio_initial_max = Q.(55 // 1000); + initial_period = 10; + transition_period = 50; max_bonus = Protocol.Issuance_bonus_repr.max_bonus_parameter_of_Q_exn Q.(5 // 100); diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index 6981a001084c..424600b31c3c 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1135,16 +1135,17 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = let adaptive_rewards_params = Constants_parametric_repr. { - issuance_ratio_final_min = - c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_min; - issuance_ratio_final_max = - c.adaptive_issuance.adaptive_rewards_params.issuance_ratio_max; - (* Placeholder values for progressive min/max *) - (* TODO #6732: fix adaptive rewards parameters *) - issuance_ratio_initial_min = Q.(2 // 100); - issuance_ratio_initial_max = Q.(2 // 100); - initial_period = 3; - transition_period = 3; + issuance_ratio_final_min = Q.(0_25 // 100_00); + (* 0.25% *) + issuance_ratio_final_max = Q.(10 // 100) (* 10% *); + issuance_ratio_initial_min = Q.(45 // 1000); + (* 4.5% *) + issuance_ratio_initial_max = Q.(55 // 1000); + (* 5.5% *) + initial_period = 10; + (* 1 month *) + transition_period = 50; + (* 5 months *) max_bonus = c.adaptive_issuance.adaptive_rewards_params.max_bonus; growth_rate = c.adaptive_issuance.adaptive_rewards_params.growth_rate; -- GitLab From f35a80994cacda39a3f1f3f1af7599a2b9cbe3f6 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 14 Dec 2023 17:19:24 +0100 Subject: [PATCH 09/10] Proto/AI/tests: reset regression tests --- .../files/alpha__constants.ksy | 32 +++++++++++++++---- .../files/alpha__constants__parametric.ksy | 32 +++++++++++++++---- .../files/alpha__parameters.ksy | 32 +++++++++++++++---- ...t) RPC regression tests- misc_protocol.out | 10 ++++-- ...t) RPC regression tests- misc_protocol.out | 10 ++++-- ...y) RPC regression tests- misc_protocol.out | 10 ++++-- ...r) RPC regression tests- misc_protocol.out | 10 ++++-- ...c) RPC regression tests- misc_protocol.out | 10 ++++-- 8 files changed, 113 insertions(+), 33 deletions(-) diff --git a/contrib/kaitai-struct-files/files/alpha__constants.ksy b/contrib/kaitai-struct-files/files/alpha__constants.ksy index 75cfeb9ea02b..934d4bb5dc8f 100644 --- a/contrib/kaitai-struct-files/files/alpha__constants.ksy +++ b/contrib/kaitai-struct-files/files/alpha__constants.ksy @@ -5,10 +5,18 @@ doc: ! 'Encoding id: alpha.constants' types: adaptive_rewards_params: seq: - - id: issuance_ratio_min - type: issuance_ratio_min - - id: issuance_ratio_max - type: issuance_ratio_max + - id: issuance_ratio_final_min + type: issuance_ratio_final_min + - id: issuance_ratio_final_max + type: issuance_ratio_final_max + - id: issuance_ratio_initial_min + type: issuance_ratio_initial_min + - id: issuance_ratio_initial_max + type: issuance_ratio_initial_max + - id: initial_period + type: u1 + - id: transition_period + type: u1 - id: max_bonus type: s8 - id: growth_rate @@ -64,13 +72,25 @@ types: valid: min: -1073741824 max: 1073741823 - issuance_ratio_max: + issuance_ratio_final_max: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_final_min: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_initial_max: seq: - id: numerator type: z - id: denominator type: z - issuance_ratio_min: + issuance_ratio_initial_min: seq: - id: numerator type: z diff --git a/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy b/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy index 7a9cdc7f284f..752688d91747 100644 --- a/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy +++ b/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy @@ -5,10 +5,18 @@ doc: ! 'Encoding id: alpha.constants.parametric' types: adaptive_rewards_params: seq: - - id: issuance_ratio_min - type: issuance_ratio_min - - id: issuance_ratio_max - type: issuance_ratio_max + - id: issuance_ratio_final_min + type: issuance_ratio_final_min + - id: issuance_ratio_final_max + type: issuance_ratio_final_max + - id: issuance_ratio_initial_min + type: issuance_ratio_initial_min + - id: issuance_ratio_initial_max + type: issuance_ratio_initial_max + - id: initial_period + type: u1 + - id: transition_period + type: u1 - id: max_bonus type: s8 - id: growth_rate @@ -64,13 +72,25 @@ types: valid: min: -1073741824 max: 1073741823 - issuance_ratio_max: + issuance_ratio_final_max: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_final_min: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_initial_max: seq: - id: numerator type: z - id: denominator type: z - issuance_ratio_min: + issuance_ratio_initial_min: seq: - id: numerator type: z diff --git a/contrib/kaitai-struct-files/files/alpha__parameters.ksy b/contrib/kaitai-struct-files/files/alpha__parameters.ksy index 0bc137163152..9904127c7c66 100644 --- a/contrib/kaitai-struct-files/files/alpha__parameters.ksy +++ b/contrib/kaitai-struct-files/files/alpha__parameters.ksy @@ -5,10 +5,18 @@ doc: ! 'Encoding id: alpha.parameters' types: adaptive_rewards_params: seq: - - id: issuance_ratio_min - type: issuance_ratio_min - - id: issuance_ratio_max - type: issuance_ratio_max + - id: issuance_ratio_final_min + type: issuance_ratio_final_min + - id: issuance_ratio_final_max + type: issuance_ratio_final_max + - id: issuance_ratio_initial_min + type: issuance_ratio_initial_min + - id: issuance_ratio_initial_max + type: issuance_ratio_initial_max + - id: initial_period + type: u1 + - id: transition_period + type: u1 - id: max_bonus type: s8 - id: growth_rate @@ -198,13 +206,25 @@ types: valid: min: -1073741824 max: 1073741823 - issuance_ratio_max: + issuance_ratio_final_max: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_final_min: + seq: + - id: numerator + type: z + - id: denominator + type: z + issuance_ratio_initial_max: seq: - id: numerator type: z - id: denominator type: z - issuance_ratio_min: + issuance_ratio_initial_min: seq: - id: numerator type: z diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out index d55ecea3bf29..7c82c383618a 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out @@ -63,9 +63,13 @@ "edge_of_staking_over_delegation": 2, "adaptive_issuance_launch_ema_threshold": 1600000000, "adaptive_rewards_params": - { "issuance_ratio_min": { "numerator": "1", "denominator": "2000" }, - "issuance_ratio_max": { "numerator": "1", "denominator": "20" }, - "max_bonus": "50000000000000", + { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, + "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, + "issuance_ratio_initial_min": + { "numerator": "9", "denominator": "200" }, + "issuance_ratio_initial_max": + { "numerator": "11", "denominator": "200" }, "initial_period": 10, + "transition_period": 50, "max_bonus": "50000000000000", "growth_rate": { "numerator": "1", "denominator": "100" }, "center_dz": { "numerator": "1", "denominator": "2" }, "radius_dz": { "numerator": "1", "denominator": "50" } }, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out index 08e4088fc650..456ddf0b760b 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out @@ -63,9 +63,13 @@ "edge_of_staking_over_delegation": 2, "adaptive_issuance_launch_ema_threshold": 1600000000, "adaptive_rewards_params": - { "issuance_ratio_min": { "numerator": "1", "denominator": "2000" }, - "issuance_ratio_max": { "numerator": "1", "denominator": "20" }, - "max_bonus": "50000000000000", + { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, + "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, + "issuance_ratio_initial_min": + { "numerator": "9", "denominator": "200" }, + "issuance_ratio_initial_max": + { "numerator": "11", "denominator": "200" }, "initial_period": 10, + "transition_period": 50, "max_bonus": "50000000000000", "growth_rate": { "numerator": "1", "denominator": "100" }, "center_dz": { "numerator": "1", "denominator": "2" }, "radius_dz": { "numerator": "1", "denominator": "50" } }, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out index 2d256be68aa0..75146fa3223a 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out @@ -63,9 +63,13 @@ "edge_of_staking_over_delegation": 2, "adaptive_issuance_launch_ema_threshold": 1600000000, "adaptive_rewards_params": - { "issuance_ratio_min": { "numerator": "1", "denominator": "2000" }, - "issuance_ratio_max": { "numerator": "1", "denominator": "20" }, - "max_bonus": "50000000000000", + { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, + "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, + "issuance_ratio_initial_min": + { "numerator": "9", "denominator": "200" }, + "issuance_ratio_initial_max": + { "numerator": "11", "denominator": "200" }, "initial_period": 10, + "transition_period": 50, "max_bonus": "50000000000000", "growth_rate": { "numerator": "1", "denominator": "100" }, "center_dz": { "numerator": "1", "denominator": "2" }, "radius_dz": { "numerator": "1", "denominator": "50" } }, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out index da9e47d1ee68..3ee7bcdc9144 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out @@ -63,9 +63,13 @@ "edge_of_staking_over_delegation": 2, "adaptive_issuance_launch_ema_threshold": 1600000000, "adaptive_rewards_params": - { "issuance_ratio_min": { "numerator": "1", "denominator": "2000" }, - "issuance_ratio_max": { "numerator": "1", "denominator": "20" }, - "max_bonus": "50000000000000", + { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, + "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, + "issuance_ratio_initial_min": + { "numerator": "9", "denominator": "200" }, + "issuance_ratio_initial_max": + { "numerator": "11", "denominator": "200" }, "initial_period": 10, + "transition_period": 50, "max_bonus": "50000000000000", "growth_rate": { "numerator": "1", "denominator": "100" }, "center_dz": { "numerator": "1", "denominator": "2" }, "radius_dz": { "numerator": "1", "denominator": "50" } }, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out index da9e47d1ee68..3ee7bcdc9144 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out @@ -63,9 +63,13 @@ "edge_of_staking_over_delegation": 2, "adaptive_issuance_launch_ema_threshold": 1600000000, "adaptive_rewards_params": - { "issuance_ratio_min": { "numerator": "1", "denominator": "2000" }, - "issuance_ratio_max": { "numerator": "1", "denominator": "20" }, - "max_bonus": "50000000000000", + { "issuance_ratio_final_min": { "numerator": "1", "denominator": "400" }, + "issuance_ratio_final_max": { "numerator": "1", "denominator": "10" }, + "issuance_ratio_initial_min": + { "numerator": "9", "denominator": "200" }, + "issuance_ratio_initial_max": + { "numerator": "11", "denominator": "200" }, "initial_period": 10, + "transition_period": 50, "max_bonus": "50000000000000", "growth_rate": { "numerator": "1", "denominator": "100" }, "center_dz": { "numerator": "1", "denominator": "2" }, "radius_dz": { "numerator": "1", "denominator": "50" } }, -- GitLab From e6081c4c41564259798e2d21a4f2b1a677bd82a2 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Thu, 11 Jan 2024 13:02:57 +0100 Subject: [PATCH 10/10] Proto/tests: update mockup tests --- tezt/tests/mockup.ml | 51 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/tezt/tests/mockup.ml b/tezt/tests/mockup.ml index 1f2012ecd6b5..bf55728d07bc 100644 --- a/tezt/tests/mockup.ml +++ b/tezt/tests/mockup.ml @@ -1217,13 +1217,58 @@ let test_create_mockup_config_show_init_roundtrip protocols = ("chain_id", `String "NetXaFDF7xZQCpR"); ] in + (* Since adaptive rewards use [Q.t], the numerators and denominators should be co-primes. *) + let co_primed_adaptive_rewards : JSON.t = + let adaptive_rewards_succ = + JSON.(parametric_constants_succ |-> "adaptive_rewards_params") + in + if JSON.is_null adaptive_rewards_succ then + JSON.annotate ~origin:"no_adaptive_rewards" `Null + else + let simplify_field obj = + match JSON.as_object_opt obj with + | Some [("numerator", numerator); ("denominator", denominator)] -> + let numerator = JSON.as_int numerator in + let denominator = JSON.as_int denominator in + let Q.{num; den} = Q.(numerator // denominator) in + JSON.annotate ~origin:"simplify_field" + @@ `O + [ + ("numerator", `String (Z.to_int num |> string_of_int)); + ("denominator", `String (Z.to_int den |> string_of_int)); + ] + | _ -> obj + in + let all_fields = JSON.as_object adaptive_rewards_succ in + let co_primed_adaptive_rewards_params = + JSON.annotate ~origin:"new_adaptive_rewards_params" + @@ `O + (List.map + (fun (field_name, obj) -> + (field_name, JSON.unannotate (simplify_field obj))) + all_fields) + in + let new_adaptive_rewards_params = + JSON.merge_objects + adaptive_rewards_succ + co_primed_adaptive_rewards_params + in + JSON.annotate ~origin:"co_primed_adaptive_rewards" + @@ `O + [ + ( "adaptive_rewards_params", + JSON.unannotate new_adaptive_rewards_params ); + ] + in return JSON.( merge_objects (merge_objects - (merge_objects parametric_constants_succ updated_dal_parametric) - constant_parametric_constants) - mockup_constants) + (merge_objects + (merge_objects parametric_constants_succ updated_dal_parametric) + constant_parametric_constants) + mockup_constants) + co_primed_adaptive_rewards) in let get_state_using_config_show_mockup ~protocol mockup_client = -- GitLab