Skip to content

v1.8.0

Choose a tag to compare

@jourlez jourlez released this 19 Oct 10:25
· 11 commits to main since this release
762c3a7

node-scala v1.8.0

Consensus and build hardening release (2026-10-18 audit, wave 2).

Active on deploy (non-consensus)

  • P2P: EndorseBlock endorser index validated at decode and in storage; P2P subscription handlers survive a failing element.
  • HotStuff: a proposal is voted for only after the expected leader's own signed PREPARE vote for it; proposal views are bounded relative to the local pacemaker; an implausible persisted lastVotedView is discarded on restart. No wire-format change.
  • HotStuff gossip: validated before it is marked seen or relayed; seen-cache keys include signature material.
  • Miner: a failed initial snapshot is logged and retried instead of forging without a state hash; reward/penalty netting is shared with the appender.
  • Settings: consensus heights of chains with history are pinned by genesis signature; unknown consensus keys refuse startup; unknown REST/HotStuff/miner keys warn.
  • REST: /addresses/seq/* and /utils/seed* require the API key.
  • Config/docs: DCC testnet seed instead of foreign seeds; bundled testnet config matches the live chain; README run instructions fixed.

Consensus-affecting, active from finality-hardening-height (testnet 90000, pinned)

  • HotStuff quorum weight from generating balance; proven equivocators weigh 0.
  • A voter cannot be listed as both a valid endorser and a proven equivocator.
  • Block validation stops accepting the legacy BLS DST (acceptances are counted under LEGACY_BLS_DST_ACCEPTED). A replay of the testnet chain to height 75073 found none.

All nodes must run this release before the chain reaches height 90000. Below that height behavior is unchanged.

Build / release

  • Native artifacts come from Maven Central, sha256-pinned (verifyDccArtifacts).
  • One image per commit, smoke-tested (groth16 native, BLS, P-256) and Trivy-scanned by digest before tagging, with build provenance attested. Releases re-tag, never rebuild.
  • RocksDB runtime equals the tested version (10.10.1.1); patched base image.
  • Version string identifies the build; Renovate opens PRs again; workflow inputs pass through env.

Image and commits

  • Image: ghcr.io/decentral-america/node-scala@sha256:57508121d26fab54e092d1f649b9d3773b2fb5a4d7713009599e241367d5ca07 (tags 1.8.0, latest, sha-762c3a7, sha-1a1221c, testnet-pinned-1a1221c).
  • Commit: 762c3a7c248ed8a6f6e119e0c3d68b144edcabe9 (tag v1.8.0).
  • Built from: 1a1221cdd836cc94899a5a7c68fd5fab3672c817 (publish workflow run 39221057338). That tree differs from the tag commit only in .github/workflows/genesis-replay-check.yml, so the node binary is identical.
  • Version string: this image was built before the tag existed, so the node reports DecentralChain v1.8.0-dev-1a1221cdd8 instead of v1.8.0. The binary is the released one; the string is cosmetic. It is not rebuilt, because that would produce a new digest on a live chain and force another rollout. The next release is tagged before its image is built.
  • Verify: gh attestation verify oci://ghcr.io/decentral-america/node-scala@sha256:57508121d26fab54e092d1f649b9d3773b2fb5a4d7713009599e241367d5ca07 -R Decentral-America/node-scala
  • Live: all four testnet nodes run this digest.