Skip to content

v0.2.0 — resubmit scheduling, epoch decoupling

Choose a tag to compare

@crabbytt crabbytt released this 21 Jul 11:54
f548bf2

v0.2.0 — resubmit scheduling, epoch decoupling

FIXES A LIVE OUTAGE. 0.1.0 pinned EPOCH_S=604800 and a genesis timestamp
locally and required the payload's epoch to equal current-1. Neither matched
production (epoch_s=86400) or staging (3600), so every payload was rejected as
stale-epoch — with no error, no non-zero exit and a healthy heartbeat. Anyone
running 0.1.0 is setting no weights at all. Upgrade.

Changes:

  • Weights are resubmitted every 120 blocks for the whole epoch instead of once.
    A validator that submits once per epoch passes activity_cutoff (~16.7h) long
    before a daily epoch closes and drops out of Yuma consensus. 120 rather than
    100 because SN53's on-chain weights_rate_limit is exactly 100, and our anchor
    is the block read before submitting while the chain's is the block the
    extrinsic executed in — always later.

  • The validator is no longer epoch-aware. EPOCH_S, epoch_index() and
    ENGY_SN53_GENESIS_TS are gone; the provider owns the timeline. Replay is
    bounded by a monotonic guard on local state instead.

  • The last submitted vector is cached and resubmitted during a provider
    outage, so an outage past activity_cutoff cannot take the validator off
    chain. Unbounded in time by design: the chain keeps the last weights either
    way, so stopping costs only our own dividends.

  • A burn paying out to an unexpected owner hotkey is flagged (warning, never a
    rejection), and a fully-unregistered vector now names its likely cause
    instead of reading as a chain error.

  • Poll interval 600s -> 300s.

Operator notes:

  • ENGY_SN53_GENESIS_TS is no longer read. Leaving it set is harmless.
  • Required config is now just ENGY_SN53_API and ENGY_SN53_MASTER_HOTKEY.
  • ENGY_SN53_RESUBMIT_BLOCKS overrides the 120-block cadence if a subnet's
    weights_rate_limit ever exceeds it.

Known gap: prod genesis is 2026-07-22 00:00 UTC and the first epoch finalizes
25h later, while activity_cutoff is ~16.7h. Validators running from genesis
have nothing to submit until then. The fix is provider-side and tracked
separately.