Releases: Consensys/teku
21.5.0
Upcoming Breaking Changes
- Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request.
Additions and Improvements
- Newly created databases will now use LevelDB for storage instead of RocksDB. This uses less memory and has proven to be more stable. Existing databases are unaffected and will continue to use RocksDB.
- Support for automatic fail-over of eth1-endpoints. Multiple endpoints can be specified with the new
--eth1-endpoints
CLI option. Thanks to Enrico Del Fante. - Add experimental endpoint for retrieving peer gossip scores at
/teku/v1/nodes/peer_scores
. - Continued work on supporting Altair including adding a number of experimental REST APIs. These are subject to change as the Altair spec continues to evolve.
Bug Fixes
- Error messages logged when the validator client fails to perform duties now include a complete list of affected validators.
- Fix bug where a REST API request with a missing host header would result in a
NullPointerException
.
Downloads
v21.4.1
Upcoming Breaking Changes
- Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request. - The default docker image will be updated to Java 16 in an upcoming release.
Additions and Improvements
- Early access: Support for automatic fail-over of eth1-endpoints. Multiple endpoints can be specified with the new
--eth1-endpoints
CLI option. Thanks to Enrico Del Fante. - Basic authentication is now supported for
--initial-state
. Infura can now be used as the source of initial states with--initial-state https://{projectid}:{secret}@eth2-beacon-mainnet.infura.io/eth/v1/debug/beacon/states/finalized
- Implement standard rest api
/eth/v2/beacon/blocks/:block_id
which supports altair blocks. Documented under 'Experimental' endpoints until more widely implemented. - Implement teku rest api to retrieve all blocks at a slot
/teku/v1/beacon/blocks/:slot
, which will return both canonical and non-canonical blocks at a given slot.
Bug Fixes
- Fixed issue where attestation subnets were not unsubscribed from leading to unnecessary CPU load when running small numbers of validators.
- Fixed issue where validator duties were not invalidated in response to new blocks correctly when using dependent roots.
- Fixed issue where exit epoch for voluntary exits would be incorrectly calculated.
Downloads
v21.4.0
Upcoming Breaking Changes
- Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request.
Additions and Improvements
-
Optimised validation of aggregate gossip messages to reduce CPU usage.
-
Upgraded to use BLS implementation BLST version 0.3.3.
-
Teku now waits for Eth1 nodes to finish syncing before requesting data from them. Thanks to Enrico Del Fante.
-
Reduced CPU usage required when processing gossip message by optimising peer scoring.
-
Added new metrics to Validators
validator_external_signer_requests
with labelssuccess
,failed
,timeout
.validator_duties_performed
with labelstype
andresult
.validator_event_stream_disconnections_total
which has areason
label. The reason will be one of (disconnect, connect, error, timeout, invalidEvent).validator_event_stream_invalid_events_total
counts the number of invalid events found on the event stream.
-
Early access: LevelDB based database to reduce native memory usage and disk space.
Currently, can only be used from a new database by specifying
--Xdata-storage-create-db-version leveldb2
. This will become the default new database format in future releases.
Migration for existing database will be added in a future release.
Bug Fixes
- Fixed
ProtoArray: Best node is not viable for head
error.
Downloads
v21.3.2
Breaking Changes
- The events api
/eth/v1/events
-block
event now returns the slot and root as detailed in the standard API specification, instead of the entire block.
Upcoming Breaking Changes
- Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request.
Additions and Improvements
- When downloading the
--initial-state
from a URL, theAccept: application/octet-stream
header is now set. This provides compatibility with the standard API/eth/v1/debug/beacon/states/:state_id
endpoint. --ws-checkpoint
CLI now accepts a URL optionally, and will load thews_checkpoint
field from that URL.- Reduced CPU usage by avoiding creation of REST API events when there are no subscribers.
Bug Fixes
- Fixed issue in discv5 where nonce was incorrectly reused.
- Block events now only return the slot and root, rather than the entire signed block.
Downloads
v21.3.0
Breaking Changes
- Binary downloads have been transitioned from Bintray to Cloudsmith. Please ensure you use links in the documentation or release notes.
Ansible users should ensure they have the latest version of the ansible role. - Removed support for the no longer active Medalla and Toledo test networks.
Upcoming Breaking Changes
- Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request.
Additions and Improvements
- Optimised fork choice to avoid unnecessary copying, reducing CPU and memory usage.
- Added a network definition for the prater test network
--network prater
. - Added a labelled counter to metrics to display teku version under
beacon_teku_version
. On startup the version being run will report as the label 'version', with a value of '1'. - Support loading Altair constants. Versioned constants may be loaded from a single file or a directory containing files: phase0.yaml, altair.yaml. Constants files are now required to end in a YAML extension (.yaml or .yml).
- Improved handling of mplex connections.
Bug Fixes
- Reduced verbosity of warning message when SIGHUP can't be intercepted (e.g. on Windows)
- Fixed build failure when checked out as a shallow clone. Shallow clones are still not recommended as the version number cannot be determined correctly.
- Logs generated during voluntary exit command processing should no longer contain usernames or passwords.
- Fixed case where sync could stall when switching to a new target chain that is shorter than the previous target.
Downloads
v21.2.0
Breaking Changes
- The default docker image now uses Java 15. Java 14 based images are available with the
-jdk14
suffix if required (e.gconsensys/teku:develop-jdk14
) --validators-key-files
and--validators-key-password-files
have now been removed. They are replaced by--validator-keys
.- Docker images are now being published to
consensys/teku
. Thepegasys/teku
images are no longer updated.
Upcoming Breaking Changes
- Binary downloads will be transitioned from Bintray to Cloudsmith. Please ensure you use links in the documentation or release notes.
Ansible users should ensure they have the latest version of the ansible role.
To ensure a smooth migration, releases are currently published to both Cloudsmith and Bintray but support for Bintray will be dropped after this release due to Bintray preventing new uploads. - Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request.
Additions and Improvements
-
New validators can now be loaded without restarting by sending a
SIGHUP
to Teku.
Teku will recheck directories of keys specified via--validator-keys
and URLs specified via--validators-external-signer-public-keys
for any new validators to run.Important: Removing validators still requires a restart as there is no reliable mechanism to signal when they have actually ceased performing duties.
-
--p2p-nat-method upnp
has been added to allow users to use upnp to configure firewalls to allow incoming connection requests. -
--initial-state
argument is now ignored if chain data is already initialised. Previously it would be downloaded on every restart and Teku would exit if the referenced state was ahead of the chain on disk. -
Enabled the new sync algorithm by default. This improves sync behaviour when there are multiple forks and distributes requests for blocks across available peers. The old sync algorithm can still be used by setting
--Xp2p-multipeer-sync-enabled=false
. -
The default docker image has been upgraded to use Java 15.
-
Updated the ENRs for MainNet bootnodes run by the Nimbus team.
-
Added a
is_syncing
field to the/eth/v1/node/syncing
endpoint to explicitly indicate if the node is in sync or not. -
Teku will now exit when database writes fail (e.g. due to disk failure) to enable systems like kubernetes to better identify and respond to the failure.
-
Reduced time required to load local validator keys at startup.
Bug Fixes
- Ensured shutdown operations have fully completed prior to exiting the process.
- Fixed
NoSuchElementException
that occurred during syncing. - Avoid marking the node as in sync incorrectly if an error occurs while syncing. Now selects a new target chain and continues syncing.
- Reject validator related REST API requests when syncing, even if the head block is close to the current slot.
head
andchain_reorg
events do not fire while sync is active so the validator client is unable to detect when it should invalidate duties. - Increase the default limit for the queue for delivering events to REST API subscribers. When subscribing to attestations, they are often received in bursts which would exceed the previous limit even when the client was keeping up.
The default limit is now 250 and can now be configured with--Xrest-api-max-pending-events
. - Fixed
ProtoNode: Delta to be subtracted is greater than node weight
exception which may occur after an issue writing data to disk storage. - Fix issue where basic authentication credentials included in the
--beacon-node-api-endpoint
URL were included inDEBUG
level logs. - Proposer duties are now consistently reported in slot order in the REST API.
- Gossip topic subscriptions are now delayed until the node is nearly in sync.
Downloads
v21.1.1
Upcoming Breaking Changes
- The default docker image will be updated to Java 15. Java 15 based images are available now for testing with the
-jdk15
suffix (e.gconsensys/teku:develop-jdk15
) - Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request. - Docker images are now being published to
consensys/teku
. Thepegasys/teku
images will continue to be updated for the next few releases but please update your configuration to useconsensys/teku
. --validators-key-files
and--validators-key-password-files
have been replaced by--validator-keys
. The old arguments will be removed in a future release.
Additions and Improvements
--validators-external-signer-public-keys
arguments can now include URLs to load the public keys from. The URL should provide a list of public keys as a JSON array.- Added support for
block
,attestation
andvoluntary_exit
event streams from the standard REST API. - If an advertised IP is set via
--p2p-advertised-ip
it is always used, regardless of the external IP discovered via the discv5 process.
Bug Fixes
- Restored the state cache size to 160 to improve performance during sync.
- Fixed help text for
--validators-graffiti-file
to refer to--validators-graffiti
as the fallback not--graffiti
. - Fixed validator client timeout when reading from the event stream to avoid unnecessary reconnections.
- Reduced bandwidth usage during a forward sync by skipping requesting parents of blocks received via gossip as they are likely to be retrieved via the forward sync more efficiently.
- Error conditions which prevent Teku from starting, such as being unable to load validator keys, are now reported to both the log and system error to make them more likely to be seen.
Downloads
v21.1.0
Upcoming Breaking Changes
- The default docker image will be updated to Java 15. Java 15 based images are available now for testing with the
-jdk15
suffix (e.gconsensys/teku:develop-jdk15
) - Teku currently publishes a
head
event on the REST API 4 seconds into a slot even if a block has not been received. In a future release this will be changed sohead
event is only published when a new
chain head block is imported. The--Xvalidators-dependent-root-enabled
option can be used to switch to the new behaviour now for testing.
Note: this should be applied to both the beacon node and validator client if running separately. - The
/teku/v1/beacon/states/:state_id
endpoint has been deprecated in favor of the standard API/eth/v1/debug/beacon/states/:state_id
which now returns the state as SSZ when theAccept: application/octet-stream
header is specified on the request. - Docker images are now being published to
consensys/teku
. Thepegasys/teku
images will continue to be updated for the next few releases but please update your configuration to useconsensys/teku
. --validators-key-files
and--validators-key-password-files
have been replaced by--validator-keys
. The old arguments will be removed in a future release.
Additions and Improvements
- Added support for loading graffiti from a file to allow it to be changed without restarting. Thanks to EdwardPrentice
- Supported retrieving states as SSZ on the standard REST API
/eth/v1/debug/beacon/states/:state_id
when theAccept: application/octet-stream
header is specified in the request. - Improved performance when verifying aggregate signatures.
- Added verification of block signatures when downloading historic blocks after a snapshot sync.
Bug Fixes
- Fixed issue which could lead to the incorrect proposer index being calculated after a long period without network connectivity.
- Fixed issue where Teku did not exit at startup when validator keys were loaded.
Downloads
v20.12.1
Additions and Improvements
- Add some performance optimizations to improve block inclusions rates and attestation accuracy.
- Improve deserialization performance for large data structures, speeding up deserialization up to 1000x for large beacon states.
- Build and publish docker images on OpenJDK 15 (which supports arm64) in addition to OpenJDK 14.
Java 15 based images are available now for testing with the-jdk15
suffix (e.gconsensys/teku:develop-jdk15
) - Add periodic checks to make sure any configured external signer (
--validators-external-signer-url
) is reachable.
If the external signing service cannot be reached, errors are logged each time teku fails to contact the external signer. - Limit the rate at which signature requests are sent to external signers at the start of each epoch.
- Add options to configure keystore and truststore for TLS communication and authentication with external signer.
- Add metrics to track validator participation (
previous_epoch_participation_weight
,previous_epoch_total_weight
).
This enables accurate tracking of network participation rate. - Add
sync_state
event type to events REST API endpoint. - Improve logging and validation around
--initial-state
arguments.
Bug Fixes
- Fix an issue where teku could produce aggregate attestations when it should not.
- Fix an issue with
--log-file-name-pattern
where teku would rotate log files to the default data directory even when a custom data directory was specified using--data-path
. - Break up requests for validator information into batches to avoid sending requests that are too large.
- Fix a bug in our peer selection logic so that we now select a subset of peers randomly in order to guard against
eclipse attacks.
Downloads
v20.12.0
Additions and Improvements
- Improved support for Nethermind and OpenEthereum when historic blocks are not fully available.
- Improved logging for Eth1 status to provide a warning when the node fails to respond to requests for deposit logs.
Also includes a message to the console when all current deposit logs have been received. - Maximum number of blocks per request for Eth1 deposit logs can now be configured with
--eth1-deposit-contract-max-request-size
. - Added support for setting CORS headers in REST API to enable access from browser-based apps.
voluntary-exit
sumcommand now defaults to using the current epoch.
Bug Fixes
- Improved help text for
--eth1-deposit-contract-address
to clarify it is not required for named networks. - Reduced default number of blocks per request for eth_getLogs requests further.
- Fixed issue in external validator which could result in multiple requests for fork data from the beacon node at startup.
- Reduced memory usage of in memory beacon states.
- Fix
AbstractRouter internal error on message control
exception. - Fix incorrect penalty applied to peers when requested gossip data was received from a different peer before the original peer's response.