Protocol Rio#

This page lists the changes brought by protocol Rio with respect to Quebec (see Protocol naming). For the list of changes brought by Quebec with respect to Paris, see Protocol Quebec.

For a higher-level overview of the most salient new features see the announcement blog.

The code can be found in directory src/proto_022_PsRiotum of the master branch of Octez and the full documentation in this page.

Environment Version#

This protocol requires a different protocol environment version than Quebec. It requires protocol environment V14, compared to V13 for Quebec.

Smart Rollups#

Data Availability Layer#

  • The DAL incentives feature flag was turned on. (MR !15614)

  • Change The output of the RPC context/issuance/expected_issuance has a new field "dal_attesting_reward_per_shard" (MR !15614)

  • A new RPC /chains/main/blocks/head/context/delegates/<pkh>/dal_participation similar to Tenderbake’s /participation RPC to track bakers’ DAL activity (MR !16168)

  • Change The RPC /chains/main/blocks/head/context/delegates/<pkh>’s result now contains a new field "dal_participation" providing DAL participation information when the DAL incentives flag is set. This introduces a breaking change for applications using the binary encoding format. (MR !16430)

  • A new anonymous operation “DAL entrapment evidence” was added. Bakers that attest trapped DAL slots lose their DAL rewards. (MRs !15677, !15832, !15836, !16253, !16224, !16322)

  • Protocol parameter DAL_REWARDS_WEIGHT was added. Fields REWARDS_RATIO, MINIMAL_PARTICIPATION_RATIO, TRAPS_FRACTION were added to the protocol parameter DAL_PARAMETRIC. (MRs !15503, !15832)

  • DAL rewards are distributed at the end of a cycle for bakers who meet the minimal participation ratio and are not denounced for attesting traps in the current cycle. (MRs !15559, !16407, !16408)

Adaptive Issuance#

Gas improvements#

  • Fixed the gas cost for transfers to user accounts. This results in an increase of around 2000 gas units per such transfer. (MR !15993)

RPC Changes#

  • Added RPC GET /chains/<chain_id>/blocks/<block_id>/helpers/consecutive_round_zero, which returns the number of blocks consecutively baked at round zero. (MR !15945)

Operations#

  • Added an optional proof parameter to the Update_consensus_key operation. This parameter is unused in the Rio protocol; it will be needed to update to a BLS consensus key when the allow_tz4_delegate_enable feature flag is enabled in a future protocol. (MR !15670)

Errors#

Protocol parameters#

  • Renamed consensus_threshold to consensus_threshold_size. (MR !15979)

  • Replaced the max_slashing_period = 2 protocol constant with two constants denunciation_period = 1 and slashing_delay = 1. The behavior of denunciations and slashing is unaffected by this change. Indeed, denunciation_period represents how many cycles after the misbehavior cycles still accept denunciations, whereas max_slashing_period was the total number of cycles accepting denunciation including the misbehavior cycle, so the denunciation window remains the same. The slashing for a misbehavior from cycle n still happens at the end of cycle n + max_slashing_period - 1 = n + slashing_delay. (MR !15990)

  • Reduced the cache_stake_distribution_cycles and cache_sampler_state_cycles protocol constants from 8 cycles to 5 cycles, in order to reduce memory consumption. Only consensus_rights_delay + slashing_delay + 2 = 2 + 1 + 2 = 5 cycles are needed, but these constants were not updated when consensus_rights_delay was lowered from 5 to 2 in the Paris protocol. (MR !14396)

  • Removed obsolete field percentage_of_frozen_deposits_slashed_per_double_attestation, which is no longer used since the activation of Adaptive Slashing in the Paris protocol. (MR !15223)

  • Exposed derived constants issuance_modification_delay, consensus_key_activation_delay, and unstake_finalization_delay (which are automatically computed from the consensus_rights_delay parametric constant): they can now be observed by calling the RPC GET /chains/<chain_id>/blocks/<block_id>/context/constants. (MR !16296)

  • Changed the type of the protocol constant max_slashing_threshold from an integer (number of slots) to a ratio (portion of the committee). This does not affect slashing semantics. (MR !15765)

Feature flags#

  • Added a feature flag aggregate_attestation to enable the aggregation of block attestation lists into a single aggregate operation. (MR !15283) (This feature is not active yet in the Rio protocol.)

  • Added a feature flag allow_tz4_delegate_enable to allow tz4 (BLS) addresses as delegates and/or as consensus keys. (MRs !15311, !15302) (This feature is not active yet in the Rio protocol.)

  • Added a feature-controlling parameter all_bakers_attest_activation_level. It is set to null in the Rio protocol, which means that the all-bakers-attest feature will not be active at all in this protocol. (MRs !15584, !15764, !16380)

  • Removed obsolete feature flags autostaking_enable, ns_enable, activation_vote_enable, and force_activation, and related parameter adaptive_issuance.launch_ema_threshold. (MRs !15215, !15223, !15211)

Bug Fixes#

Minor Changes#

Internal#

  • Added a stub RISC-V module for the protocol environment and used it in the protocol implementation for the RISC-V PVM. (MRs !15921)

  • Removed dead code related to autostaking, old slashing, and Adaptive Issuance activation. (MRs !15215, !15391, !15223, !15211, !16129)