From f2facf1196bb8dd36362b19db3f4a3ef455ce6f5 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 12 Jun 2024 15:42:08 +0200 Subject: [PATCH 1/5] Docs/AI: move definition of min-max after definition of curve --- docs/alpha/adaptive_issuance.rst | 172 +++++++++++++++---------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/docs/alpha/adaptive_issuance.rst b/docs/alpha/adaptive_issuance.rst index 831e73bb6680..a6051ee1b433 100644 --- a/docs/alpha/adaptive_issuance.rst +++ b/docs/alpha/adaptive_issuance.rst @@ -83,92 +83,6 @@ adaptive issuance rate is the sum of a :ref:`static rate ` and a :ref:`dynamic rate `. The final result is clipped to ensure nominal emissions remain within the minimal and the maximum ratios. -.. _minimum_and_maximum_ratios_alpha: - -Minimum and maximum ratios -.......................... - -For the upcoming Paris protocol proposal, the minimum and maximum -issuance rates will evolve smoothly over a predefined period of time, -with the window between the maximum and minimum values progressively -widening. - -The following figure describes the progressive maximum and minimum -values of Adaptive Issuance. - - -.. figure:: ai-min-max-new.jpeg - - Figure 1. A gradual widening of the range ensures a smooth transition - to Adaptive Issuance. - -The schedule consists of three periods: - -- an **initial** period, set to 1 month, where the minimum and maximum - issuance rates are close to the current issuance rate and stay - constant, -- a **transition** period, set to 5 months, where they widen lineary, with - the minimum going lower and the maximum higher, and -- a **final** period where the minimum and maximum have reached their - minimum and maximum values. - -Formally, we define the main function for computing progressive ratios -as follows. - -.. code-block:: python - - def compute_extremum(cycle, initial_value, final_value): - trans = transition_period + 1 - initial_limit = ai_activation_cycle + initial_period - trans_limit = initial_limit + trans - if cycle <= initial_limit: - return initial_value - elif cycle >= trans_limit: - return final_value - else: - t = cycle - initial_limit - res = (t * (final_value - initial_value) / trans) + initial_value - return res - -Where: - -- ``ai_activation_cycle`` is the first cycle with Adaptive Issuance - active, that is, :ref:`5 cycles after the activation of the Paris - protocol`. -- ``initial_period`` is a predefined period of time, set to 1 month in Paris. -- ``transition_period`` is a predefined period of time, set to 5 months in Paris. - -The issuance minimum ratio for Adaptive Issuance curve is then defined as follows. - -.. code-block:: python - - def minimum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_min, issuance_ratio_global_min) - -Where: - -- ``issuance_ratio_initial_min`` (4.5%) is the initial minimum - value. At the time of :ref:`Adaptive Issuance - activation`, the issuance rate is kept - above this bound for the initial period. -- ``issuance_ratio_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. - - -The issuance maximum ratio for Adaptive Issuance curve is then defined as follows. - -.. code-block:: python - - def maximum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_max, issuance_ratio_global_max) - -Where: - -- ``issuance_ratio_initial_max`` (5.5%) controls the initial maximum - value. At the time of :ref:`Adaptive Issuance - activation`, the issuance rate is kept - below this bound for the initial period. -- ``issuance_ratio_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. - .. _staked_ratio_alpha: Staked ratio @@ -256,6 +170,92 @@ Where: In a nutshell, ``dyn(c)`` increases and decreases by an amount proportional to the distance between the target rate and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``, while ensuring that the adaptive issuance rate is kept within the minimum and maximum bounds. +.. _minimum_and_maximum_ratios_alpha: + +Minimum and maximum ratios +.......................... + +For the upcoming Paris protocol proposal, the minimum and maximum +issuance rates will evolve smoothly over a predefined period of time, +with the window between the maximum and minimum values progressively +widening. + +The following figure describes the progressive maximum and minimum +values of Adaptive Issuance. + + +.. figure:: ai-min-max-new.jpeg + + Figure 1. A gradual widening of the range ensures a smooth transition + to Adaptive Issuance. + +The schedule consists of three periods: + +- an **initial** period, set to 1 month, where the minimum and maximum + issuance rates are close to the current issuance rate and stay + constant, +- a **transition** period, set to 5 months, where they widen lineary, with + the minimum going lower and the maximum higher, and +- a **final** period where the minimum and maximum have reached their + minimum and maximum values. + +Formally, we define the main function for computing progressive ratios +as follows. + +.. code-block:: python + + def compute_extremum(cycle, initial_value, final_value): + trans = transition_period + 1 + initial_limit = ai_activation_cycle + initial_period + trans_limit = initial_limit + trans + if cycle <= initial_limit: + return initial_value + elif cycle >= trans_limit: + return final_value + else: + t = cycle - initial_limit + res = (t * (final_value - initial_value) / trans) + initial_value + return res + +Where: + +- ``ai_activation_cycle`` is the first cycle with Adaptive Issuance + active, that is, :ref:`5 cycles after the activation of the Paris + protocol`. +- ``initial_period`` is a predefined period of time, set to 1 month in Paris. +- ``transition_period`` is a predefined period of time, set to 5 months in Paris. + +The issuance minimum ratio for Adaptive Issuance curve is then defined as follows. + +.. code-block:: python + + def minimum_ratio(cycle): + return compute_extremum(cycle, issuance_ratio_initial_min, issuance_ratio_global_min) + +Where: + +- ``issuance_ratio_initial_min`` (4.5%) is the initial minimum + value. At the time of :ref:`Adaptive Issuance + activation`, the issuance rate is kept + above this bound for the initial period. +- ``issuance_ratio_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. + + +The issuance maximum ratio for Adaptive Issuance curve is then defined as follows. + +.. code-block:: python + + def maximum_ratio(cycle): + return compute_extremum(cycle, issuance_ratio_initial_max, issuance_ratio_global_max) + +Where: + +- ``issuance_ratio_initial_max`` (5.5%) controls the initial maximum + value. At the time of :ref:`Adaptive Issuance + activation`, the issuance rate is kept + below this bound for the initial period. +- ``issuance_ratio_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. + .. _issuance_rate_alpha: Issuance rate -- GitLab From 4ec97535ff9a0844bfc1a2119a6a96ae51914633 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 12 Jun 2024 15:45:31 +0200 Subject: [PATCH 2/5] Docs/AI: staked funds ratio -> staked ratio --- docs/alpha/adaptive_issuance.rst | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/alpha/adaptive_issuance.rst b/docs/alpha/adaptive_issuance.rst index a6051ee1b433..09851fce68d9 100644 --- a/docs/alpha/adaptive_issuance.rst +++ b/docs/alpha/adaptive_issuance.rst @@ -58,16 +58,16 @@ the LB subsidy, if any, are currently defined by the Tezos protocol using fixed constants. Adaptive Issuance lets the amount of participation rewards depend on -the global **staked funds ratio** – that is, the +the global **staked ratio** – that is, the ratio of staked tez to the total supply. This lets issuance roughly match the *actual* security budget the chain requires, the amount needed to encourage participants to stake and produce blocks, but *no more*. At the end of each blockchain :ref:`cycle `, the -regular issuance is adjusted, to nudge the staked funds ratio towards a +regular issuance is adjusted, to nudge the staked ratio towards a protocol-defined target (set at 50% in the Adaptive-Issuance/Staking proposal). Participation rewards are recomputed to match that budget. When the staked -funds ratio decreases and diverges from the target, emission rates +ratio decreases and diverges from the target, emission rates increase, incentivizing participants to stake funds to re-approach the target. Conversely, incentives decrease as the ratio increases beyond the target. @@ -108,8 +108,8 @@ Static rate The **static rate** is a static mechanism, which approximates `a Dutch auction `__ to compute a -nominal issuance rate as a function of the staked funds ratio for a -given cycle. Its value decreases as the staked funds ratio increases, +nominal issuance rate as a function of the staked ratio for a +given cycle. Its value decreases as the staked ratio increases, and *vice versa*. The static rate is defined as follows. .. code-block:: python @@ -126,14 +126,14 @@ Where the function ``clip`` is defined as follows. def clip(value, min_value, max_value): return max(min_value, min(value, max_value)) -The choice of a scaling factor ensures that the curve takes reasonable values for plausible staking ratios. Moreover, assuming Adaptive Issuance is activated with a dynamic ratio of 0, and at current staked funds ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). +The choice of a scaling factor ensures that the curve takes reasonable values for plausible staking ratios. Moreover, assuming Adaptive Issuance is activated with a dynamic ratio of 0, and at current staked ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). .. _dynamic_rate_alpha: Dynamic rate ............ -The **dynamic reward rate** adjusts itself over time based on the distance between the staked funds ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%, provided the total issuance rate is not hitting its lower or upper limit. The dynamic rate is defined as follows. +The **dynamic reward rate** adjusts itself over time based on the distance between the staked ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%, provided the total issuance rate is not hitting its lower or upper limit. The dynamic rate is defined as follows. .. code-block:: python @@ -158,12 +158,12 @@ The **dynamic reward rate** adjusts itself over time based on the distance betwe Where: -- ``ratio_target`` (0.5), ``ratio_radius`` (0.02) denote, respectively, the target staked funds ratio and the radius of the interval centered on the target ratio. +- ``ratio_target`` (0.5), ``ratio_radius`` (0.02) denote, respectively, the target staked ratio and the radius of the interval centered on the target ratio. - ``blocks_per_cycle`` denotes the number of blocks in a Tezos cycle. - ``minimal_block_delay`` denotes the minimal duration of a block in seconds. - ``days_per_cycle`` denotes the minimal duration in days of a Tezos cycle, assuming all blocks in the cycle are produced at the minimal allowed time – that is, every 10 seconds in Paris. -- ``dist`` denotes the distance between the staked funds ratio and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``. -- ``growth_rate`` controls the speed at which the dynamic rate adjusts. The value is set so that a one percentage point deviation of the staked funds ratio changes the dynamic rate by 0.01 percentage points per day. +- ``dist`` denotes the distance between the staked ratio and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``. +- ``growth_rate`` controls the speed at which the dynamic rate adjusts. The value is set so that a one percentage point deviation of the staked ratio changes the dynamic rate by 0.01 percentage points per day. - ``max_bonus`` is set to 50_000_000 tez in the protocol. - 86400 is the number of seconds in a day. -- GitLab From 732244de701c9e87fa5e9dfabaac76b90e54b8e8 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 12 Jun 2024 16:46:27 +0200 Subject: [PATCH 3/5] Docs/AI: update AI doc for Alpha --- docs/alpha/adaptive_issuance.rst | 116 +++++++++++++------------------ 1 file changed, 49 insertions(+), 67 deletions(-) diff --git a/docs/alpha/adaptive_issuance.rst b/docs/alpha/adaptive_issuance.rst index 09851fce68d9..50b6706bca58 100644 --- a/docs/alpha/adaptive_issuance.rst +++ b/docs/alpha/adaptive_issuance.rst @@ -80,15 +80,16 @@ Adaptive issuance rate The adaptive issuance rate determines, at the end of cycle :math:`\IL{c}`, the issuance for cycle :math:`\IL{c + 3}`. The adaptive issuance rate is the sum of a :ref:`static rate ` -and a :ref:`dynamic rate `. The final result is clipped to -ensure nominal emissions remain within the minimal and the maximum ratios. +and a :ref:`dynamic rate `. This value is kept within +a minimal and a maximal value, to ensure nominal emissions remain within +reasonable bounds. .. _staked_ratio_alpha: Staked ratio ............ -The staked ratio, that is the ratio of staked tez to the total supply, is computed at the end of a given ``cycle`` and defined as follows. +The **staked ratio** is the ratio of staked tez to the total supply. It is computed at the end of a given ``cycle``: .. code-block:: python @@ -106,79 +107,60 @@ Where: Static rate ........... -The **static rate** is a static mechanism, which approximates `a Dutch +The **static rate** is a mechanism which approximates `a Dutch auction `__ to compute a nominal issuance rate as a function of the staked ratio for a -given cycle. Its value decreases as the staked ratio increases, -and *vice versa*. The static rate is defined as follows. +given cycle. Its value decreases as the staked ratio increases. +The static rate is defined as follows: .. code-block:: python def static_rate(cycle): - staked_ratio_value = staked_ratio(cycle) - static_rate_value = 1 / 1600 * (1 / (staked_ratio_value ** 2)) - return clip(static_rate_value, minimum_ratio(cycle + 1), maximum_ratio(cycle + 1)) + return 1 / 1600 * (1 / (staked_ratio(cycle) ** 2)) -Where the function ``clip`` is defined as follows. - -.. code-block:: python - - def clip(value, min_value, max_value): - return max(min_value, min(value, max_value)) - -The choice of a scaling factor ensures that the curve takes reasonable values for plausible staking ratios. Moreover, assuming Adaptive Issuance is activated with a dynamic ratio of 0, and at current staked ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). +The choice of a scaling factor ensures that the curve takes reasonable values for plausible staked ratios. Moreover, since Adaptive Issuance is activated with a dynamic rate of 0, and at current staked ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). .. _dynamic_rate_alpha: Dynamic rate ............ -The **dynamic reward rate** adjusts itself over time based on the distance between the staked ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%, provided the total issuance rate is not hitting its lower or upper limit. The dynamic rate is defined as follows. +The **dynamic reward rate** adjusts itself over time based on the distance between the staked ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%. The dynamic rate is defined as follows: .. code-block:: python - def dyn(cycle): + def dynamic_rate(cycle): if cycle <= ai_activation_cycle: return 0 - previous_bonus = dyn(cycle - 1) - staked_ratio_value = staked_ratio(cycle) seconds_per_cycle = blocks_per_cycle * minimal_block_delay - ratio_min = minimum_ratio(cycle + 1) - ratio_max = maximum_ratio(cycle + 1) - static_rate_value = static_rate(cycle) - static_rate_dist_to_max = ratio_max - static_rate_clipped - udist = abs(staked_ratio_value - ratio_target) - ratio_radius - dist = -udist if staked_ratio_value >= ratio_target else udist days_per_cycle = seconds_per_cycle / 86400 - new_bonus = max(previous_bonus + dist * growth_rate * days_per_cycle, 0) - max_new_bonus = min(static_rate_dist_to_max, max_bonus) - res = min(new_bonus, max_new_bonus) - assert 0 <= res <= max_bonus - return res + previous_dynamic = dynamic_rate(cycle - 1) + staked_ratio = staked_ratio(cycle) + if staked_ratio < 0.48: + delta_d = (0.48 - staked_ratio) * growth_rate * days_per_cycle + elif staked_ratio > 0.52: + delta_d = (0.52 - staked_ratio) * growth_rate * days_per_cycle + else: + delta_d = 0 + return previous_dynamic + delta_d Where: -- ``ratio_target`` (0.5), ``ratio_radius`` (0.02) denote, respectively, the target staked ratio and the radius of the interval centered on the target ratio. - ``blocks_per_cycle`` denotes the number of blocks in a Tezos cycle. - ``minimal_block_delay`` denotes the minimal duration of a block in seconds. - ``days_per_cycle`` denotes the minimal duration in days of a Tezos cycle, assuming all blocks in the cycle are produced at the minimal allowed time – that is, every 10 seconds in Paris. -- ``dist`` denotes the distance between the staked ratio and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``. - ``growth_rate`` controls the speed at which the dynamic rate adjusts. The value is set so that a one percentage point deviation of the staked ratio changes the dynamic rate by 0.01 percentage points per day. -- ``max_bonus`` is set to 50_000_000 tez in the protocol. -- 86400 is the number of seconds in a day. - -In a nutshell, ``dyn(c)`` increases and decreases by an amount proportional to the distance between the target rate and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``, while ensuring that the adaptive issuance rate is kept within the minimum and maximum bounds. +In a nutshell, ``dynamic_rate(c)`` increases and decreases by an amount proportional to the distance between the target rate and the interval ``[48%; 52%]``. Note that to ensure that the issuance rate is kept within :ref:`the minimum and maximum bounds `, the dynamic rate might be adjusted accordingly. More precisely, if :ref:`the issuance rate ` would surpass the maximum issuance allowed for a given cycle, then ``dynamic_rate(c)`` would be reduced to keep the issuance rate within the bounds (this part of the formula has been omitted from the above pseudocode for brevity). -.. _minimum_and_maximum_ratios_alpha: +.. _minimum_and_maximum_rates_alpha: -Minimum and maximum ratios +Minimum and maximum rates .......................... -For the upcoming Paris protocol proposal, the minimum and maximum -issuance rates will evolve smoothly over a predefined period of time, -with the window between the maximum and minimum values progressively -widening. +Starting in Paris, the minimum and maximum +issuance rates will evolve slowly over a set period of time, +so that the range of possible issuance rate values widens progressively. The following figure describes the progressive maximum and minimum values of Adaptive Issuance. @@ -194,13 +176,13 @@ The schedule consists of three periods: - an **initial** period, set to 1 month, where the minimum and maximum issuance rates are close to the current issuance rate and stay constant, -- a **transition** period, set to 5 months, where they widen lineary, with - the minimum going lower and the maximum higher, and +- a **transition** period, set to 5 months, where they evolve linearly, with + a decreasing minimum, and an increasing maximum, and - a **final** period where the minimum and maximum have reached their - minimum and maximum values. + final values. -Formally, we define the main function for computing progressive ratios -as follows. +Formally, the functions for the minimum and maximum values are piecewise linear functions of time, +and can be generally defined as follows: .. code-block:: python @@ -225,54 +207,54 @@ Where: - ``initial_period`` is a predefined period of time, set to 1 month in Paris. - ``transition_period`` is a predefined period of time, set to 5 months in Paris. -The issuance minimum ratio for Adaptive Issuance curve is then defined as follows. +The issuance minimum rate for Adaptive Issuance curve is then defined as follows. .. code-block:: python - def minimum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_min, issuance_ratio_global_min) + def minimum_rate(cycle): + return compute_extremum(cycle, issuance_initial_min, issuance_global_min) Where: -- ``issuance_ratio_initial_min`` (4.5%) is the initial minimum +- ``issuance_initial_min`` (4.5%) is the initial minimum value. At the time of :ref:`Adaptive Issuance activation`, the issuance rate is kept above this bound for the initial period. -- ``issuance_ratio_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. +- ``issuance_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. -The issuance maximum ratio for Adaptive Issuance curve is then defined as follows. +The issuance maximum rate for Adaptive Issuance curve is then defined as follows. .. code-block:: python - def maximum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_max, issuance_ratio_global_max) + def maximum_rate(cycle): + return compute_extremum(cycle, issuance_initial_max, issuance_global_max) Where: -- ``issuance_ratio_initial_max`` (5.5%) controls the initial maximum +- ``issuance_initial_max`` (5.5%) controls the initial maximum value. At the time of :ref:`Adaptive Issuance activation`, the issuance rate is kept below this bound for the initial period. -- ``issuance_ratio_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. +- ``issuance_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. .. _issuance_rate_alpha: Issuance rate ...................... -Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, clipped to stay within the minimum and maximum ratios computed for the cycle ``c + 1``. +Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, bounded within the minimum and maximum rates computed for the cycle ``c + 1``. .. code-block:: python def issuance_rate(cycle): adjusted_cycle = cycle - consensus_rights_delay - static_rate_ratio = static_rate(adjusted_cycle - 1) - bonus = reward_bonus(adjusted_cycle - 1) - ratio_min = minimum_ratio(adjusted_cycle) - ratio_max = maximum_ratio(adjusted_cycle) - total_rate = static_rate_ratio + bonus - return clip(total_rate, ratio_min, ratio_max) + static_rate = static_rate(adjusted_cycle - 1) + dynamic_rate = dynamic_rate(adjusted_cycle - 1) + minimum_rate = minimum_rate(adjusted_cycle) + maximum_rate = maximum_rate(adjusted_cycle) + total_rate = static_rate + dynamic_rate + return max( min(total_rate, maximum_rate), minimum_rate ) .. _adaptive_rewards_alpha: @@ -505,7 +487,7 @@ parameters need to be supplied. The new parameters are then applied :: - octez-client transfer 0 from to --entrypoint set_delegate_parameters --arg "Pair (Pair Unit)" + octez-client transfer 0 from to --entrypoint set_delegate_parameters --arg "Pair (Pair Unit)" or more conveniently:: -- GitLab From 390f3633c644245710131785b50cdccdd5b43f02 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 12 Jun 2024 16:54:23 +0200 Subject: [PATCH 4/5] Docs/AI: update AI doc for Paris --- docs/paris/adaptive_issuance.rst | 242 ++++++++++++++----------------- 1 file changed, 108 insertions(+), 134 deletions(-) diff --git a/docs/paris/adaptive_issuance.rst b/docs/paris/adaptive_issuance.rst index a58c1cb700c7..b19fc5d7b5b3 100644 --- a/docs/paris/adaptive_issuance.rst +++ b/docs/paris/adaptive_issuance.rst @@ -59,16 +59,16 @@ the LB subsidy, if any, are currently defined by the Tezos protocol using fixed constants. Adaptive Issuance lets the amount of participation rewards depend on -the global **staked funds ratio** – that is, the +the global **staked ratio** – that is, the ratio of staked tez to the total supply. This lets issuance roughly match the *actual* security budget the chain requires, the amount needed to encourage participants to stake and produce blocks, but *no more*. At the end of each blockchain :ref:`cycle `, the -regular issuance is adjusted, to nudge the staked funds ratio towards a +regular issuance is adjusted, to nudge the staked ratio towards a protocol-defined target (set at 50% in the Adaptive-Issuance/Staking proposal). Participation rewards are recomputed to match that budget. When the staked -funds ratio decreases and diverges from the target, emission rates +ratio decreases and diverges from the target, emission rates increase, incentivizing participants to stake funds to re-approach the target. Conversely, incentives decrease as the ratio increases beyond the target. @@ -82,19 +82,91 @@ Adaptive issuance rate The adaptive issuance rate determines, at the end of cycle :math:`\IL{c}`, the issuance for cycle :math:`\IL{c + 3}`. The adaptive issuance rate is the sum of a :ref:`static rate ` -and a :ref:`dynamic rate `. The final result is clipped to -ensure nominal emissions remain within the minimal and the maximum ratios. +and a :ref:`dynamic rate `. This value is kept within +a minimal and a maximal value, to ensure nominal emissions remain within +reasonable bounds. -.. _minimum_and_maximum_ratios: -.. _minimum_and_maximum_ratios_paris: +.. _staked_ratio: +.. _staked_ratio_paris: + +Staked ratio +............ + +The **staked ratio** is the ratio of staked tez to the total supply. It is computed at the end of a given ``cycle``: + +.. code-block:: python + + def staked_ratio(cycle): + return total_frozen_stake(cycle + 1 + consensus_rights_delay) / total_supply(cycle) + +Where: + +- ``consensus_rights_delay`` (2) is the delay in cycles for a delegate to receive rights. +- ``total_supply(cycle)`` returns the total supply of tez at the end of the given ``cycle``. +- ``total_frozen_stake(cycle)`` returns the total frozen stake at the given ``cycle``. + +.. _static_rate: +.. _static_rate_paris: + +Static rate +........... + +The **static rate** is a mechanism which approximates `a Dutch +auction `__ to compute a +nominal issuance rate as a function of the staked ratio for a +given cycle. Its value decreases as the staked ratio increases. +The static rate is defined as follows: -Minimum and maximum ratios +.. code-block:: python + + def static_rate(cycle): + return 1 / 1600 * (1 / (staked_ratio(cycle) ** 2)) + +The choice of a scaling factor ensures that the curve takes reasonable values for plausible staked ratios. Moreover, since Adaptive Issuance is activated with a dynamic rate of 0, and at current staked ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). + +.. _dynamic_rate: +.. _dynamic_rate_paris: + +Dynamic rate +............ + +The **dynamic reward rate** adjusts itself over time based on the distance between the staked ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%. The dynamic rate is defined as follows: + +.. code-block:: python + + def dynamic_rate(cycle): + if cycle <= ai_activation_cycle: + return 0 + seconds_per_cycle = blocks_per_cycle * minimal_block_delay + days_per_cycle = seconds_per_cycle / 86400 + previous_dynamic = dynamic_rate(cycle - 1) + staked_ratio = staked_ratio(cycle) + if staked_ratio < 0.48: + delta_d = (0.48 - staked_ratio) * growth_rate * days_per_cycle + elif staked_ratio > 0.52: + delta_d = (0.52 - staked_ratio) * growth_rate * days_per_cycle + else: + delta_d = 0 + return previous_dynamic + delta_d + +Where: + +- ``blocks_per_cycle`` denotes the number of blocks in a Tezos cycle. +- ``minimal_block_delay`` denotes the minimal duration of a block in seconds. +- ``days_per_cycle`` denotes the minimal duration in days of a Tezos cycle, assuming all blocks in the cycle are produced at the minimal allowed time – that is, every 10 seconds in Paris. +- ``growth_rate`` controls the speed at which the dynamic rate adjusts. The value is set so that a one percentage point deviation of the staked ratio changes the dynamic rate by 0.01 percentage points per day. + +In a nutshell, ``dynamic_rate(c)`` increases and decreases by an amount proportional to the distance between the target rate and the interval ``[48%; 52%]``. Note that to ensure that the issuance rate is kept within :ref:`the minimum and maximum bounds `, the dynamic rate might be adjusted accordingly. More precisely, if :ref:`the issuance rate ` would surpass the maximum issuance allowed for a given cycle, then ``dynamic_rate(c)`` would be reduced to keep the issuance rate within the bounds (this part of the formula has been omitted from the above pseudocode for brevity). In addition, the ``dynamic_rate`` can never exceed the ``max_bonus`` value defined as a protocol parameter, which is 5% on mainnet. + +.. _minimum_and_maximum_rates: +.. _minimum_and_maximum_rates_paris: + +Minimum and maximum rates .......................... -For the upcoming Paris protocol proposal, the minimum and maximum -issuance rates will evolve smoothly over a predefined period of time, -with the window between the maximum and minimum values progressively -widening. +Starting in Paris, the minimum and maximum +issuance rates will evolve slowly over a set period of time, +so that the range of possible issuance rate values widens progressively. The following figure describes the progressive maximum and minimum values of Adaptive Issuance. @@ -110,13 +182,13 @@ The schedule consists of three periods: - an **initial** period, set to 1 month, where the minimum and maximum issuance rates are close to the current issuance rate and stay constant, -- a **transition** period, set to 5 months, where they widen lineary, with - the minimum going lower and the maximum higher, and +- a **transition** period, set to 5 months, where they evolve linearly, with + a decreasing minimum, and an increasing maximum, and - a **final** period where the minimum and maximum have reached their - minimum and maximum values. + final values. -Formally, we define the main function for computing progressive ratios -as follows. +Formally, the functions for the minimum and maximum values are piecewise linear functions of time, +and can be generally defined as follows: .. code-block:: python @@ -135,132 +207,34 @@ as follows. Where: -- ``ai_activation_cycle`` is the first cycle with Adaptive Issuance - active, that is, :ref:`5 cycles after the activation of the Paris - protocol`. +- ``ai_activation_cycle`` is the first cycle with Adaptive Issuance active. - ``initial_period`` is a predefined period of time, set to 1 month in Paris. - ``transition_period`` is a predefined period of time, set to 5 months in Paris. -The issuance minimum ratio for Adaptive Issuance curve is then defined as follows. - -.. code-block:: python - - def minimum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_min, issuance_ratio_global_min) - -Where: - -- ``issuance_ratio_initial_min`` (4.5%) is the initial minimum - value. At the time of :ref:`Adaptive Issuance - activation`, the issuance rate is kept - above this bound for the initial period. -- ``issuance_ratio_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. - - -The issuance maximum ratio for Adaptive Issuance curve is then defined as follows. +The issuance minimum rate for Adaptive Issuance curve is then defined as follows. .. code-block:: python - def maximum_ratio(cycle): - return compute_extremum(cycle, issuance_ratio_initial_max, issuance_ratio_global_max) + def minimum_rate(cycle): + return compute_extremum(cycle, issuance_initial_min, issuance_global_min) Where: -- ``issuance_ratio_initial_max`` (5.5%) controls the initial maximum - value. At the time of :ref:`Adaptive Issuance - activation`, the issuance rate is kept - below this bound for the initial period. -- ``issuance_ratio_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. - -.. _staked_ratio: -.. _staked_ratio_paris: +- ``issuance_initial_min`` (4.5%) is the initial minimum value. At the time of Adaptive Issuance‘s activation, the issuance rate is kept above this bound for the initial period. +- ``issuance_global_min`` (0.25%) is the final value for the lower bound, reached at the end of the transition period. -Staked ratio -............ -The staked ratio, that is the ratio of staked tez to the total supply, is computed at the end of a given ``cycle`` and defined as follows. +The issuance maximum rate for Adaptive Issuance curve is then defined as follows. .. code-block:: python - def staked_ratio(cycle): - return total_frozen_stake(cycle + 1 + consensus_rights_delay) / total_supply(cycle) + def maximum_rate(cycle): + return compute_extremum(cycle, issuance_initial_max, issuance_global_max) Where: -- ``consensus_rights_delay`` (2) is the delay in cycles for a delegate to receive rights. -- ``total_supply(cycle)`` returns the total supply of tez at the end of the given ``cycle``. -- ``total_frozen_stake(cycle)`` returns the total frozen stake at the given ``cycle``. - -.. _static_rate: -.. _static_rate_paris: - -Static rate -........... - -The **static rate** is a static mechanism, which approximates `a Dutch -auction `__ to compute a -nominal issuance rate as a function of the staked funds ratio for a -given cycle. Its value decreases as the staked funds ratio increases, -and *vice versa*. The static rate is defined as follows. - -.. code-block:: python - - def static_rate(cycle): - staked_ratio_value = staked_ratio(cycle) - static_rate_value = 1 / 1600 * (1 / (staked_ratio_value ** 2)) - return clip(static_rate_value, minimum_ratio(cycle + 1), maximum_ratio(cycle + 1)) - -Where the function ``clip`` is defined as follows. - -.. code-block:: python - - def clip(value, min_value, max_value): - return max(min_value, min(value, max_value)) - -The choice of a scaling factor ensures that the curve takes reasonable values for plausible staking ratios. Moreover, assuming Adaptive Issuance is activated with a dynamic ratio of 0, and at current staked funds ratio (that is, ~7.5% of the total supply), this factor allows for a smooth transition from current issuance rate (~4.6%). - -.. _dynamic_rate: -.. _dynamic_rate_paris: - -Dynamic rate -............ - -The **dynamic reward rate** adjusts itself over time based on the distance between the staked funds ratio and the 50% (±2%) target ratio, increasing when < 48% and decreasing when > 52%, provided the total issuance rate is not hitting its lower or upper limit. The dynamic rate is defined as follows. - -.. code-block:: python - - def dyn(cycle): - if cycle <= ai_activation_cycle: - return 0 - previous_bonus = dyn(cycle - 1) - staked_ratio_value = staked_ratio(cycle) - seconds_per_cycle = blocks_per_cycle * minimal_block_delay - ratio_min = minimum_ratio(cycle + 1) - ratio_max = maximum_ratio(cycle + 1) - static_rate_value = static_rate(cycle) - static_rate_dist_to_max = ratio_max - static_rate_clipped - udist = abs(staked_ratio_value - ratio_target) - ratio_radius - dist = -udist if staked_ratio_value >= ratio_target else udist - days_per_cycle = seconds_per_cycle / 86400 - new_bonus = max(previous_bonus + dist * growth_rate * days_per_cycle, 0) - max_new_bonus = min(static_rate_dist_to_max, max_bonus) - res = min(new_bonus, max_new_bonus) - assert 0 <= res <= max_bonus - return res - -Where: - -- ``ratio_target`` (0.5), ``ratio_radius`` (0.02) denote, respectively, the target staked funds ratio and the radius of the interval centered on the target ratio. -- ``blocks_per_cycle`` denotes the number of blocks in a Tezos cycle. -- ``minimal_block_delay`` denotes the minimal duration of a block in seconds. -- ``days_per_cycle`` denotes the minimal duration in days of a Tezos cycle, assuming all blocks in the cycle are produced at the minimal allowed time – that is, every 10 seconds in Paris. -- ``dist`` denotes the distance between the staked funds ratio and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``. -- ``growth_rate`` controls the speed at which the dynamic rate adjusts. The value is set so that a one percentage point deviation of the staked funds ratio changes the dynamic rate by 0.01 percentage points per day. -- ``max_bonus`` is set to 50_000_000 tez in the protocol. -- 86400 is the number of seconds in a day. - - -In a nutshell, ``dyn(c)`` increases and decreases by an amount proportional to the distance between the target rate and the interval ``[ratio_target - ratio_radius; ratio_target + ratio_radius]``, while ensuring that the adaptive issuance rate is kept within the minimum and maximum bounds. +- ``issuance_initial_max`` (5.5%) controls the initial maximum value. At the time of Adaptive Issuance‘s activation, the issuance rate is kept below this bound for the initial period. +- ``issuance_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. .. _issuance_rate: .. _issuance_rate_paris: @@ -268,18 +242,18 @@ In a nutshell, ``dyn(c)`` increases and decreases by an amount proportional to t Issuance rate ...................... -Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, clipped to stay within the minimum and maximum ratios computed for the cycle ``c + 1``. +Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, bounded within the minimum and maximum rates computed for the cycle ``c + 1``. .. code-block:: python def issuance_rate(cycle): adjusted_cycle = cycle - consensus_rights_delay - static_rate_ratio = static_rate(adjusted_cycle - 1) - bonus = reward_bonus(adjusted_cycle - 1) - ratio_min = minimum_ratio(adjusted_cycle) - ratio_max = maximum_ratio(adjusted_cycle) - total_rate = static_rate_ratio + bonus - return clip(total_rate, ratio_min, ratio_max) + static_rate = static_rate(adjusted_cycle - 1) + dynamic_rate = dynamic_rate(adjusted_cycle - 1) + minimum_rate = minimum_rate(adjusted_cycle) + maximum_rate = maximum_rate(adjusted_cycle) + total_rate = static_rate + dynamic_rate + return max( min(total_rate, maximum_rate), minimum_rate ) .. _adaptive_rewards: @@ -516,7 +490,7 @@ parameters need to be supplied. The new parameters are then applied :: - octez-client transfer 0 from to --entrypoint set_delegate_parameters --arg "Pair (Pair Unit)" + octez-client transfer 0 from to --entrypoint set_delegate_parameters --arg "Pair (Pair Unit)" or more conveniently:: -- GitLab From 4dbda53733ff80af92de10226eaf83758c7083d0 Mon Sep 17 00:00:00 2001 From: Lucas Randazzo Date: Wed, 12 Jun 2024 16:54:39 +0200 Subject: [PATCH 5/5] Docs/AI: add dynmax in Alpha --- docs/alpha/adaptive_issuance.rst | 44 ++++++++++++++++++++++++++++--- docs/alpha/dynmax.png | Bin 0 -> 57341 bytes 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 docs/alpha/dynmax.png diff --git a/docs/alpha/adaptive_issuance.rst b/docs/alpha/adaptive_issuance.rst index 50b6706bca58..c08dc004bbb1 100644 --- a/docs/alpha/adaptive_issuance.rst +++ b/docs/alpha/adaptive_issuance.rst @@ -238,12 +238,50 @@ Where: below this bound for the initial period. - ``issuance_global_max`` (10%) is the final value for the upper bound, reached at the end of the transition period. +.. _dynmax_rate_alpha: + +Dynamic Maximum +...................... + +In addition to the previous bounds, from Alpha onwards we are adding another upper bound to the issuance. +Called **DynMax**, this maximum is defined as a function of the stake ratio, like the static rate. This +bound ensures that the issuance rate stays close enough to the static rate, by bounding the dynamic rate +following a function of the stake ratio. + +The function chosen for the maximum applied to the total issuance is the following: + +.. code-block:: python + + def dynmax(stake_ratio): + r = stake_ratio + if r >= 0.5: + return 0.01 + elif r <= 0.05: + return 0.1 + dm = (5115 - 17670 * r + 19437 * (r ** 2)) / (24149 + 178695 * r) + if dm > 0.1: + return 0.1 + elif dm < 0.01: + return 0.01 + else: + return dm + + +.. figure:: dynmax.png + + Figure 2. DynMax compared to the static rate in the range from 5% to 50% of stake ratio. + +Note that before reaching the final value of the minimum in the previous section, it is possible for +this maximum value to theoretically be smaller than the minimum bound. In this case, the minimum value +takes priority, and the max is set to the min. In other words, the bounds in the previous section are always +applied, regardless of the value of dynmax. + .. _issuance_rate_alpha: Issuance rate ...................... -Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, bounded within the minimum and maximum rates computed for the cycle ``c + 1``. +Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycle ``c + consensus_rights_delay + 1`` is defined as the sum of the static rate and the dynamic rate computed for the cycle ``c``, bounded within the :ref:`minimum and maximum rates `, along with the :ref:`dynamic maximum `, computed for the cycle ``c + 1``. .. code-block:: python @@ -252,7 +290,7 @@ Finally, as mentioned before, the nominal adaptive issuance rate [1]_ for a cycl static_rate = static_rate(adjusted_cycle - 1) dynamic_rate = dynamic_rate(adjusted_cycle - 1) minimum_rate = minimum_rate(adjusted_cycle) - maximum_rate = maximum_rate(adjusted_cycle) + maximum_rate = min(maximum_rate(adjusted_cycle), dynmax(stake_ratio(adjusted_cycle))) total_rate = static_rate + dynamic_rate return max( min(total_rate, maximum_rate), minimum_rate ) @@ -516,7 +554,7 @@ they remain otherwise within the staker’s account at all times. .. figure:: staked_funds_transitions.png - Figure 2: staked funds management using pseudo-operations. + Figure 3: staked funds management using pseudo-operations. To *stake* funds, a delegator uses the ``stake`` pseudo-operation, transferring the chosen amount of **spendable** tez to their own diff --git a/docs/alpha/dynmax.png b/docs/alpha/dynmax.png new file mode 100644 index 0000000000000000000000000000000000000000..66908469fea0af75012b7f447f963cf91b09cbac GIT binary patch literal 57341 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 Q0|Nttr>mdKI;Vst02P!4kpKVy literal 0 HcmV?d00001 -- GitLab