From 373cee1df6206771a56705261eecb5f32b3818b8 Mon Sep 17 00:00:00 2001 From: Marina Polubelova Date: Tue, 22 Oct 2024 16:34:39 +0200 Subject: [PATCH 1/5] Proto: make tolerated_inactivity_period a parametric constant --- .../lib_parameters/default_parameters.ml | 2 ++ src/proto_alpha/lib_protocol/alpha_context.mli | 3 +++ .../lib_protocol/constants_parametric_repr.ml | 13 +++++++++---- .../lib_protocol/constants_parametric_repr.mli | 1 + src/proto_alpha/lib_protocol/constants_storage.ml | 2 +- src/proto_alpha/lib_protocol/raw_context.ml | 3 +++ 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index 6b7303f75bc0..587f88f3d140 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -195,6 +195,8 @@ let constants_mainnet : Constants.Parametric.t = consensus_rights_delay = 2; blocks_preservation_cycles = 1; delegate_parameters_activation_delay = 5; + (* tolerated_inactivity_period = consensus_rights_delay + 1 *) + tolerated_inactivity_period = 3; blocks_per_cycle = 10800l; blocks_per_commitment = 240l; nonce_revelation_threshold = 960l; diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index d2370934ad69..e515aeb9c3fe 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -904,6 +904,7 @@ module Constants : sig consensus_rights_delay : int; blocks_preservation_cycles : int; delegate_parameters_activation_delay : int; + tolerated_inactivity_period : int; blocks_per_cycle : int32; blocks_per_commitment : int32; nonce_revelation_threshold : int32; @@ -979,6 +980,8 @@ module Constants : sig val delegate_parameters_activation_delay : context -> int + val tolerated_inactivity_period : context -> int + val slashable_deposits_period : context -> int val issuance_modification_delay : context -> int diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml index bb53dba47822..7ead82db13c1 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml @@ -206,6 +206,7 @@ type t = { consensus_rights_delay : int; blocks_preservation_cycles : int; delegate_parameters_activation_delay : int; + tolerated_inactivity_period : int; blocks_per_cycle : int32; blocks_per_commitment : int32; nonce_revelation_threshold : int32; @@ -546,7 +547,8 @@ let encoding = (fun c -> ( ( ( c.consensus_rights_delay, c.blocks_preservation_cycles, - c.delegate_parameters_activation_delay ), + c.delegate_parameters_activation_delay, + c.tolerated_inactivity_period ), ( c.blocks_per_cycle, c.blocks_per_commitment, c.nonce_revelation_threshold, @@ -590,7 +592,8 @@ let encoding = c.allow_tz4_delegate_enable ) ) ) ) ) ) ) ) )) (fun ( ( ( consensus_rights_delay, blocks_preservation_cycles, - delegate_parameters_activation_delay ), + delegate_parameters_activation_delay, + tolerated_inactivity_period ), ( blocks_per_cycle, blocks_per_commitment, nonce_revelation_threshold, @@ -636,6 +639,7 @@ let encoding = consensus_rights_delay; blocks_preservation_cycles; delegate_parameters_activation_delay; + tolerated_inactivity_period; blocks_per_cycle; blocks_per_commitment; nonce_revelation_threshold; @@ -681,10 +685,11 @@ let encoding = }) (merge_objs (merge_objs - (obj3 + (obj4 (req "consensus_rights_delay" uint8) (req "blocks_preservation_cycles" uint8) - (req "delegate_parameters_activation_delay" uint8)) + (req "delegate_parameters_activation_delay" uint8) + (req "tolerated_inactivity_period" uint8)) (obj8 (req "blocks_per_cycle" int32) (req "blocks_per_commitment" int32) diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli index 26df37126113..f771c958365f 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli @@ -177,6 +177,7 @@ type t = { (* Number of cycles after which submitted delegate parameters are being used. *) delegate_parameters_activation_delay : int; + tolerated_inactivity_period : int; blocks_per_cycle : int32; blocks_per_commitment : int32; nonce_revelation_threshold : int32; diff --git a/src/proto_alpha/lib_protocol/constants_storage.ml b/src/proto_alpha/lib_protocol/constants_storage.ml index 06cbada9c216..46b63e8266f6 100644 --- a/src/proto_alpha/lib_protocol/constants_storage.ml +++ b/src/proto_alpha/lib_protocol/constants_storage.ml @@ -59,7 +59,7 @@ let adaptive_issuance_activation_delay c = (** Tolerated inactivity period for delegates before being deactivated. *) let tolerated_inactivity_period c = let constants = Raw_context.constants c in - 1 + constants.consensus_rights_delay + constants.tolerated_inactivity_period (** Delay between consensus key declaration by the delegate and the cycle where it has to be used to sign on behalf of the delegate. *) diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index 2abb8a55ff97..8e6f9095c067 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1176,6 +1176,7 @@ let prepare_first_block ~level ~timestamp chain_id ctxt = consensus_rights_delay; blocks_preservation_cycles; delegate_parameters_activation_delay; + tolerated_inactivity_period; blocks_per_cycle; blocks_per_commitment; nonce_revelation_threshold; @@ -1227,6 +1228,7 @@ let prepare_first_block ~level ~timestamp chain_id ctxt = Constants_parametric_repr.consensus_rights_delay; blocks_preservation_cycles; delegate_parameters_activation_delay; + tolerated_inactivity_period; blocks_per_cycle; blocks_per_commitment; nonce_revelation_threshold; @@ -1514,6 +1516,7 @@ let prepare_first_block ~level ~timestamp chain_id ctxt = blocks_preservation_cycles; delegate_parameters_activation_delay; blocks_per_cycle; + tolerated_inactivity_period = consensus_rights_delay + 1; blocks_per_commitment; nonce_revelation_threshold; cycles_per_voting_period; -- GitLab From 603bff91250dc54feb2939505d2943dff45cbd7b Mon Sep 17 00:00:00 2001 From: Marina Polubelova Date: Tue, 22 Oct 2024 16:38:24 +0200 Subject: [PATCH 2/5] Proto/kaitai: update structs --- client-libs/kaitai-struct-files/files/alpha__constants.ksy | 2 ++ .../kaitai-struct-files/files/alpha__constants__parametric.ksy | 2 ++ client-libs/kaitai-struct-files/files/alpha__parameters.ksy | 2 ++ 3 files changed, 6 insertions(+) diff --git a/client-libs/kaitai-struct-files/files/alpha__constants.ksy b/client-libs/kaitai-struct-files/files/alpha__constants.ksy index a475e152eae0..0806e89e8117 100644 --- a/client-libs/kaitai-struct-files/files/alpha__constants.ksy +++ b/client-libs/kaitai-struct-files/files/alpha__constants.ksy @@ -218,6 +218,8 @@ seq: type: u1 - id: delegate_parameters_activation_delay type: u1 +- id: tolerated_inactivity_period + type: u1 - id: blocks_per_cycle type: s4be - id: blocks_per_commitment diff --git a/client-libs/kaitai-struct-files/files/alpha__constants__parametric.ksy b/client-libs/kaitai-struct-files/files/alpha__constants__parametric.ksy index 32d9086fb7d5..f174aa9d43c1 100644 --- a/client-libs/kaitai-struct-files/files/alpha__constants__parametric.ksy +++ b/client-libs/kaitai-struct-files/files/alpha__constants__parametric.ksy @@ -190,6 +190,8 @@ seq: type: u1 - id: delegate_parameters_activation_delay type: u1 +- id: tolerated_inactivity_period + type: u1 - id: blocks_per_cycle type: s4be - id: blocks_per_commitment diff --git a/client-libs/kaitai-struct-files/files/alpha__parameters.ksy b/client-libs/kaitai-struct-files/files/alpha__parameters.ksy index acaef10b1397..7ede8f687102 100644 --- a/client-libs/kaitai-struct-files/files/alpha__parameters.ksy +++ b/client-libs/kaitai-struct-files/files/alpha__parameters.ksy @@ -468,6 +468,8 @@ seq: type: u1 - id: delegate_parameters_activation_delay type: u1 +- id: tolerated_inactivity_period + type: u1 - id: blocks_per_cycle type: s4be - id: blocks_per_commitment -- GitLab From 46fe70aaa76d2b73573490c551ad0c13a815f686 Mon Sep 17 00:00:00 2001 From: Marina Polubelova Date: Tue, 22 Oct 2024 17:25:03 +0200 Subject: [PATCH 3/5] Tezt/Tests: reset regressions --- tezt/tests/consensus_key.ml | 8 ++++++++ ... (mode client) RPC regression tests- misc_protocol.out | 3 ++- ...- (mode light) RPC regression tests- misc_protocol.out | 3 ++- ...- (mode proxy) RPC regression tests- misc_protocol.out | 3 ++- .../Alpha- weeklynet regression test.out | 3 ++- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tezt/tests/consensus_key.ml b/tezt/tests/consensus_key.ml index 74cee2bf2cd0..73c5ba9cb066 100644 --- a/tezt/tests/consensus_key.ml +++ b/tezt/tests/consensus_key.ml @@ -100,6 +100,10 @@ let test_update_consensus_key = (["cache_stake_distribution_cycles"], `Int (consensus_rights_delay + 3)); (["adaptive_issuance_force_activation"], `Bool true); ] + @ + if Protocol.(number protocol > number Quebec) then + [(["tolerated_inactivity_period"], `Int (consensus_rights_delay + 1))] + else [] in let* parameter_file = Protocol.write_parameter_file ~base:(Right (protocol, None)) parameters @@ -628,6 +632,10 @@ let register ?(regression = true) title test = (["cache_stake_distribution_cycles"], `Int (consensus_rights_delay + 3)); (["adaptive_issuance_force_activation"], `Bool true); ] + @ + if Protocol.(number protocol > number Quebec) then + [(["tolerated_inactivity_period"], `Int (consensus_rights_delay + 1))] + else [] in let* parameter_file = Protocol.write_parameter_file ~base:(Right (protocol, None)) parameters 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 ebc54815e596..24e78abef987 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 @@ -10,7 +10,8 @@ "smart_rollup_message_size_limit": 4096, "smart_rollup_max_number_of_messages_per_level": "1000000", "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, + "delegate_parameters_activation_delay": 2, + "tolerated_inactivity_period": 3, "blocks_per_cycle": 8, "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", "hard_gas_limit_per_block": "1386666", 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 fb9c9bc2b7de..eb213b301997 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 @@ -10,7 +10,8 @@ "smart_rollup_message_size_limit": 4096, "smart_rollup_max_number_of_messages_per_level": "1000000", "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, + "delegate_parameters_activation_delay": 2, + "tolerated_inactivity_period": 3, "blocks_per_cycle": 8, "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", "hard_gas_limit_per_block": "1386666", 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 4a6d17febbae..f57f8faf6c37 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 @@ -10,7 +10,8 @@ "smart_rollup_message_size_limit": 4096, "smart_rollup_max_number_of_messages_per_level": "1000000", "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 2, "blocks_per_cycle": 8, + "delegate_parameters_activation_delay": 2, + "tolerated_inactivity_period": 3, "blocks_per_cycle": 8, "blocks_per_commitment": 4, "nonce_revelation_threshold": 4, "cycles_per_voting_period": 8, "hard_gas_limit_per_operation": "1040000", "hard_gas_limit_per_block": "1386666", diff --git a/tezt/tests/expected/protocol_migration.ml/Alpha- weeklynet regression test.out b/tezt/tests/expected/protocol_migration.ml/Alpha- weeklynet regression test.out index 0069a7a84585..999b50482525 100644 --- a/tezt/tests/expected/protocol_migration.ml/Alpha- weeklynet regression test.out +++ b/tezt/tests/expected/protocol_migration.ml/Alpha- weeklynet regression test.out @@ -1,7 +1,8 @@ ./octez-client rpc get /chains/main/blocks/head/context/constants/parametric { "consensus_rights_delay": 2, "blocks_preservation_cycles": 1, - "delegate_parameters_activation_delay": 3, "blocks_per_cycle": 200, + "delegate_parameters_activation_delay": 3, + "tolerated_inactivity_period": 3, "blocks_per_cycle": 200, "blocks_per_commitment": 25, "nonce_revelation_threshold": 50, "cycles_per_voting_period": 1, "hard_gas_limit_per_operation": "1040000", "hard_gas_limit_per_block": "3328000", "proof_of_work_threshold": "-1", -- GitLab From 8cc90b0967dc20cd52817cd74549a1e1230af7b7 Mon Sep 17 00:00:00 2001 From: Marina Polubelova Date: Wed, 23 Oct 2024 15:15:00 +0200 Subject: [PATCH 4/5] Proto/Tests: use tolerated_inactivity_period in tests --- .../test/helpers/scenario_bake.ml | 2 +- .../consensus/test_frozen_deposits.ml | 27 +++++-------------- .../integration/test_scenario_deactivation.ml | 10 ++++--- .../test/integration/test_scenario_stake.ml | 4 +-- 4 files changed, 15 insertions(+), 28 deletions(-) diff --git a/src/proto_alpha/lib_protocol/test/helpers/scenario_bake.ml b/src/proto_alpha/lib_protocol/test/helpers/scenario_bake.ml index fd13adf6e2ca..d6d9cdcb2f62 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/scenario_bake.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/scenario_bake.ml @@ -152,7 +152,7 @@ let check_misc block state : unit tzresult Lwt.t = let deactivated = Cycle.add account.last_seen_activity - (state.constants.consensus_rights_delay + 1) + state.constants.tolerated_inactivity_period < ctxt_cycle in let*! r3 = diff --git a/src/proto_alpha/lib_protocol/test/integration/consensus/test_frozen_deposits.ml b/src/proto_alpha/lib_protocol/test/integration/consensus/test_frozen_deposits.ml index 8daa50fe04e8..4598da5bb42e 100644 --- a/src/proto_alpha/lib_protocol/test/integration/consensus/test_frozen_deposits.ml +++ b/src/proto_alpha/lib_protocol/test/integration/consensus/test_frozen_deposits.ml @@ -441,7 +441,7 @@ let test_deposits_after_stake_removal () = in Assert.equal_tez ~loc:__LOC__ frozen_deposits_2 initial_frozen_deposits_2 -let test_deposits_unfrozen_after_deactivation () = +let test_frozen_deposits_with_deactivation () = let open Lwt_result_syntax in let* genesis, contracts = Context.init_with_constants2 constants in let (_contract1, account1), (_contract2, account2) = @@ -454,8 +454,8 @@ let test_deposits_unfrozen_after_deactivation () = expected last cycles at which it is considered active and at which it has non-zero deposits *) let last_active_cycle = - 1 + (2 * constants.consensus_rights_delay) - (* according to [Delegate_storage.set_active] *) + constants.tolerated_inactivity_period + constants.consensus_rights_delay + (* according to [Delegate_activation_storage.set_active] *) in let last_cycle_with_deposits = last_active_cycle + constants.consensus_rights_delay @@ -468,16 +468,6 @@ let test_deposits_unfrozen_after_deactivation () = let rec loop b n = if n = 0 then return b else - let* ai_activation_cycle = - Context.get_adaptive_issuance_launch_cycle (B b) - in - let frozen_deposits_when_deactivated = - match ai_activation_cycle with - | None -> Tez.zero - | Some cycle -> - if Cycle.(cycle > add root last_active_cycle) then Tez.zero - else initial_frozen_deposits - in let* b = Block.bake_until_cycle_end ~policy:(By_account account2) b in let* is_deactivated = Context.Delegate.deactivated (B b) account1 in let* frozen_deposits = @@ -490,13 +480,8 @@ let test_deposits_unfrozen_after_deactivation () = is_deactivated (new_cycle > last_active_cycle) in - (* deposits are automatically unfrozen for deactivated delegates only *) let* () = - Assert.equal_tez - ~loc:__LOC__ - frozen_deposits - (if is_deactivated then frozen_deposits_when_deactivated - else initial_frozen_deposits) + Assert.equal_tez ~loc:__LOC__ frozen_deposits initial_frozen_deposits in loop b (pred n) in @@ -769,9 +754,9 @@ let tests = `Quick test_deposits_after_stake_removal; tztest - "deposits are unfrozen after deactivation" + "frozen deposits with deactivation" `Quick - test_deposits_unfrozen_after_deactivation; + test_frozen_deposits_with_deactivation; tztest "frozen deposits with delegation" `Quick diff --git a/src/proto_alpha/lib_protocol/test/integration/test_scenario_deactivation.ml b/src/proto_alpha/lib_protocol/test/integration/test_scenario_deactivation.ml index bbec982a6cc2..4f09dd3c2644 100644 --- a/src/proto_alpha/lib_protocol/test/integration/test_scenario_deactivation.ml +++ b/src/proto_alpha/lib_protocol/test/integration/test_scenario_deactivation.ml @@ -38,7 +38,7 @@ let check_grace_period ~loc src_name = let grace = Cycle.add src.last_seen_activity - (state.State.constants.consensus_rights_delay + 1) + state.State.constants.tolerated_inactivity_period in let* rpc_grace = Context.Delegate.grace_period (B block) src.pkh in Assert.equal @@ -58,7 +58,8 @@ let test_simple_scenario_with_ai = --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) --> set_baker "baker" --> wait_n_cycles_f (fun (_, state) -> - (2 * state.State.constants.consensus_rights_delay) + 1) + state.State.constants.consensus_rights_delay + + state.State.constants.tolerated_inactivity_period) --> check_balance_field "delegate" `Staked (Tez.of_mutez 200_000_000_000L) --> check_is_active ~loc:__LOC__ "delegate" --> next_cycle @@ -84,7 +85,8 @@ let test_baking_deactivation = --> begin_test ["delegate"; "baker"] --> unstake "delegate" All --> wait_n_cycles_f (fun (_, state) -> - (2 * state.State.constants.consensus_rights_delay) + 1) + state.State.constants.consensus_rights_delay + + state.State.constants.tolerated_inactivity_period) --> check_is_active ~loc:__LOC__ "delegate" --> next_cycle --> check_is_not_active ~loc:__LOC__ "delegate" @@ -112,7 +114,7 @@ let test_baking_deactivation = (* Get deactivated by doing nothing *) --> set_baker "baker" --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay + 1) + state.State.constants.tolerated_inactivity_period) --> check_is_active ~loc:__LOC__ "delegate" --> next_cycle --> check_is_not_active ~loc:__LOC__ "delegate" diff --git a/src/proto_alpha/lib_protocol/test/integration/test_scenario_stake.ml b/src/proto_alpha/lib_protocol/test/integration/test_scenario_stake.ml index d5b26bde703c..4e1a7fc2e77e 100644 --- a/src/proto_alpha/lib_protocol/test/integration/test_scenario_stake.ml +++ b/src/proto_alpha/lib_protocol/test/integration/test_scenario_stake.ml @@ -615,9 +615,9 @@ let test_deactivation = (* We wait until the delegate is completely deactivated *) --> check_is_not_deactivated ~loc:__LOC__ "delegate" (* We already waited for [consensus_rights_delay] + 1 cycles since 0 stake, - we must wait for [consensus_rights_delay] more. *) + we must wait for [tolerated_inactivity_period - 1] more. *) --> wait_n_cycles_f (fun (_, state) -> - state.State.constants.consensus_rights_delay) + state.State.constants.tolerated_inactivity_period - 1) --> check_is_not_deactivated ~loc:__LOC__ "delegate" --> next_cycle --> check_is_deactivated ~loc:__LOC__ "delegate" -- GitLab From 6002e76b661247b56d03c9f8f19372895b60ce1b Mon Sep 17 00:00:00 2001 From: Marina Polubelova Date: Wed, 23 Oct 2024 15:21:39 +0200 Subject: [PATCH 5/5] Docs: update changelog --- docs/protocols/alpha.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/protocols/alpha.rst b/docs/protocols/alpha.rst index 46d731327184..995d323b804b 100644 --- a/docs/protocols/alpha.rst +++ b/docs/protocols/alpha.rst @@ -60,6 +60,9 @@ Protocol parameters - Lower the number of blocks per cycle (``blocks_per_cycle``) for ghostnet to 10800 (~12 hours). (MR :gl:`!15196`) +- Make ``tolerated_inactivity_period`` a protocol constant. (MR + :gl:`!15390`) + Bug Fixes --------- -- GitLab