PulseHawk

PulseHawk Upgrade Report, specification v1.0

Version 1.0 of the Upgrade Report specification, as published on 3 November 2026. It stays online unchanged so that every report that follows it can be checked against it.

What does an Upgrade Report measure?

An Upgrade Report covers one network upgrade on one PoW or DAG chain, from 24 hours before to 72 hours after the activation block. All times are in UTC. The activation time is the header time of the block at the activation height.

The target interval and the activation height each come from two independent sources, a protocol constant and a release. If the two differ, no report is built.

Which values does every Upgrade Report carry?

  • M1 Block intervals. p50, p90 and p99 of the block intervals, before and after the activation height, each against the value computed for an ideal chain at the target interval.
  • M2 Longest gap. The longest block interval and the number of intervals above five times the target, before and after the activation height.
  • M3 Reorgs. Every switch of our listener's tip to another branch, before and after activation, as a distribution by depth, with the number of switches of depth 2 or more as the headline.
  • M4 Chain split. Episodes of the chain split signal before and after activation, their total duration and the longest one.
  • M5 Peers on pre-upgrade software. The share of peers below the minimum protocol version of the upgrade, at the handshake with our listener, at activation, 24 hours later and 72 hours later, with n.
  • M6 Time to stable. The time from the activation block until the mean of the block intervals over the last hour lies within 20 % of the new target and stays there for 60 minutes without a break.
  • M7 First block at the activation height. Its header time and the gap to our own estimate published before activation.

How is the window cut?

  • By height. Header times need not rise from block to block, so the window is cut by height. The set before activation starts at the first block below the activation height whose header time is at least 24 hours before the activation time. The set after activation starts at the activation block and ends before the first block whose header time is at least 72 hours after it.
  • Intervals. The interval of a block is its header time minus the header time of the block before it. Every block of a set counts, so the first interval of a set reaches back to the block just before it, and the interval of the activation block belongs to the set after activation.
  • Time basis. M1, M2 and M6 use header times. M3 and M4 use the arrival time at our listener. M3 and M4 count from the first header time of a set to the last one, including that last second.

How are the values computed?

  • Percentiles. Linear interpolation between the two nearest ranks of the sorted intervals, at position (n minus 1) × q, rounded to 0.1 s.
  • Ideal chain. For a chain with exponential intervals at target T, p50 is T × ln 2, p90 is T × ln 10 and p99 is T × ln 100, rounded to 0.1 s. These values are computed.
  • Gaps. M2 counts intervals strictly above five times the target of the set.
  • Reorgs. Every switch of our listener's tip to another branch counts, with its depth in blocks. M3 gives the number of switches of depth 2 or more, the distribution by depth 1, 2 and 3 or more, and the maximum depth.
  • Chain split. The chain split signal raises an alarm when two branches from the activation height are each seen by at least a stated number of peers and both are deeper than a stated number of blocks. An episode runs from the alarm to the all clear, cut to the set. M4 gives the total duration and the longest episode in seconds.

How are peers and time to stable counted?

  • Peer samples. Our listener reads the protocol version that each peer it connects to sends in the handshake. A peer counts as pre-upgrade when its version is below the minimum protocol version of the upgrade. The share is given in % of n, rounded to 0.1. The report shows the samples at activation, after 24 hours and after 72 hours. Further samples, such as one after 6 hours, stay in the raw data. Only the version is kept, no address.
  • Time to stable. For every block of the set after activation whose header time is at least one hour after the activation time, we take the mean of the intervals of the blocks in the hour up to it. That mean is in the band when it lies within 20 % of the new target T. Time to stable is the time in whole seconds from the activation block to the first block from which the mean stays in the band for 60 minutes without a break, with the data covering those 60 minutes. If no block does within the window, the report says so.
  • Our estimate. M7 gives the header time of the activation block and its gap to our own estimate in whole seconds, published before activation with its date.

What does the data file contain?

Each report publishes one CSV with the columns report_id, method_version, kind, label, height, time_utc and value. Rows of kind block run from the block before the window to the first block after it, each with its header time and interval. Rows of kind reorg hold the depth, rows of kind split the alarm or all clear of the chain split signal, rows of kind peer the sample and 1 for a peer below the minimum protocol or 0 above it, and one row of kind meta says that the listener log is complete.

The page shows the sha256 of the CSV. Every value on the page is computed again from that file before the page is built.

Changelog

  • Version 1.0, 3 November 2026. First version, with the values M1 to M7.

The current version is at /standard/upgrade-report/.