Repository navigation
v1.8.0
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(tags1.8.0,latest,sha-762c3a7,sha-1a1221c,testnet-pinned-1a1221c). - Commit:
762c3a7c248ed8a6f6e119e0c3d68b144edcabe9(tagv1.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-1a1221cdd8instead ofv1.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.