Repository navigation
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-timeoutrestores 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.ymlin 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 |
|---|---|---|---|
| aarch64 | anchor-v1.4.1-aarch64-apple-darwin.tar.gz | PGP Signature | |
| x86_64 | anchor-v1.4.1-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | anchor-v1.4.1-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| System | Option | - | Resource |
| Docker | v1.4.1 | sigp/anchor |