Releases: sigp/anchor
Release list
Lighthouse Tender
v0.3.1 is a hotfix for the peering issues introduced in Anchor v0.3.0. We recommend all users to upgrade.
v0.3.0 focused on cleanup in preparation for our first mainnet release. It also included fixes and a couple of features for increased network resilience.
Please carefully read the details below if you want to migrate your existing Anchor instance to v0.3.X, as this release contains breaking changes.
As a reminder, Anchor currently must not be used on mainnet.
The full documentation is available at https://anchor.sigmaprime.io/.
We hope to gather the community's feedback. Please report issues or suggestions on GitHub. If you have any questions or feedback, the best place to reach us is the #anchor channel in the Lighthouse discord server.
💾 Database upgradability ⚠️
We updated our database schema to support database upgrades in future releases, as well as safety features to avoid database mixups and double use of a data directory.
Important
While future database upgrades will be handled automatically, this upgrade requires manual intervention. Please delete the anchor_db.sqlite file in your data directory when updating Anchor to v0.3.X. Otherwise, Anchor will crash on startup. Make sure to NOT delete your operator key!
🔑 Legacy key support dropped ⚠️
Anchor v0.1.0 used a custom key format. Anchor v0.2.0 deprecated that format and converted existing keys to the format used by Go-SSV. In this release, we fully remove support for the Anchor v0.1.0 legacy format.
Important
Users still on v0.1.0 will be unable to directly migrate to v0.3.X. Please migrate to v0.2.0 first, using the instructions of that release. Users already on v0.2.0 do not need to take further action.
All Changes
- chore: Release v0.3.1 (#511)
- fix: Decode correct type for sync committee contributions in QBFT check (#517)
- fix: Unmark subnet as needed in peer manager (#515)
- fix: Calculate the sleep duration in every iteration (#514)
- fix: Do not punish peers during sync (#513)
- fix: Retrieve validator indices omitting status filter (#509)
- chore: Release v0.3.0 (#507)
- Merge branch 'stable' into unstable
- fix: Pass in slot metadata to avoid errors on late collection start (#500)
- fix: Always save ENR on address update, do not set TCP port (#502)
- fix: Specify an empty list on index fetch for Teku compat (#503)
- fix: Only historic sync using a synced endpoint (#504)
- feat: QBFT value checks for
ValidatorConsensusData(#488) - fix: Do not log duplicate errors, instead of only (#499)
- feat: QBFT value checks for
BeaconVote(#487) - ci: Remove x86 Apple from the release builds (#495)
- ci: Add CI checks for conventional commits (#430)
- feat: Add lockfile to data dir (#475)
- fix(sync): Increase connection timeout to avoid index sync error (#362)
- feat: verify gossipsub subnets via observed subscriptions (#478)
- refactor: Create
QbftDataValidatorfor flexible QBFT data validation (#480) - fix: round change data (#482)
- Fix CI for new docs (#489)
- Transition Mdbook to Vocs (#483)
- chore: small git chore (#484)
- chore:
cargo updateto fix CI (#485) - fix(validator_store): Use database directly in validator store (#443)
- fix: revert removal of
base_hash(#477) - chore: add claude md (#451)
- fix: Revert
multi_index_maprefactor (#476) - chore: Update dependencies (#452)
- feat(database): Add
metadatatable for upgradability and avoiding database switchups (#387) - chore: Enable topic scoring by default (#469)
- chore: Clippy for 1.89 (#470)
- refactor: Implement data dir module for central management of paths (#448)
- feat: prune peers lowest score peers (#456)
- feat(networking): update ports in ENR (#457)
- refactor: Remove pre-genesis polling (#458)
- refactor(network): Avoid specialized Lighthouse types (#459)
- refactor: replace custom MultiIndexMap with multi_index_map Crate (#463)
- fix: version command in book (#460)
- refactor(keysplit): Use
eth2_keystorefrom LH instead of reimplementing it (#449) - ci: Fix rust version in docker workflow (#453)
- refactor(signature_collector): Remove
base_hash(#437) - chore!: Remove legacy key support (#447)
- refactor: Switch to let-chains where possible (#435)
- feat(peer_manager): integrate peer blocking functionality into modular peer manager (#432)
- fix: Avoid duplicate entries in
MultiIndexMap(#434) - refactor: Revamp startup sequence and check sync status (#372)
- refactor(peer_manager): modular peer manager (#428)
- refactor(cli): Unify CLI parameters and refactor CLI definition (#347)
- Avoid accidentally skipping blocks when switching to live sync (#363)
- Combine owners and nonce tables (#391)
Binaries
See pre-built binaries documentation.
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| aarch64 | anchor-v0.3.1-aarch64-apple-darwin.tar.gz | PGP Signature | |
| x86_64 | anchor-v0.3.1-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.3.1-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| System | Option | - | Resource |
| Docker | v0.3.1 | sigp/anchor |
Skiff
⚠️
Summary
This is Anchor's third pre-release, focusing on cleanup in preparation for our first mainnet release. It also includes fixes and a couple of features for increased network resilience.
Please carefully read the details below if you want to migrate your existing Anchor instance to v0.3.0, as this release contains breaking changes.
As a reminder, Anchor currently must not be used on mainnet.
The full documentation is available at https://anchor.sigmaprime.io/.
We hope to gather the community's feedback. Please report issues or suggestions on GitHub. If you have any questions or feedback, the best place to reach us is the #anchor channel in the Lighthouse discord server.
💾 Database upgradability ⚠️
We updated our database schema to support database upgrades in future releases, as well as safety features to avoid database mixups and double use of a data directory.
Important
While future database upgrades will be handled automatically, this upgrade requires manual intervention. Please delete the anchor_db.sqlite file in your data directory when updating Anchor to v0.3.0. Otherwise, Anchor will crash on startup. Make sure to NOT delete your operator key!
🔑 Legacy key support dropped ⚠️
Anchor v0.1.0 used a custom key format. Anchor v0.2.0 deprecated that format and converted existing keys to the format used by Go-SSV. In this release, we fully remove support for the Anchor v0.1.0 legacy format.
Important
Users still on v0.1.0 will be unable to directly migrate to v0.3.0. Please migrate to v0.2.0 first, using the instructions of that release. Users already on v0.2.0 do not need to take further action.
All Changes
- chore: Release v0.3.0 (#507)
- Merge branch 'stable' into unstable
- fix: Pass in slot metadata to avoid errors on late collection start (#500)
- fix: Always save ENR on address update, do not set TCP port (#502)
- fix: Specify an empty list on index fetch for Teku compat (#503)
- fix: Only historic sync using a synced endpoint (#504)
- feat: QBFT value checks for
ValidatorConsensusData(#488) - fix: Do not log duplicate errors, instead of only (#499)
- feat: QBFT value checks for
BeaconVote(#487) - ci: Remove x86 Apple from the release builds (#495)
- ci: Add CI checks for conventional commits (#430)
- feat: Add lockfile to data dir (#475)
- fix(sync): Increase connection timeout to avoid index sync error (#362)
- feat: verify gossipsub subnets via observed subscriptions (#478)
- refactor: Create
QbftDataValidatorfor flexible QBFT data validation (#480) - fix: round change data (#482)
- Fix CI for new docs (#489)
- Transition Mdbook to Vocs (#483)
- chore: small git chore (#484)
- chore:
cargo updateto fix CI (#485) - fix(validator_store): Use database directly in validator store (#443)
- fix: revert removal of
base_hash(#477) - chore: add claude md (#451)
- fix: Revert
multi_index_maprefactor (#476) - chore: Update dependencies (#452)
- feat(database): Add
metadatatable for upgradability and avoiding database switchups (#387) - chore: Enable topic scoring by default (#469)
- chore: Clippy for 1.89 (#470)
- refactor: Implement data dir module for central management of paths (#448)
- feat: prune peers lowest score peers (#456)
- feat(networking): update ports in ENR (#457)
- refactor: Remove pre-genesis polling (#458)
- refactor(network): Avoid specialized Lighthouse types (#459)
- refactor: replace custom MultiIndexMap with multi_index_map Crate (#463)
- fix: version command in book (#460)
- refactor(keysplit): Use
eth2_keystorefrom LH instead of reimplementing it (#449) - ci: Fix rust version in docker workflow (#453)
- refactor(signature_collector): Remove
base_hash(#437) - chore!: Remove legacy key support (#447)
- refactor: Switch to let-chains where possible (#435)
- feat(peer_manager): integrate peer blocking functionality into modular peer manager (#432)
- fix: Avoid duplicate entries in
MultiIndexMap(#434) - refactor: Revamp startup sequence and check sync status (#372)
- refactor(peer_manager): modular peer manager (#428)
- refactor(cli): Unify CLI parameters and refactor CLI definition (#347)
- Avoid accidentally skipping blocks when switching to live sync (#363)
- Combine owners and nonce tables (#391)
Binaries
See pre-built binaries documentation.
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| aarch64 | anchor-v0.3.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| x86_64 | anchor-v0.3.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.3.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| System | Option | - | Resource |
| Docker | v0.3.0 | sigp/anchor |
Canoe
Summary
This is Anchor's second alpha release, focusing on increased compatibility between Anchor and the original SSV client. Anchor now uses the same key format as the Go implementation, which allows you to easily test Anchor with your existing operator keys!
Please carefully read the details below if you want to migrate your Anchor v0.1.0 instance to v0.2.0, as this release contains breaking changes.
As a reminder, Anchor can currently not be used on mainnet.
The documentation at https://anchor-book.sigmaprime.io/ was updated for this release.
We hope to gather the community's feedback. Please report issues or suggestions on GitHub. If you have any questions or feedback, the best place to reach us is the #anchor channel in the Lighthouse discord server.
📊 Network Scoring
Anchor now scores peers by their behaviour, increasing resiliency to attacks.
This is an experimental feature. If you experience any issues where Anchor reports having peers via the Network status log line, but most duties time out despite the other operators being online, try disabling scoring via the --disable-gossipsub-peer-scoring flag. We are grateful for any reports if you encounter issues with this feature.
🔑 Key compatibility
Anchor now uses the same key format as the original SSV implementation! This allows you to easily switch between clients and to use the DKG ceremony client for Distributed Key Generation!
If you upgrade an existing Anchor instance, your key will be converted on the first launch of your upgraded node. Note that the converted key will be placed in another file, and the original key will be removed after successful conversion. To switch to an encrypted key, specify a password file on startup (see below).
If you want to use an existing key file with Anchor, simply drop your existing encrypted_private_key.json into an empty directory and use that directory as Anchor's --datadir, or point to it with the new CLI options (see below). For unencrypted keys, create a file called unencrypted_private_key.txt and place the key as specified in Go-SSV's config inside.
Our keygen CLI subcommand was also updated to use the new key format.
🐳🚢 Separate key and password files
Anchor now supports password files, additionally to the interactive specification via the console.
Docker and Kubernetes users often manage secrets with separately mouted files. Furthermore, interactively entering passwords on startup is often undesired.
Encrypted keys can now be unlocked by specifying a file containing the password via the --password-file CLI option. Furthermore, keys can now also be placed in a separate location instead of having to be located inside the --datadir. To point Anchor to a private key, use --key-file. Note that the file must have an appropriate file name extension (.txt for unencrypted keys, .json for encrypted keys).
🔌 Changed default ports
Anchor previously used ports 9100 and 9101. Unfortunately, 9100 collided with the widely used Prometheus node_exporter.
In this release, we switch to the default ports as used by Go-SSV: 12001 UDP for discovery and 13001 TCP for general network traffic. Port 13002 UDP is used for communication using QUIC, which is currently only supported by Anchor.
If you use the default values, you might need to adjust your firewall and/or Docker command accordingly. If you explicitly specify a port via the --port CLI option, this change does not affect you.
Known Issues
- Anchor currently can not use Lodestar due to a bug in Lodestar. We expect this to be fixed with Lodestar's next release.
All Changes
- Release v0.2.0 (#425)
- Fix port selection (#423)
- Avoid penalizing decided messages (#413)
- Set topic parameters (#406)
- Use Go-SSV key formats, convert legacy keys (#404)
- Remove
fuzz(#421) - Also allow comma separated CLI values (#412)
- Switch to Go-SSV default ports (#414)
- recursive clone for submodules (#415)
- Use the correct role and encoding for sync committee contributions (#395)
- Do not log full data when proposing (#401)
- Adjust documentation for
v0.2.0(#408) - Add message rate (#402)
- Reduce memory usage in validator (#379)
- Add
operator_keycrate to bundle key serialization functionality (#390) - Fetch batches while processing (#365)
- Correctly use the workspace edition everywhere (#398)
- Add topic score params (#394)
- Merge immediately if branch is up to date and passes tests (#397)
- Fix Rust 1.88 lints (#396)
- Create scoring mod (#393)
- Reduce logging during sync (#364)
- Return references instead of cloning in
MultiIndexMap(#378) - Avoid unnecessary allocations and conversions in database (#361)
- Convert SQL statements to constants (#359)
- Fix permissions of check_success_job.sh (#383)
- Merge branch 'stable' into unstable
- Add peer score params and thresholds (#368)
- Add mergify config (#338)
- Fix discord invite link (#373)
- Delete unused
network_actionsmodule (#360) - Add role to ExcessiveDutyCount error (#366)
- Do not warn if a validator is removed before index is set (#356)
Binaries
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| x86_64 | anchor-v0.2.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.2.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| x86_64 | anchor-v0.2.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.2.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| System | Option | - | Resource |
| Docker | v0.2.0 | sigp/anchor |
Kayak
Summary
This is Anchor's first alpha release, v0.1.0! 🎉
Anchor is the second implementation of the ssv.network DVT protocol. It is written in Rust and builds upon Lighthouse, Sigma Prime's Ethereum consensus client. It can interoperate with SSV Lab's implementation.
Documentation is available at https://anchor-book.sigmaprime.io/. Note that the documentation is work in progess.
In this release, the ability to connect to Mainnet was intentionally disabled, as Anchor is still in development, has known issues, and hasn't been fully audited yet. All features are to be considered WIP and interfaces such as the CLI, HTTP API and Prometheus metrics may change in future releases.
We hope to gather the community's feedback. Please report issues or suggestions on GitHub. If you have any questions or feedback, the best place to reach us is the #anchor channel in the Lighthouse discord server.
Known Issues
- Sync committee aggregation duties may fail, causing error messages such as
Unable to sign sync committee contributionandUnexpected error while signing sync committee contribution. Note that sync committee signatures themselves work and are correctly published, so most sync committee duties should be correctly included on the beacon chain. - Rarely, proposals may fail. Please do not hesitate to reach out if this occurs, as logs will greatly help us troubleshooting this.
- In some cases, internal validation of an outgoing message might fail, causing messages such as
Validation of outgoing message failed (Reject) err=ExcessiveDutyCount. - During initial sync, the node will emit several
WARNlogs containing the messageTried to update index of unknown validator. This is expected behaviour and logging will be adjusted in a future release. - During initial sync, the node may repeatedly log
ERROR eth::index_sync: Failed to update validator indices err=SQLPoolError("timed out waiting for connection"). Sync should complete regardless.
Binaries
The binaries are signed with Sigma Prime's PGP key: 15E66D941F697E28F49381F426416DC3F30674B0
| System | Architecture | Binary | PGP Signature |
|---|---|---|---|
| x86_64 | anchor-v0.1.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.1.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
| x86_64 | anchor-v0.1.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
| aarch64 | anchor-v0.1.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
| System | Option | - | Resource |
| Docker | v0.1.0 | sigp/anchor |