Security release review – Heimdall v0.12.1 (Lugano HF)

Hello Node Operators,

This is a short retrospective on the Lugano hardfork, which is now active on both Amoy and mainnet. Upgrade instructions went out at activation time in Heimdall v0.12.1; this post covers what Lugano was and how it was shipped.

Summary

Lugano is a Heimdall-only hardfork. Bor did not change.

It was shipped as a private security release, following the same process we used for Kyoto/Austin:

  1. v0.12.1-beta-priv was rolled out to Amoy and activated there first.

  2. After Amoy had soaked, v0.12.1-priv was distributed to mainnet validators and node operators as GPG-signed binaries. This was our first mainnet private release using signed artifacts.

  3. Once mainnet crossed the activation height, the source was published as the public v0.12.1, together with the matching cometbft v0.3.9-polygon and cosmos-sdk v0.2.15-polygon releases.

The public v0.12.1 is functionally identical to v0.12.1-priv. The only difference is that it builds against the public cometbft and cosmos-sdk forks instead of vendored copies.

If your node did not upgrade before the activation heights below, it stopped at the Lugano height and is not following the canonical chain.

Heimdall v0.12.1 (Lugano)

Consensus-layer security fixes, all gated at the Lugano height:

  • Checkpoint window bounds: tighter validation of the block ranges a checkpoint may cover.

  • Block-sync serving limits: bounded resource usage when serving blocks to syncing peers.

  • Validation hardening in the bor, clerk and milestone modules.

Impact if unfixed: a malicious peer or crafted input could degrade node availability (resource exhaustion), or get invalid data past validation. No funds were at risk.

  • Amoy: Heimdall height 47,105,000, activated 23 Sept 2026

  • Mainnet: Heimdall height 54,627,000, activated 1 Oct 2026 at ~16:22 UTC

Both activations went through cleanly. Checkpoints kept being signed by the validator set right after the fork, and span rotation was unaffected.

What to upgrade

  • Mandatory, since the fork is already active on Amoy and mainnet.

  • Minimum version: Heimdall v0.12.1. The current recommended release is v0.12.2.

  • Plain binary upgrade: no state migration, no genesis change, no resync.

  • No Bor upgrade is required for Lugano.

Thanks to everyone who upgraded during the private window :folded_hands:

Regards,

Polygon Labs