From d03b4370c4334b436ecde53bfb697bb9fa9fb4e8 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:32:34 +0100 Subject: [PATCH 1/9] Proto/Delegate_missed_endorsements_storage: minor rewrite --- .../lib_protocol/delegate_missed_endorsements_storage.ml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml index 485cd3eed193..00efe98444e4 100644 --- a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml @@ -111,10 +111,11 @@ let record_baking_activity_and_pay_rewards_and_fees ctxt ~payload_producer let pay_payload_producer ctxt delegate = let contract = Contract_repr.Implicit delegate in Token.balance ctxt `Block_fees >>=? fun (ctxt, block_fees) -> - Token.transfer_n - ctxt - [(`Block_fees, block_fees); (`Baking_rewards, baking_reward)] - (`Contract contract) + Token.transfer ctxt `Block_fees (`Contract contract) block_fees + >>=? fun (ctxt, balance_updates_block_fees) -> + Token.transfer ctxt `Baking_rewards (`Contract contract) baking_reward + >|=? fun (ctxt, balance_updates_baking_rewards) -> + (ctxt, balance_updates_block_fees @ balance_updates_baking_rewards) in let pay_block_producer ctxt delegate bonus = let contract = Contract_repr.Implicit delegate in -- GitLab From 38f3f88924aa8f6b17596b874965e9c8dbbbfab8 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:35:20 +0100 Subject: [PATCH 2/9] Proto/Delegate_missed_endorsements_storage: transfer baking rewards to frozen deposits --- .../lib_protocol/delegate_missed_endorsements_storage.ml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml index 00efe98444e4..a89bc0433b56 100644 --- a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml @@ -113,7 +113,11 @@ let record_baking_activity_and_pay_rewards_and_fees ctxt ~payload_producer Token.balance ctxt `Block_fees >>=? fun (ctxt, block_fees) -> Token.transfer ctxt `Block_fees (`Contract contract) block_fees >>=? fun (ctxt, balance_updates_block_fees) -> - Token.transfer ctxt `Baking_rewards (`Contract contract) baking_reward + Token.transfer + ctxt + `Baking_rewards + (`Frozen_deposits delegate) + baking_reward >|=? fun (ctxt, balance_updates_baking_rewards) -> (ctxt, balance_updates_block_fees @ balance_updates_baking_rewards) in -- GitLab From 6a023e41809442893dd9035f574096738d1e4508 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 26 May 2023 16:01:50 +0200 Subject: [PATCH 3/9] Proto/Constants_storage: add adaptive_inflation_enable --- src/proto_alpha/lib_protocol/constants_storage.ml | 4 ++++ src/proto_alpha/lib_protocol/constants_storage.mli | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/proto_alpha/lib_protocol/constants_storage.ml b/src/proto_alpha/lib_protocol/constants_storage.ml index abcf569dd7fc..96e929cbcb8b 100644 --- a/src/proto_alpha/lib_protocol/constants_storage.ml +++ b/src/proto_alpha/lib_protocol/constants_storage.ml @@ -277,3 +277,7 @@ let zk_rollup_min_pending_to_process c = let zk_rollup_origination_size c = let zk_rollup = Raw_context.zk_rollup c in zk_rollup.origination_size + +let adaptive_inflation c = (Raw_context.constants c).adaptive_inflation + +let adaptive_inflation_enable c = (adaptive_inflation c).enable diff --git a/src/proto_alpha/lib_protocol/constants_storage.mli b/src/proto_alpha/lib_protocol/constants_storage.mli index 688f68a517a5..9a93ab1ad175 100644 --- a/src/proto_alpha/lib_protocol/constants_storage.mli +++ b/src/proto_alpha/lib_protocol/constants_storage.mli @@ -161,3 +161,5 @@ val zk_rollup_enable : Raw_context.t -> bool val zk_rollup_min_pending_to_process : Raw_context.t -> int val zk_rollup_origination_size : Raw_context.t -> int + +val adaptive_inflation_enable : Raw_context.t -> bool -- GitLab From 6883dc37f989d5d5f2769f185199fa6a49a0c5ec Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Fri, 26 May 2023 16:05:18 +0200 Subject: [PATCH 4/9] Proto/Constants_storage: add freeze_rewards --- src/proto_alpha/lib_protocol/constants_storage.ml | 2 ++ src/proto_alpha/lib_protocol/constants_storage.mli | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/proto_alpha/lib_protocol/constants_storage.ml b/src/proto_alpha/lib_protocol/constants_storage.ml index 96e929cbcb8b..194ce3ce9a37 100644 --- a/src/proto_alpha/lib_protocol/constants_storage.ml +++ b/src/proto_alpha/lib_protocol/constants_storage.ml @@ -281,3 +281,5 @@ let zk_rollup_origination_size c = let adaptive_inflation c = (Raw_context.constants c).adaptive_inflation let adaptive_inflation_enable c = (adaptive_inflation c).enable + +let freeze_rewards = adaptive_inflation_enable diff --git a/src/proto_alpha/lib_protocol/constants_storage.mli b/src/proto_alpha/lib_protocol/constants_storage.mli index 9a93ab1ad175..ea2fce0e8e7b 100644 --- a/src/proto_alpha/lib_protocol/constants_storage.mli +++ b/src/proto_alpha/lib_protocol/constants_storage.mli @@ -163,3 +163,5 @@ val zk_rollup_min_pending_to_process : Raw_context.t -> int val zk_rollup_origination_size : Raw_context.t -> int val adaptive_inflation_enable : Raw_context.t -> bool + +val freeze_rewards : Raw_context.t -> bool -- GitLab From 4d0282236d840b88ef0ad0c0bf1ef7bb8528d3ce Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:35:20 +0100 Subject: [PATCH 5/9] Proto/Delegate_missed_endorsements_storage: pay baking rewards to frozen deposits if AI --- .../delegate_missed_endorsements_storage.ml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml index a89bc0433b56..e40672abb80f 100644 --- a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml @@ -113,11 +113,11 @@ let record_baking_activity_and_pay_rewards_and_fees ctxt ~payload_producer Token.balance ctxt `Block_fees >>=? fun (ctxt, block_fees) -> Token.transfer ctxt `Block_fees (`Contract contract) block_fees >>=? fun (ctxt, balance_updates_block_fees) -> - Token.transfer - ctxt - `Baking_rewards - (`Frozen_deposits delegate) - baking_reward + let receiver = + if Constants_storage.freeze_rewards ctxt then `Frozen_deposits delegate + else `Contract contract + in + Token.transfer ctxt `Baking_rewards receiver baking_reward >|=? fun (ctxt, balance_updates_baking_rewards) -> (ctxt, balance_updates_block_fees @ balance_updates_baking_rewards) in -- GitLab From 2dfa19f0b0324d81ab2046c5c9ddb8beb8e71712 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:35:58 +0100 Subject: [PATCH 6/9] Proto/Delegate_missed_endorsements_storage: pay baking bonuses to frozen deposits if AI --- .../delegate_missed_endorsements_storage.ml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml index e40672abb80f..6ebef3a3cd70 100644 --- a/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml +++ b/src/proto_alpha/lib_protocol/delegate_missed_endorsements_storage.ml @@ -108,22 +108,25 @@ let record_baking_activity_and_pay_rewards_and_fees ctxt ~payload_producer Stake_storage.set_active ctxt block_producer else return ctxt) >>=? fun ctxt -> + let freeze_rewards = Constants_storage.freeze_rewards ctxt in let pay_payload_producer ctxt delegate = let contract = Contract_repr.Implicit delegate in Token.balance ctxt `Block_fees >>=? fun (ctxt, block_fees) -> Token.transfer ctxt `Block_fees (`Contract contract) block_fees >>=? fun (ctxt, balance_updates_block_fees) -> let receiver = - if Constants_storage.freeze_rewards ctxt then `Frozen_deposits delegate - else `Contract contract + if freeze_rewards then `Frozen_deposits delegate else `Contract contract in Token.transfer ctxt `Baking_rewards receiver baking_reward >|=? fun (ctxt, balance_updates_baking_rewards) -> (ctxt, balance_updates_block_fees @ balance_updates_baking_rewards) in let pay_block_producer ctxt delegate bonus = - let contract = Contract_repr.Implicit delegate in - Token.transfer ctxt `Baking_bonuses (`Contract contract) bonus + let receiver = + if freeze_rewards then `Frozen_deposits delegate + else `Contract (Contract_repr.Implicit delegate) + in + Token.transfer ctxt `Baking_bonuses receiver bonus in pay_payload_producer ctxt payload_producer >>=? fun (ctxt, balance_updates_payload_producer) -> -- GitLab From 1b6511e89da2bbc9098fbe1b9853f6a697d4a56d Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:37:50 +0100 Subject: [PATCH 7/9] Proto/Delegate_cycles: pay endorsing rewards to frozen deposits if AI --- src/proto_alpha/lib_protocol/delegate_cycles.ml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/proto_alpha/lib_protocol/delegate_cycles.ml b/src/proto_alpha/lib_protocol/delegate_cycles.ml index f2435b21f52e..1b335394682a 100644 --- a/src/proto_alpha/lib_protocol/delegate_cycles.ml +++ b/src/proto_alpha/lib_protocol/delegate_cycles.ml @@ -228,7 +228,6 @@ let distribute_endorsing_rewards ctxt last_cycle unrevealed_nonces = Stake_storage.get_selected_distribution ctxt last_cycle >>=? fun delegates -> List.fold_left_es (fun (ctxt, balance_updates) (delegate, active_stake) -> - let delegate_contract = Contract_repr.Implicit delegate in Delegate_missed_endorsements_storage .check_and_reset_delegate_participation ctxt @@ -248,11 +247,12 @@ let distribute_endorsing_rewards ctxt last_cycle unrevealed_nonces = let rewards = Tez_repr.mul_exn endorsing_reward_per_slot expected_slots in if sufficient_participation && has_revealed_nonces then (* Sufficient participation: we pay the rewards *) - Token.transfer - ctxt - `Endorsing_rewards - (`Contract delegate_contract) - rewards + let receiver = + if Constants_storage.freeze_rewards ctxt then + `Frozen_deposits delegate + else `Contract (Contract_repr.Implicit delegate) + in + Token.transfer ctxt `Endorsing_rewards receiver rewards >|=? fun (ctxt, payed_rewards_receipts) -> (ctxt, payed_rewards_receipts @ balance_updates) else -- GitLab From f24b666a675b6af844956bc471e876188920f27c Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Thu, 16 Mar 2023 22:39:22 +0100 Subject: [PATCH 8/9] Proto/Apply: pay revelation rewards to frozen deposits if AI --- src/proto_alpha/lib_protocol/alpha_context.mli | 2 ++ src/proto_alpha/lib_protocol/apply.ml | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 90455f6a7385..cf9b32c04279 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -1030,6 +1030,8 @@ module Constants : sig val zk_rollup_min_pending_to_process : context -> int + val freeze_rewards : context -> bool + (** All constants: fixed and parametric *) type t = private {fixed : fixed; parametric : Parametric.t} diff --git a/src/proto_alpha/lib_protocol/apply.ml b/src/proto_alpha/lib_protocol/apply.ml index da58a2c27e4d..36a7341e4a5f 100644 --- a/src/proto_alpha/lib_protocol/apply.ml +++ b/src/proto_alpha/lib_protocol/apply.ml @@ -1973,19 +1973,23 @@ let apply_contents_list (type kind) ctxt chain_id (mode : mode) let level = Level.from_raw ctxt level in Nonce.reveal ctxt level nonce >>=? fun ctxt -> let tip = Delegate.Rewards.seed_nonce_revelation_tip ctxt in - let contract = - Contract.Implicit payload_producer.Consensus_key.delegate + let delegate = payload_producer.Consensus_key.delegate in + let receiver = + if Constants.freeze_rewards ctxt then `Frozen_deposits delegate + else `Contract (Contract.Implicit delegate) in - Token.transfer ctxt `Revelation_rewards (`Contract contract) tip + Token.transfer ctxt `Revelation_rewards receiver tip >|=? fun (ctxt, balance_updates) -> (ctxt, Single_result (Seed_nonce_revelation_result balance_updates)) | Single (Vdf_revelation {solution}) -> Seed.update_seed ctxt solution >>=? fun ctxt -> let tip = Delegate.Rewards.vdf_revelation_tip ctxt in - let contract = - Contract.Implicit payload_producer.Consensus_key.delegate + let delegate = payload_producer.Consensus_key.delegate in + let receiver = + if Constants.freeze_rewards ctxt then `Frozen_deposits delegate + else `Contract (Contract.Implicit delegate) in - Token.transfer ctxt `Revelation_rewards (`Contract contract) tip + Token.transfer ctxt `Revelation_rewards receiver tip >|=? fun (ctxt, balance_updates) -> (ctxt, Single_result (Vdf_revelation_result balance_updates)) | Single (Double_preendorsement_evidence {op1; op2 = _}) -> -- GitLab From 25e3c747e1a8a0acc4010d701fc944f97e2ded78 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Tue, 23 May 2023 15:02:23 +0200 Subject: [PATCH 9/9] Doc: add changelog entry --- docs/protocols/alpha.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/protocols/alpha.rst b/docs/protocols/alpha.rst index f968ab404c9c..144e9d9cdf4a 100644 --- a/docs/protocols/alpha.rst +++ b/docs/protocols/alpha.rst @@ -35,6 +35,13 @@ Adaptive Inflation (ongoing) - Introduce feature flag for Adaptive Inflation. (MR :gl:`!8566`) +When the feature flag is enabled, the following extra changes happen: + +- Most rewards (baking rewards, baking bonuses, attestation rewards, revelation + rewards) are paid on the frozen deposits balance rather than the spendable + balance. Manager operations fees and denunciation rewards are still paid on + the spendable balance. (MR :gl:`!8091`) + Gas improvements ---------------- -- GitLab