Skip to content

Hulk

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Oct 19:38
v1.4.1
573088f

Summary

Anchor v1.4.1 adds support for the Glamsterdam (Gloas / ePBS) hard fork (SIP-94) and a built-in --network sepolia. The Hoodi fork has been postponed, so it is not scheduled on Hoodi in this release. A future release will schedule it.

v1.4.0 was not published because it crashed on startup. Use v1.4.1 instead.

Network Priority
Sepolia 🔥 Required
Hoodi Recommended
Mainnet Recommended

⚠️ Run Lighthouse v8.3.2 or another beacon node release that does not schedule the Hoodi fork.

Upgrade notes

  • Shorter proposer QBFT round (SIP-102), on every network. 2s → 1.5s, matching go-ssv v2.5.0. --legacy-proposer-round-timeout restores 2s; coordinate it across the whole committee.
  • Validator registrations stop at the Gloas fork. Proposer preferences replace them. Every operator in a committee must sign the same gas limit (default 36M for both Anchor and go-ssv).
  • Optional direct builders via builder_definitions.yml in the data directory. Without it, bids still arrive over gossip.

Highlights

  • Gloas duties: attestations, aggregation, PTC attestations, block proposals with execution payload envelopes, proposer preferences and builder request auth.
  • Interop fixes found on Sepolia and devnets, including gossipsub limits and peer scoring.
  • Security: gossip validation now rejects messages signed by operators outside the committee; dependency updates for RUSTSEC-2026-0346..0349, RUSTSEC-2026-0381/0382 and RUSTSEC-2026-0385.
  • Lighthouse v8.3.2.

All Changes

  • chore: Release v1.4.1 (#1357)
  • chore(deps): update Lighthouse to v8.3.2 (#1358)
  • fix: install the rustls aws-lc-rs crypto provider at startup (#1355)
  • chore: Release v1.4.0 (#1353)
  • fix(message_validator): reject signers outside the committee (#1351)
  • chore(deps): update Lighthouse to v8.3.0 (#1349)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix(eth): reject ValidatorAdded shares that do not interpolate to the validator pubkey (#1347)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • chore(deps): bump rustls to 0.23.46 for RUSTSEC-2026-0346..0349 (#1344)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix(network): shorten epoch-based slow-peer penalties (#1341)
  • fix: prevent duplicate committee post-consensus batches (#1340)
  • fix: raise gossipsub control limit to 128 KiB (#1339)
  • chore(deps): update Lighthouse to v8.3.0-rc.0 (#1334)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • Merge remote-tracking branch 'upstream/stable' into backmerge-stable-unstable-v1.3.2
  • feat(client): enable the early payload-available PTC trigger (#1329)
  • chore(deps): update Lighthouse to unstable 8b927ced (#1327)
  • fix(ssv_types): accept pre-Gloas aggregator versions that share a decode shape (#1326)
  • feat(qbft_manager): shorten proposer QBFT round timeout to 1.5s (SIP-102) (#1325)
  • chore(deps): return Lighthouse to sigp unstable 73e4dc12 (#1322)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • feat: add built-in sepolia network (#1318)
  • fix(deps): pin Lighthouse with #9959 for PTC data requests (#1317)
  • chore(deps): update Lighthouse to unstable 9ee3fd72 (#1316)
  • fix(message_validator): accept messages up to one second before their slot (#1315)
  • fix(ssv_types): pin Gloas block proposer index in the proposer value check (#1314)
  • feat(proposer): fold envelope signing into Gloas consensus (#1313)
  • feat(collector): prepare paired proposer signature collection (#1312)
  • chore(deps): update Lighthouse for stateless Gloas production (#1311)
  • fix: align remaining Gloas duty deadlines (#1310)
  • fix(message_validator): align SIP-94 partial signature timing (#1308)
  • fix: treat pre-emission preference timeouts as pending (#1307)
  • feat(client): validate SSV builder definitions constraints at startup (#1283)
  • feat(client): spawn the builder preferences service (#1285)
  • feat(message_validator): admit batched builder request auth partial signatures (#1302)
  • feat(validator_store): sign builder request auth (#1282)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • chore(deps): bump rustls to 0.23.45 for RUSTSEC-2026-0285 (#1303)
  • feat: reject same-slot FULL votes the head event already rules out (SIP-94 §2) (#1301)
  • fix: admit preferences for locally assigned proposers (#1300)
  • fix: validate PTC duty assignments (#1299)
  • fix: align Gloas aggregation timing with Lighthouse (#1297)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix: use Bookworm for devnet builds (#1298)
  • feat: replace envelope QBFT with disseminate-and-sign (SIP-94 §6) (#1286)
  • refactor(message_validator): delete the unused received_from plumbing and peer-keyed preference map (#1284)
  • feat(message_validator): admit builder request auth partial signatures (#1281)
  • fix(message_validator): derive per-epoch duty counts from the slot ring (SIP-94 §7 retention) (#1276)
  • fix(message_validator): ignore repeated proposer-preference roots regardless of peer (#1272)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix: resolve trait-solver recursion overflow on recent nightly (#1274)
  • Merge remote-tracking branch 'upstream/stable' into backmerge-stable-unstable-v1.3.1
  • feat(validator_store): sign self-build execution payload envelopes (#1263)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix(validator_store): publish decided Boole sync contributions from the metadata service (#1264)
  • chore(deps): bump h2 to 0.4.16 for RUSTSEC-2026-0258 (#1266)
  • fix(message_validator): ignore, not reject, messages with an unresolved validator index (#1261)
  • feat(validator_store): add envelope-signing groundwork (#1248)
  • fix(message_sender): validate outbound messages statelessly (#1193)
  • fix: restore validator store test compilation
  • chore: backmerge stable into unstable after #1247
  • fix(validator_store): publish VotingAssignments 50ms past slot boundary (#1235)
  • feat(client): fork-gated post-Gloas proposer delay (#1244)
  • fix(fork): reject duplicate domains in explicit schedules (#1234)
  • fix: batch pre-Boole post-consensus sync contributions (#1208)
  • fix(validator_store): publish decided AggregatorCommittee aggregates from the metadata service (#1245)
  • fix(duties_tracker): pin authoritative complete-schedule transitions (#1249)
  • fix(validator_store): sign the decided AggregatorCommittee worklist once per slot (#1229)
  • fix(validator_store): bound PTC collection awaits to the duty slot end (#1221)
  • fix(message_validator): classify proposer-preferences duplicate roots per peer (#1203)
  • refactor(duties_tracker): retain proposer-duty v2 response metadata (#1241)
  • fix(fork): publish Boole lifecycle transitions at exact slots (#1228)
  • feat(validator_store): record block-QBFT-decided beacon block roots (#1224)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • chore(deps): bump Lighthouse to unstable HEAD e58ec88fe and migrate sign_attestations to SingleAttestation (#1215)
  • feat(validator_store): add configurable proposer delay for MEV bids (#1213)
  • ci: deploy docs site on release publish instead of every unstable push (#1210)
  • fix: batch pre-Boole sync contribution proofs (#1201)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • fix: harden signature reconstruction (#1198)
  • fix: support next-domain ENR discovery after Boole (#1187)
  • fix: update ruint to 1.20.0 (#1202)
  • feat(qbft_manager): wire EnvelopeProposer per-proposer QBFT instances (#1188)
  • fix(duties_tracker): validate proposer assignments against complete current/next views (#1182)
  • fix(ssv_types): cap Role::Proposer QBFT rounds at 2 (#1173)
  • ci: harden Kurtosis install against API rate limits (#1175)
  • feat(ssv_types): add envelope-signing QBFT value + structural value check (#1169)
  • chore: bump lighthouse pin to v8.2.1 (#1166)
  • feat(ssv_types): reject decided ProposerConsensusData whose Version mismatches the duty-slot fork (#1164)
  • feat(client): spawn LH ProposerPreferencesService with AnchorValidatorStore backend (#1144)
  • feat: add validator-scoped QBFT Role::EnvelopeProposer (#1120) (#1149)
  • feat(validator_store): implement sign_proposer_preferences (SingleValidator partial-sig) (#1125)
  • feat(message_validator): reject ValidatorRegistration after Gloas (#1138)
  • feat(validator_store): fork-gate RegistrationService at GLOAS_FORK_EPOCH (#1137)
  • feat(qbft_manager): start SlotTime QBFT instances immediately (#1136)
  • feat: add Role::ProposerPreferences with message-validator fork-gate (#1106)
  • feat(validator_store): use decided votes for aggregation (#1128)
  • fix(message_validator): treat duty-limit breach as ignore, not reject (#1134)
  • feat(validator_store): apply decided Gloas attestation index in committee signing (#1103)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • chore(deps): bump Lighthouse to unstable HEAD 81d576943 (#1123)
  • Merge upstream/unstable into epbs
  • feat(client): spawn PayloadAttestationService gated on Gloas (#1093)
  • refactor!: gate ePBS on Ethereum Gloas fork, remove SSV Fork::CStar (#1090)
  • feat(validator_store): implement sign_payload_attestation (#1082)
  • Merge remote-tracking branch 'upstream/unstable' into epbs
  • feat(ssv_types): fork-aware GloasBeaconVoteValidator with slashability (#1071)
  • feat(ssv_types): retarget PTC role to validator-scoped PTCAttester (#1080)
  • feat(validator_store): fork-gate decide_abstract_block for Gloas block decoding (#1072)
  • refactor(ssv_types): remove PayloadAttestationVote QBFT value object (#1076)
  • feat(ssv_types): Gloas decode branch on ProposerConsensusData (#1070)
  • feat(ssv_types): add GloasBeaconVote with QbftData for Gloas slots (#1059)
  • feat(ssv_types): add PayloadAttestationVote with QbftData and value checker (#1047)
  • feat: add Role::PTCCommittee with message-validator fork-gate (#1033)
  • chore: add cstar example to built-in fork schedule configs (#1030)
  • feat: fork-aware attestation deadline at Gloas (#1024)
  • chore: add Fork::CStar variant (#1016)
  • chore(deps): bump Lighthouse to unstable HEAD 1a6863118 (#1013)

Binaries

See pre-built binaries documentation.

The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0

System Architecture Binary PGP Signature
Apple logo aarch64 anchor-v1.4.1-aarch64-apple-darwin.tar.gz PGP Signature
Linux logo x86_64 anchor-v1.4.1-x86_64-unknown-linux-gnu.tar.gz PGP Signature
Raspberrypi logo aarch64 anchor-v1.4.1-aarch64-unknown-linux-gnu.tar.gz PGP Signature
System Option - Resource
Docker logo Docker v1.4.1 sigp/anchor