Protocol Alpha

This page documents the changes brought by protocol Alpha with respect to Nairobi (see Protocol naming).

The code can be found in directory src/proto_alpha of the master branch of Octez.

Environment Version

This protocol requires a different protocol environment version than Nairobi. It requires protocol environment V10, compared to V9 for Nairobi.

  • Simplify the timelock opening_result type in the environment as we do not deal with Bogus_cipher any longer. (MR !8404)

Smart Rollups

  • Add the support for bootstrapped smart rollups in storage initialization, similarly to bootstrapped accounts and smart contracts. (MR !8552)

  • Remove the origination proof from the smart rollups’ origination operation. (MR !8817)

  • The field commitment in the operation Sc_rollup_cement is now removed. It was no longer used and was deprecated in Nairobi. This also mean that the commitment does not need to be provided in the client command. (MR !8850)


    ./octez-client cement commitment <commitment hash> from <src> for smart rollup <smart rollup address>


    ./octez-client cement commitment from <src> for smart rollup <smart rollup address>

Adaptive Inflation (ongoing)

  • This protocol asks the bakers to set their votes for the adoption of the adaptive inflation feature. They may use the per-block votes file, or CLI option --adaptive-inflation-vote. If they do not vote for the adaptive inflation feature, the vote defaults to “pass” (unlike for the liquidity baking vote, which is mandatory).

  • Introduce feature flag for Adaptive Inflation. (MR !8566)

  • Add parameter staking_over_baking_limit as the limit of co-staked tokens over the baked tokens for a given baker. (MR !8744)

  • Add parameter max_costaking_baker_count to limit the number of bakers an account can co-stake to. (MR !8766)

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 !8091)

Breaking Changes

  • Protocol parameter ratio_of_frozen_deposits_slashed_per_double_endorsement is converted from the ratio 1/5 into the percentage 50% and renamed to percentage_of_frozen_deposits_slashed_per_double_endorsement. (MR !8753)

  • Protocol parameter double_baking_punishment is converted from a fixed value of 640tz into the percentage 11% and renamed to percentage_of_frozen_deposits_slashed_per_double_baking. (MR !8753)

  • Since protocol Ithaca, the ratio of delegated tez over the delegate’s frozen deposit must be at most 9. Until now, this was ensured by a protocol parameter named frozen_deposits_percentage (whose value is 10%) representing the minimal percentage of frozen deposit. We convert it from a percentage to a factor named delegation_over_baking_limit whose value is 9. (MR !8884)

  • The frozen deposits are not computed automatically from the baker’s total stake (own tokens and delegated ones). Hence there are no automatic transfers of the baker’s spendable balance to their frozen deposits. Bakers need to use the stake pseudo-operation to increase their frozen deposits. (MR !8087)

  • The Exponential Moving Average of the Liquidity Baking Toggle Vote is now represented on 64 bits (instead of 32 bits in previous versions of the protocol). This affects the binary and JSON encodings of block receipts, the liquidity_baking_toggle_ema_threshold parameter, and the liquidity_baking_escape_ema field of the context. Note that in JSON, 32-bit integers are represented as JSON numbers but 64-bit integers are represented as JSON strings. (MR !8987)

  • The context field liquidity_baking_escape_ema is renamed liquidity_baking_toggle_ema. (MR !8987)

RPC Changes

  • Split duplicated argument pkh in RPC smart_rollups/smart_rollup/<address>/staker1/<pkh>/staker2/<pkh>/timeout and smart_rollups/smart_rollup/<address>/staker1/<pkh>/staker2/<pkh>/timeout_reached into /staker1/<staker1_pkh>/staker2/<staker2_pkh>. This changes the RPC description but not its use. (MR !8339)

  • Update context with new reward parameters. This changes the JSON from the RPC /chains/main/blocks/head/context/constants. (MR !8657)

  • Remove the RPC for computing smart rollups’ origination proofs smart_rollups/all/origination_proof. (MR !8817)

  • Add the consensus key’s public key to the reponse of the ../context/delegates/<delegate_pkh>/consensus_key RPC. (MR !8856)

Minor Changes

  • Improve the error for implicit account type check. (MR !7714)

  • Remove infinite source Double_signing_evidence_rewards and take reward from the punishment instead. (MR !7758)

  • Remove zero tickets from a big map of a mainnet contract during migration. (MR !8111)

  • Add a Stake operation, implemented as an entrypoint of external operations to implicit accounts, for delegates only. (MR !8120)

  • Add a Total supply counter in the storage. (MRs !8732, !8739)


  • Fail earlier when a smart rollup commitment is in conflict when cementing. (MR !8128)

  • split smart rollup origination fct for readibility. (MR !8276)

  • Remove the deprecated and unused tx_rollup_l2_address Michelson type. (MR !8546)

  • Add an internal represention case for the UNIT Michelson instruction. (MR !8579)

  • Encoding that supports endorsement kind in JSON are now suffixed with _with_legacy_attestation_name. Non legacy encoding supports attestation kind. (MRs !8563, !8531)

  • Michelson: remove legacy behaviour related to contract type. (MR !5800)

  • Michelson: cleanup legacy annotation management. (MR !8208)

  • Michelson: refactor management of metadata in ty smart constructors. (MR !8420)

  • Michelson: remove unused deprecated tx_rollup_l2_address type. (MR !8546)

  • Rename source into sender. (MR !7373)

  • Improve efficiency of solving the baker PoW challenge. (MR !8403)

  • Refactor declarations of make_empty_context and make_empty_tree for easier use. (MR !8550)

  • Move notions of Smart rollup address and various smart rollup hashes types to the shell to make them common to all protocols though the environment. (MR !8562, MR !8625)

  • Refactoring : stake splitted between a frozen part and a delegated part. (MRs !8051, !8885)

  • Refactoring : rewards computed as a relative portion of the total amount of tez rewarded per minute (about 85tez/min). (MR !8657)

  • Introduce the notion of rollups “machine” which can compute the semantics of a given rollup, but cannot be used to generate or verify proof. (MR !8815)

  • Consensus: optimized validation of attestations by maintaining a set of forbidden delegates instead of checking through an I/O that the delegate has a sufficient frozen deposit. (MR !8722)

  • Refactor punishing transfers to be closer to each other. (MR !7759)

  • Remove almost all transaction rollup logic from the protocol. (MR !8466)

  • Fix encoding names for rewards. (MR !8716)

  • Use pair type instead of *` for Michelson pairs. (MR !8720)

  • Add new function of_list to build a Merkle list. (MR !8853)

  • Improve some aspects in the PlonK code. (MR !8730)

  • Store a history of percentages of slashed deposits. (MR !8828)

  • Renaming the endorsement_power and preendorsement_power fields from consensus operation receipt to consensus_power in the non legacy encoding. (MR !8531)