Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Cadence 1.0] Add ProtocolStateVersionUpgrade service event #419

31 changes: 27 additions & 4 deletions contracts/NodeVersionBeacon.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
/// The contract itself can be used to query the current version and the next upcoming version.
access(all) contract NodeVersionBeacon {

/// =========================
/// Execution State Versioning
/// =========================

/// Struct representing software version as Semantic Version
/// along with helper functions
/// For reference, see https://semver.org/
Expand Down Expand Up @@ -134,10 +138,11 @@ access(all) contract NodeVersionBeacon {
)
}

/// Event emitted when the version table is updated.
/// It contains the current version and all the upcoming versions
/// sorted by block height.
/// The sequence increases by one each time an event is emitted.
/// A service event emitted when the version table is updated.
/// The version is the software version which must be used for executing a height range of blocks.
/// The version pertains to Execution and Verification Nodes.
/// The table contains the current version and all the upcoming versions sorted by block height.
/// The sequence increases by one each time an event is emitted.
/// It can be used to verify no events were missed.
access(all) event VersionBeacon(
versionBoundaries: [VersionBoundary],
Expand Down Expand Up @@ -280,6 +285,13 @@ access(all) contract NodeVersionBeacon {

emit NodeVersionBoundaryFreezePeriodChanged(freezePeriod: newFreezePeriod)
}

/// Emits the given protocol state version upgrade event. If the version and active are
/// valid, this will cause the Protocol State to upgrade its model version when the
/// event is incorporated.
access(all) fun emitProtocolStateVersionUpgrade(newProtocolVersion: UInt64, activeView: UInt64) {
emit ProtocolStateVersionUpgrade(newProtocolVersion: newProtocolVersion, activeView: activeView)
}
}

/// Heartbeat resource that emits the version beacon event and keeps track of upcoming versions.
Expand Down Expand Up @@ -495,6 +507,17 @@ access(all) contract NodeVersionBeacon {
return self.versionBoundaryBlockList[0]
}

/// =========================
/// Protocol State Versioning
/// =========================

/// A service event which is emitted to indicate that the Protocol State version is being upgraded.
/// This acts as a signal to begin using the upgraded Protocol State version
/// after this service event is sealed, and after view `activeView` is entered.
/// Nodes running a software version which does not support `newProtocolVersion`
/// will stop processing new blocks when they reach view `activeAtView`.
access(all) event ProtocolStateVersionUpgrade(newProtocolVersion: UInt64, activeView: UInt64)

init(versionUpdateFreezePeriod: UInt64) {
self.AdminStoragePath = /storage/NodeVersionBeaconAdmin
self.HeartbeatStoragePath = /storage/NodeVersionBeaconHeartbeat
Expand Down
Loading
Loading