Skip to content

[Protocol Versioning M2] Version of system transaction tracked by Dynamic Protocol State #8080

Open

Description

@AlexHentschel

[based on conversation with @peterargue Oct, 23, 2025]

During the system chunk, Execution Nodes (ENs) process some protocol-determined list of work. Conceptually, the system chunk executes a sequence of (reduced) transactions. Transaction may have different privileges ("root", "user-space").
Currently, this is largely hard-coded in the execution stack, and upgraded via Hight-Coordinated Upgrades (HCU). From the perspective of the software stack, there exists a clear before-after relation. However, the Access Node (AN) should be able to serve data across different HCUs, including the system chunks. In other words, an AN has to manage different protocol conventions / implementation to generate the content of the system chunk.

EPIC: Therefore, the protocol state should contain some "version" describing the specifics of the system chunk (suitable details tbd).

Activity

  1. added
    ExecutionCadence Execution Team
    ProtocolTeam: Issues assigned to the Protocol Pillar.
    PreserveStale Bot repellent
    on Oct 24, 2025
  2. fxamacker commented on Nov 10, 2025

    @fxamacker
    Contributor

    I synced with @peterargue to add SystemCollectionComponent to execution upgrades redesign using Dynamic Protocol State last week.

    I created redesign proposal to include SystemCollectionComponent along with existing cadence and execution components.

    VersionUpgrades map is used instead of specifying each component explicitly so that we can support new component types (in the future) without upgrading service events or upgrading protocol state. We only have 3 types of components now so using a map will allow us to add new types of components in the future (up to 255) if needed.

    BTW, the idea to use a single integer as version number (instead of "major.minor") was discussed even before I got involved with this project but the topic came up again. I think we can use a single integer version number (uint16) plus an UpgradeKind enumeration (uint8) instead of "major.minor". This provides the simplicity of single integer version (individually for each component type) and the UpgradeKind can be used to describe the kind of upgrade for each component (e.g., bugfix vs optimization vs feature, etc.). Since we can have up to 255 kinds, we can even specify a kind that lets us know new Cadence language feature was added.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    EpicExecutionCadence Execution TeamPreserveStale Bot repellentProtocolTeam: Issues assigned to the Protocol Pillar.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions