- 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.
- 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.
- 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.
- Resolve slow lookup for validators by public key, particularly when the public key is not a known validator.
- Ensure correct source target is used when creating attestations for an empty slot at the start of the epoch.
- Fix
--initial-state
option so it is included in help output and support--initial-state ""
to ignore built-in states and recalculate genesis from the Eth1 chain. - Improved error message when Eth1 node fails to return data for a requested block.
- Reduced batch size when retrieving deposits from the Eth1 chain. Improves compatibility with Geth nodes with limited resources.
The beacon chain is set to launch with the MainNet genesis state now set. The beacon chain will launch on 1 December 2020 at 12:00:23 UTC. Teku 20.11.0 is fully production ready and has full support for the beacon chain Mainnet.
- REST API endpoint
/eth/v1/beacon/pool/attestations
now accepts an array of attestations instead of a single attestation.
- Full support for Eth2 MainNet. Genesis state and bootnodes are now configured as part of the
--network mainnet
option. - Voluntary exits and slashings submitted via the REST API are now broadcast to the gossip network.
- Added
/teku/v1/admin/liveness
endpoint which always returns 200 OK to be used to check if the REST API is live. - Added
dependent_root
field to attester and block producer duties as well ascurrent_duty_dependent_root
andprevious_duty_dependent_root
to thehead
events to aid validator clients in determining when duties are invalidated by changes in the chain. - Tightened validation of data from the beacon node in the validator client to ensure blocks and attestations from far future slots are not signed.
- Fixed incorrect expected attestation metric.
- Fixed incorrect
beacon_previous_correct_validators
metrics. - Fixed race condition during validator startup which could lead to duties not being performed for the first two epochs.
- Provide a human-friendly error message when the
--network
argument is unknown. - Provide more human-friendly error messages when invalid options are given to the
voluntary-exit
subcommand. - Avoided duplicate epoch processing during block creation.
- Reduce noise from
UNKNOWN_PARENT
errors when syncing. - Drop discovery session when a malformed
authheadermessage
packet is received.
- Optimised gossip handling in jvm-libp2p.
- Optimised attestation and aggregate verification, ensuring signatures are only verified once.
- Added new metrics
beacon_current_correct_validators
andbeacon_previous_correct_validators
to report the number of validators that attested to the correct head block in the current and previous epochs.
- Fixed seenTTL value in gossipsub configuration. Significantly reduces rate of gossip traffic.
- Avoid potential errors when regenerating states immedately after starting from a non-genesis state.
- Fixed issue where validator duties may not be performed during the first two epochs after restart.
- The default network is now
mainnet
. Use--network medalla
to continue using the Medalla testnet. - REST API endpoints have been migrated to the standard API and deprecated endpoints removed. Replacements:
- GET
/eth/v1/beacon/states/{state_id}/validators/{validator_id}
replaced by POST/eth/v1/beacon/states/{state_id}/validators/{validator_id}
/network/enr
replaced by/eth/v1/node/identity
/network/listen_addresses
replaced by/eth/v1/node/identity
/network/peer_id
replaced by/eth/v1/node/identity
/network/peers
replaced by/eth/v1/node/peers
/network/peer_count
replaced by/eth/v1/node/peers
/network/listen_port
replaced by/eth/v1/node/identity
/node/fork
replaced by/eth/v1/beacon/states/{state_id}/fork
/node/genesis_time
replaced by/eth/v1/beacon/genesis
/node/syncing
replaced by/eth/v1/node/syncing
/node/version
replaced by/eth/v1/node/version
- GET
/validator/attestation
replaced by/eth/v1/validator/attestation_data
- POST
/validator/attestation
replaced by/eth/v1/beacon/pool/attestations
- GET
/validator/block
replaced by/eth/v1/validator/blocks/{slot}
- POST
/validator/block
replaced by/eth/v1/beacon/blocks
/validator/aggregate_attestation
replaced by/eth/v1/validator/aggregate_attestation
- POST
/validator/duties
replaced by POST/eth/v1/validator/duties/attester/{epoch}
and GET/eth/v1/validator/duties/proposer/{epoch}
/validator/aggregate_and_proofs
replaced by/eth/v1/validator/aggregate_and_proofs
/validator/beacon_committee_subscription
replaced by/eth/v1/validator/beacon_committee_subscriptions
/validator/persistent_subnets_subscription
deprecated. The beacon node now automatically establishes persistent subnet subscriptions based on calls to/eth/v1/validator/beacon_committee_subscriptions
/beacon/block
deprecated. Replaced by/eth/v1/beacon/blocks/{block_id}
/admin/log_level
moved to/teku/v1/admin/log_level
- GET
- Validator subcommands for generating and registering validators have been removed. Please use the Eth2 Launchpad to register validators, which is the most secure way of generating keys and sending deposits.
- Log files are now stored under the specified
--data-path
in<data-path>/logs/teku.log
. The location is unchanged if--data-path
is not specified.
- Switched default network to
mainnet
. Note that as the MainNet genesis state is not yet set, an--eth1-endpoint
must be provided when using MainNet. - Added support for the
pyrmont
testnet via--network pyrmont
. - Added
teku voluntary-exit
subcommand to allow creating and sending voluntary exit operations for validators. - Syncing from a non-genesis state (weak subjectivity sync) is now fully supported. Use
--initial-state
to specify a finalized state to begin syncing from. - Added two REST APIs to download states as SSZ, suitable for use with
--initial-state
.- By block root, slot or keyword (eg
finalized
):/teku/v1/beacon/blocks/:block_id/state
- By state root, slot or keyword (eg
finalized
):/teku/v1/beacon/states/:state_id
- By block root, slot or keyword (eg
- Provide clearer information in logs when external signers refuse to sign because of a potential slashing condition.
- Provide more detailed information when internal slashing protection refuses to sign because of a potential slashing condition.
- Allow built-in slashing protection to be disabled for external signers with
--validators-external-signer-slashing-protection-enabled=false
- Added support for slashing protection interchange format v5.
- Historical blocks are now backfilled when syncing from a non-genesis state.
- Updated jvm-libp2p to fix
CantDecryptInboundException
errors in logs. - Reduced log level when malformed response is received from a remote peer during sync.
- Fixed incompatibility with the standard slashing protection interchange format.
- Fix OpenAPI specification to remove the invalid
exampleSetFlag
field. - Fix response content for
/eth/v1/beacon/states/:state_id/finality_checkpoints
in OpenAPI specification.
- In post data for
/eth/v1/validator/aggregate_and_proofs
,index
has been renamed toaggregator_index
andattestation
has been renamed toaggregate
reflecting the latest version of the standard API spec. - Removed network definitions for
spadina
andzinken
testnets which are no longer active. - The
validator
subcommands to generate validator keys and send deposit transactions have been removed. Use the Eth2 Launchpad to register validators.
- Added the Mainnet network definition. To use Mainnet, ensure the ETH1 node is connected to Eth1 Mainnet and specify
--network mainnet
. - New standard API endpoints:
- GET
/eth/v1/config/fork_schedule
- GET
/eth/v1/beacon/blocks/{block_id}
- GET
/eth/v1/beacon/blocks/{block_id}/attestations
- GET
/eth/v1/beacon/blocks/{block_id}/root
- POST
/eth/v1/beacon/pool/voluntary_exits
- POST
/eth/v1/beacon/pool/proposer_slashings
- POST
/eth/v1/beacon/pool/attester_slashings
- GET
/eth/v1/config/deposit_contract
- GET
- Added support for the Toledo devnet.
- Early access: Weak subjectivity sync no longer requires the initial block. Only the state needs to be provided via
--Xws-initial-state
. Additionally theXws-initial-state
option can be specified via a config file. - Support either plain text or JSON responses from external signers.
- Identify which validator was affected when validator duties fail.
- Removed support for uncompressed
SSZ
encoding for gossip and p2p RPC. All networks have been usingSSZ_SNAPPY
encoding for some time.
- Fixed an issue where deposit events were retrieved from a range of blocks that was too large. This resulted in overloading local Geth nodes running on Mainnet, and exceeding the 10,000 log event limit in Infura responses.
- Reduce log level for
RpcTimeoutException
during sync. - Check equality of the header in proposer slashings, not the signed wrapper. Fixes a potential state transition incompatibility found by fuzz testing.
/eth/v1/beacon/{state}/committees
now specifies the epoch as a query parameter instead of a part of the path- Discovery has been updated to discv5.1
- Reduced memory usage when finalizing after a long period of non-finalization and provided progress messages while finalized blocks are stored
- New standard API endpoints:
- GET
/eth/v1/debug/beacon/heads
- GET
- Updated discovery to use discv5.1 standard
- Significantly reduced CPU usage, particularly during long periods of non-finalization by optimising the
get_ancestor
method in fork choice - Added
libp2p_gossip_messages_total
metric to report the number of gossip messages processed by gossip topic - Apache license notice is now displayed on startup
- Handled retrieving states for
finalized
orhead
when the actual slot is empty - Fixed issue where EIP2335 keystores without a
path
oruuid
field were rejected as invalid - Fixed error codes returned when validators were not found in standard API queries
- Skip loading the latest finalized state on startup as it is not required to recreate the memory store
- Fixed handling of empty responses from peers when requesting a single block that they do not have
- 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
. - Support for the v3 database format has been removed. This is an old format that was replaced prior to the Medalla testnet launching so all users should already be on more recent versions.
- External signing API now includes all data required for the external signer to independently compute the signing root
- New standard REST API endpoints:
- GET
/eth/v1/beacon/headers
- currently theparent_root
option is not supported - GET
/eth/v1/debug/states/{state_id}
- GET
/eth/v1/config/spec
- GET
- Validator client now supports basic authentication when the credentials are specified as part of the
--beacon-node-api-endpoint
option - Validator client now has simple handling for 429 Too Many Request responses from the beacon node
- Added
--p2p-subscribe-all-subnets-enabled
option to the beacon node to automatically create persistent subscriptions to all attestation subnets - Early access: support for starting sync from an arbitrary point in the chain with
--Xws-initial-state=<path-to-ssz-encoded-state> --Xws-initial-block=<path-to-ssz-encoded-block>
. As this is early access, the CLI options are subject to change.
- Fixed a long stall when the chain finalizes after a long period of non-finalization in archive mode
--config-file
option can now be used with subcommands and specified either before or after the subcommand on the command line- Fixed issue where validator committee indices were not string formatted in the standard REST API responses
- Requests for
head
,justified
andfinalized
blocks would incorrectly return a404
response if the slot was empty - Fixed issue where the
slot
parameter for the/eth/v1/validator/aggregate_attestation
endpoint was ignored and the validator client always set it to 0 when making requests. - Fixed issue where the
/eth/v1/validator/attestation_data
endpoint did not wrap the response in thedata
element as expected - Fixed an issue where a state from the previous epoch was used when calculating proposer duties
- Performed block gossip validation checks which do not require the state prior to loading it to improve performance
-
Teku now supports running the validator client as a separate process via the
teku validator-client
subcommand. The in-process validator client is still supported.IMPORTANT: To avoid being slashed, ensure validator keys are only passed as arguments to either the beacon node or the validator client but never both at the same time.
-
Migrates to a new directory structure for data storage to provide clear separation between beacon node and validator files. Existing databases will be automatically migrated.
-
Improved management of states to reduce on-heap memory usage during long periods of non-finalization.
-
Head update and chain reorg events are no longer published during sync. A single coalesced event is published when sync completes.
-
Reduced database growth rate during periods of non-finalization. State snapshots are only stored every two epochs instead of each epoch. This can be further adjusted with
--Xhot-state-persistence-frequency
. -
New standard REST API endpoints:
/eth/v1/beacon/headers/{block_id}
/eth/v1/beacon/states/:state_id/committees/
/eth/v1/beacon/states/:state_id/committees/:epoch
/eth/v1/beacon/states/:state_id/finality_checkpoints
/eth/v1/beacon/states/:state_id/validators
/eth/v1/beacon/states/:state_id/validator_balances
/eth/v1/validator/aggregate_attestation
/eth/v1/validator/aggregate_and_proofs
/eth/v1/validator/beacon_committee_subscriptions
/eth/v1/validator/attestation_data
/eth/v1/beacon/pool/attestations
/eth/v1/beacon/states/:state_id/root
/eth/v1/beacon/blocks
/eth/v1/validator/blocks/{slot}
-
/eth/v1/validator/duties/attester/:epoch
now includes thecommittees_at_slot
value. -
/eth/v1/validator/duties/attester/:epoch
now supports using thePOST
method to specify validator IDs, avoiding URL length limits. -
The beacon node now automatically manages persistent subnet subscriptions based on the requests to
/eth/v1/validator/beacon_committee_subscriptions
endpoint -
Log to the console if the ETH1 node's chain ID doesn't match the expected value from the ETH2 network definition. This alerts users if the ETH1 node is sync'd to the wrong ETH1 network. Thanks to
systemfreund
. -
Performance tracker reports now include information on duties which could not be performed due to an error.
-
Added support for v1.0.0-rc.0 of the beacon chain spec.
-
Added a
beacon_attestation_pool_size
metric to report the number of attestations held in the attestation pool. -
StrictNoSign
requirements are now enforced on gossip messages. Messages withfrom
,signature
orseqno
fields will be rejected. -
Removed support for
onyx
andaltona
options to the--network
command line option. These networks used an older, incompatible version of the beacon chain spec and have been shut down. -
The
--config-file
option can now be used to provide options for all subcommands. -
Added support for checking the weak subjectivity period and checkpoint. Violations are currently reported to the log file only while the remaining details and infrastructure for handling the weak subjectivity period are finalized.
- Fixed "Unhandled error while processes req/response"
NullPointerException
. - Fixed issue where performance tracker logs counted attestations twice.
- Force external signer connections to use HTTP1.1. HTTP2 connections were regularly failing in Azure.
- Fixed incompatibility with Lighthouse caused by sending an unexpected
RESET
after both sides of a stream were closed. - Fixed issue where REST API reported a 500 internal server error when syncing instead of 503.
- Fixed issue where REST APIs returning validator information incorrectly used the effective balance instead of the actual balance.
- Added
zinken
network genesis state so an ETH1 endpoint is no longer required when connecting to Zinken. - Deprecated the validator subcommands (which were mainly for testing) used for generating and registering validators.
- Removed the option to configure snappy compression. It is enabled by default.
- Fixed an issue where some of the newer validator options weren't being applied in the stand alone validator client.
- Fixed an issue where some of the blocks produced by the stand alone validator client was being dropped.
- Fixed an issue where the create block API coudn't create blocks after more than one epoch of empty slots.
- Fixed a DOS vector where queues for blocks and attestation that are not yet ready for processing could be exploited.
- Added
zinken
network definition. As the genesis state is not yet known, an ETH1 endpoint must be specified when connecting to thezinken
testnet - Added the option to output validator performance over time. Service can be enabled by using
--validators-performance-tracking-enabled
- Implemented caching of beacon block roots to improve block import and thus sync speed
- Support symlinked keystore files
- Updated to spec version 0.12.3
- Fixed issues where slot calculation and Store time management led to underflow errors
- Fixed issue discovered with the remote validator where the websocket publishing backed up due to slow readers
- Added
spadina
network genesis state so an ETH1 endpoint is no longer required when connecting to Spadina.
- Fixed issue where topped-up up deposits did not lead to activated validators.
- Added
spadina
network definition. As the genesis state is not yet known, an ETH1 endpoint must be specified when connecting to thespadina
testnet New REST APIs/eth/v1/validator/duties/attester/:epoch
- gets attester duties for the given epoch/eth/v1/validator/duties/proposer/:epoch
- gets block proposer duties for the given epoch- Deprecated POST
/validator/duties
, as the new standard endpoints are now implemented eth/v1/beacon/genesis
- retrieves details of the chain's genesis- Deprecated the previous genesis endpoint
/node/genesis_time
/eth/v1/beacon/states/:state_id/validators/:validator_id
- gets validator from state by id/eth/v1/beacon/states/{state_id}/fork
- gets Fork object for requested state- Deprecated the previous fork endpoint
/node/fork
/eth/v1/events
- subscribes to beacon node events
- Implemented validator keystore file locking to prohibit another process using the same keys and getting slashed
- Updated slashing protection interchange format version to v.4
- Upgraded
Jblst
version to0.2.0
which adds ARMv8 arch support - Implemented sending goodbye message to peers on shutdown
- Reduced reorg noise during sync
- Updated metrics library from Besu to latest version
- Better handle P2P target peer bounds
- Fixed debug-tools db subcommands to support writing UInt64 as YAML
- Prevented fork choice head from going backwards when updating the chain
- Added support for the slashing protection interchange format via the
teku slashing-protection import
andteku slashing-protection export
subcommands - New REST APIs
/eth/v1/node/peers
- lists information about the currently connected peers/eth/v1/node/peers/:peer_id
- list information about a specific peer/eth/v1/node/health
- return the node health status via HTTP status codes. Useful for load balancers/eth/v1/node/syncing
- describe the node's current sync status/v1/node/version
has been moved to/eth/v1/node/version
and/v1/node/identity
to/eth/v1/node/identity
matching changes in the standard API spec
- Gossip messages produced by Teku no longer set the
from
,signature
orseqNo
fields - Enabled Gossipsub flood publishing to reduce propagation times for attestations and blocks produced locally
- Generated P2P private keys and Discovery v5 sequence numbers are now persisted across restarts
- Implemented unicode normalization process for validator keystore passwords
- Progress messages are now logged when loading large number of validator keys at startup
- The default network is now Medalla instead of Altona
- Avoid recalculating validator duties for reorgs that are not long enough to change the scheduling
- Validator duties are now calculated as soon as the genesis state is known instead of waiting for the actual genesis time.
- Added additional validation for deposit events received from the ETH1 node to flag when the ETH1 node has malfunctioned and missed some deposit log events
- Exit with a clear message when the ETH1 service is unable to start. Note that this only applies when the existing deposit data is invalid. Teku will continue retrying if the ETH1 node is not currently available.
- Operations (e.g. attestations, slashings etc) included in blocks are now readded to the pending pool if a reorg causes them to no longer be in the canonical chain
- Removed support for generating unencrypted keystores
- Discv5 now caches the hash of the local node to reduce load caused by significant numbers of incoming discovery messages
- Early access support for running the validator node independently of the beacon node (see #2683 for details). Please note this is not yet a recommended configuration and the CLI options and APIs used are subject to change.
- Gossip messages with null
from
,signature
orseqNo
fields are now rebroadcast with the fields still null instead of replaced by default values - Added validation to ensure that the uncompressed length of Gossip messages is within the possible ranges for a valid message for each gossip message type
- Fixed validation of compressed gossip message length which may incorrectly reject messages
- Fixed unhandled exception reported when an attestation received over gossip had an invalid checkpoint, specifying a block root from after the specified epoch.
- Improved validation of remote peer status
- Fix "AbstractRouter internal error on message control" errors when messages are received from peers before the outbound connection has been fully established
- Fixed errors logged when the ETH1 chain is shorter than the configured follow distance
- Explicitly fsync the RocksDB write ahead log files to disk on shutdown
- Fixed issue where environment variables named
TEKU_VERSION
orTEKU_HELP
would be incorrectly interpreted as specifying the--version
and--help
arguments, preventing Teku from starting - Avoid performing duplicate tasks to regenerate states in a particular corner case when the task can be rebased to start from the output of an already scheduled task
- Improve performance of cacheable task queue used for state regeneration
- Suppressed
ClosedChannelException
errors in logs
- Fix race condition when a block and its parents are received at around the same time which could cause the node to fall out of sync until it reverted to syncing mode to catch up
- Fix issue where attestations from blocks could be processed prior to the block they target being available resulting in
ProtoNode: Delta to be subtracted is greater than node weight
errors - Return a non-zero exit code from
validator register
subcommand when the user does not confirm the transaction
- Includes a significant number of bug fixes and performance improvements as a result of the recent issues on the Medalla testnet. See Consensys/teku#2596 for a full list of related issues.
- Support loading an entire directory of validator keys using
--validator-keys=<keyDir>:<passDir>
. Individual keystore and password files can also be specified using this new argument. - Major reduction in CPU and memory usage during periods of non-finalization by intelligently queuing and combining requests for beacon states and checkpoint states
- Fixed slow startup times during long periods of non-finalization. Non-finalized states are now periodically persisted to disk to avoid needing to replay large numbers of blocks to regenerate state.
- Reduced sync times during long periods of non-finalization by searching for a more recent common ancestor than the finalized checkpoint
- Added explicit UInt64 overflow and underflow protection
- Local signing is now multithreaded to better utilise CPU when running large numbers of validators
- Improved sync performance by continuing to update the target peer's status during the sync process
- Removed support for SecIO. Only the NOISE handshake is now supported.
- Provide a more userfriendly error message and exit if the P2P network port is already in use
- Added new metrics
validator_attestation_publication_delay
reports a histogram showing real time between when validations were due and when they were published to the network
- Fixed issue where attestations were created for the wrong head because fork choice had not yet been run. Results in a significant improvement in attestation inclusion rate.
- Fixed issue where invalid blocks were produced because they included attestations from forks that had different attestation committees
- Fixed issue where block production may be scheduled for the wrong slot due to calculating duties one epoch ahead
- Fixed issue where sync could appear to stall because fork choice data wasn't being updated during sync
- Fixed race condition when updating fork choice votes which could lead to
ProtoNode: Delta to be subtracted is greater than node weight
errors - Reduce
RejectedExecutionException
noise in logs when Teku is unable to keep up with incoming gossip messages. Other performance improvements should also improve the ability to keep up. - Fixed cases where states were regenerated without first checking if a cached version was available
- Fixed excessive memory usage in discovery when parsing an invalid RLP message
- Fixed issue where maximum cache sizes could be exceeded resulting in excessive memory usage
- Be more lenient in detecting peers that excessively throttle requests for blocks to better handle long stretches of empty slots
- Fixed error when validating gossiped attestations that point to old blocks
- Fixed netty thread blocked error messages from metrics by avoiding contention on key locks while retrieving metrics
- Fixed issue where sockets were left open when using an external signer
- Removed
--validators-unencrypted-key-files
option. This was only intended for early interop testing. Keys should be loaded from encrypted keystores.
- Add basic built-in slashing protection. Note that this only a last line of defence against bugs in the beacon node and will not prevent slashing if validator keys are run in multiple processes simultaneously.
- Validator duty logging is now enabled by default. It can be disabled with
--log-include-validator-duties-enabled=false
- Add updated Medalla bootnodes
- Updated to be compliant with beacon chain spec 0.12.2
- Prioritise more recent attestations when creating blocks as they pay higher rewards
- Refuse to start if the existing database is from a different network to the current configuration
- Added rate limiting for remote peers based on both number of blocks requested and total number of requests made
- Discovery now requires confirmation from multiple peers before updating the external IP reported by the node
- Improved interoperability with other clients: seqno field is now optional for libp2p messages
- REST API updates:
- Added genesis validator root to the
/node/fork
REST API - Added
/validator/aggregate_attestation
- Added
/validator/persistent_subnets_subscription
- Added
/validator/beacon_committee_subscription
- Added
/validator/aggregate_and_proofs
- Added
/node/pending_attestation_count
- Added genesis validator root to the
- Report the current peer count in "time to genesis"
- Added UInt64 overflow and underflow detection
- Improved performance of list shuffling operations
- Snappy compression is now enabled by default for custom networks. It can be disabled with
--p2p-snappy-enabled=false
- Fixed vector for DOS attack caused by not throttling libp2p response rate. (See libp2p/jvm-libp2p#127 and ethereum/public-attacknets#7 for futher details)
- Fixed issue that delayed publication of created attestations by a slot
- Fixed "Invalid attestation: Signature is invalid" errors caused by incorrect caching of committee selections (see Consensys/teku#2501 for further details)
- Fixed issues where validators failed to perform duties because the node incorrectly returned to syncing state
- Fixed
--logging
option to accept lowercasedebug
option. Renamed thedebug
subcommand to avoid the naming conflict - Avoid lock contention when reading in-memory storage metrics
- Reduced memory usage when loading large numbers of scrypt encoded keystores
- Increased read timeout for ETH1 requests to avoid repeatedly timing out when the ETH1 node is slow
- Reduced noise in logs from
ClosedChannelException
when a peer unexpected disconnects - Fixed
IllegalArgumentException
when RPC response code was greater than 127 - Fixed
IllegalArgumentException
when unexpectedly short discovery messages were received - Fixed very frequenet
InternalErrorException
when a peer disconnected during initial libp2p handshake - Fixed crash during shutdown caused by metrics accessing RocksDB after it was closed
- Restricted the maximum epoch value accepted by REST API to ensure it can be converted to a slot without overflowing uint64
- Fixed help text for
--p2p-discovery-bootnodes
- Added
medalla
network definition. As the genesis state is not yet known, an ETH1 endpoint must be specified when connecting to themedalla
testnet - Attestations are now created and published immediately after the block for the slot is imported, instead of waiting until 1/3rd of the way through the slot
- The Teku docker image has been upgraded to run Java 14
/beacon/state
REST API now supports astateRoot
parameter to request states by state root. This includes retrieving states for empty slots- Reduced gas limit and used current gas price reported by the ETH1 node when sending deposit transactions with the
validator
subcommands - Validator keys are now loaded in parallel to improve start up time
- Added a docker-compose configuration to quickly launch a 4-node local testnet
- Exposed additional metrics to report on RocksDB memory usage:
- storage_hot_estimated_table_readers_memory
- storage_finalized_estimated_table_readers_memory
- storage_hot_current_size_all_mem_tables
- storage_finalized_current_size_all_mem_tables
- Stricter req/resp message lengths are now enforced based on message content type
- Significant reductions in process resident memory. As this involved a configuration change for RocksDB the most significant reduction is achieved with a new database
- Fixed issue where Teku did not reconnect to peers after a network interruption
- Fixed issue where Teku may stop attempting to create new outbound peer connections
- Fixed incompatibility with deposits with public keys that could not be resolved to a G1 point
- Avoid disconnecting peers that do not return all requested blocks for a block by range request
- Reduced log level for a noisy message about duplicate peer connections
- External signing API now uses the data field instead of signingRoot field when making signing requests. Update Eth2Signer to ensure it is compatible with this change.
- Further reduced memory usage during periods of non-finalization. Checkpoint states can now be dropped from memory and regenerated on demand.
- Added additional metrics:
beacon_peer_count
tracks the number of connected peers which have completed chain validationnetwork_peer_chain_validation_attempts
tracks the number and status of peer chain validationsnetwork_peer_connection_attempt_count
tracks the number and status of outbound peer requests madenetwork_peer_reputation_cache_size
reports the size of the peer reputation cachebeacon_block_import_total
tracks the number of blocks importedbeacon_reorgs_total
tracks the number of times a different fork is chosen as the new chain headbeacon_published_attestation_total
tracks the total number of attestations sent to the gossip network
- External signing API now uses the data field instead of signingRoot field when making signing requests. Eth2Signer has been updated with this change.
- Enforced the 256 byte limit for Req/Resp error messages
- Blocks by range requests which exceed the maximum block request count are now rejected rather than partially processed as required by the P2P specification
- Improved tracking of peer reputation to avoid reattempting connections to peers we have previously rejected
- ForkChoice data is now persistent to disk, improving startup times especially during long periods of non-finalization
- Reduced the maximum number of blocks held in memory to reduce memory consumption during periods of non-finalization
- Increased the defaults for the target peer count range
- Actively manage peers to ensure we have at least some peers on each of the attestation subnets
- Maintain a minimum number of randomly selected peers, created via outbound connections to provide Sybil resistance
- Updated dependencies to latest versions
- Fixed issue where the validator produced attestations in the incorrect slot or committee resulting in
Produce invalid attestation
messages - Fixed an issue where attestations were not published to gossip when the node was not subscribed to the attestation subnet
- Fixed a number of unhandled exceptions in discv5
- Fixed an issue where discv5 may return node responses with a total greater than 5
- Fixed
Trying to reuse disposable LengthPrefixedPayloadDecoder
exception - Fixed an issue where peers were not disconnected when the initial status exchange failed
- Fixed
NullPointerException
when validating attestations which became too old during validation - Updated the
EXPOSE
ports listed in the Dockerfile to match the new defaults - Fixed time until genesis log message to handle time zones correctly
- Fixed
NoSuchElementException
when running a validator that was not in active status - Fixed
IndexOutOfBoundsException
when validating anIndexedAttestation
which included invalid validator indices
- Upgraded to v0.12.1 of the beacon chain spec. This is compatible with the Altona and Onyx testnets. For the Witti testnet use the 0.11.5 release.
--metrics-host-whitelist
CLI option has been renamed--metrics-host-allowlist
--rest-api-host-whitelist
CLI option has been renamed--rest-api-host-allowlist
- The Rest interface is now correctly set from
--rest-api-interface
, so will need to be correctly configured to ensure that hosts specified in the--rest-api-host-allowlist
are able to access that interface. Note that the default is to listen on localhost only. --rest-api-enabled
is now correctly used to determine whether to start the rest api. Ensure it is set if using the rest api. Note that the default is disabled.
- Support beacon chain spec v0.12.1.
- The
--network
option now includes support foraltona
andonyx
. The default network is nowaltona
- Disk space requirements have been very significantly reduced, particularly when using archive storage mode
- Finalized states are now stored in a separate database to non-finalized data. CLI options to store these under different directories are not yet available but will be considered in the future
- Snapshots of finalized states are stored periodically. The
data-storage-archive-frequency
option controls how frequent these snapshots are. More frequent snapshots result in greater disk usage but improve the performance of API requests that access finalized state. - Due to the way regenerated states are cached, iterating through slots in increasing order is significantly faster than iterating in decreasing order
- Teku now exposes RocksDB metrics to prometheus
- The genesis state root, block root and time are now printed at startup
- The time to genesis being reached is now output every 10 minutes, so that it's visibly apparent that teku is still running
- Requests made to ETH1 nodes now include the Teku version as the user agent
- Unstable options can now be listed with
teku -X
. These options may be changed at any time without warning and are generally not required, but can be useful in some situations. - Added a bash/zsh autocomplete script for Teku options and subcommands
- Reduced memory usage of state caches
- The list of validators being run is now printed to the console instead of just the log file
- Fixed a very common error message while handling received attestations from peers
- Reduced log level of
Connection reset
log messages fromNoiseXXSecureChannel
. - Fixed an issue where the last ETH1 block with deposits was processed twice when Teku was restarted pre-genesis. This resulted in an incorrect genesis state being generated.
- Update the private key message at startup to more clearly indicate it is referring to the ENR.
- The
--rest-api-interface
configuration attribute is now set on the HTTP server, it no longer listens on all interfaces. - The
--rest-api-enabled
flag will determine whether the http server actually starts and binds to a port now. - Fixed minor memory leak in storage
- Fixed potential crashes in RocksDB while shutting down Teku.
- Fixed an incompatibility with other clients due to Teku incorrectly expecting a length prefix for metadata requests
- When no advertised IP is specified and the p2p-interface is set to
0.0.0.0
or some other "any local" address, Teku will now resolve the IP for localhost instead of using the "any local" address in it's initial ENR.
- Validator may produce attestations in the incorrect slot or committee resulting in
Produced invalid attestation
messages (#2179)
- Reduced disk space required to store finalized data
- Improved performance when states need to be regenerated during periods of non-finalization
- Reduced on-heap memory usage
- Reduced startup time, particularly during periods of non-finalization
teku validator generate
no longer sends ETH1 deposit transactions. It only generates BLS keys for validators. The newteku validator generate-and-register
subcommand can be used to generate and register validators in one step
- Renamed
--metrics-host-whitelist
to--metrics-host-allowlist
and--rest-api-host-whitelist
to--rest-api-host-allowlist
- Added
/v1/node/version
and/v1/node/identity
REST endpoints. Anyone using/node/version
should switch to use the new endpoint, as/node/version
will be removed in a future release. - Added
--validators-graffiti="GRAFFITI"
command line option to allow graffiti to be used in block production. - The Teku version is now printed at startup
- Eth1 deposits now load on startup from the local database, then sync to the eth1 provider once loading is complete.
A hidden flag has been added to disable this functionality if it causes any issues -
--Xeth1-deposits-from-storage-enabled=false
. Local storage requirements will increase slightly due to the need to store each deposit block event from the eth1 provider so that it can be replayed during restarts. - Added a
teku debug db get-deposits
subcommand to load report the ETH1 deposits from the database. This is not intended for normal use but can be useful when debugging issues. - The directory structure created by
validator generate
has changed. All files are now generated in a single directory. Filename of withdrawal key is now named using the validator public key eg 814a1a6_validator.json 814a1a6_withdrawal.json - Validator voluntary exit gossip topics are now supported
- Proposer slashing gossip topics are now supported
- Attester slashing gossip topics are now supported
- Added support for Gossipsub 1.1
- Building from downloaded source packages rather than git checkout now works
- Memory requirements during non-finalized periods has been reduced, but further work is required in this area
- REST API documentation is automatically published to https://pegasyseng.github.io/teku/ as soon as changes are merged
- A memory dump is now captured if Teku encounters and out of memory error. By default these are
written to the current work directory but an alternate location can be specified by setting the
environment variable
TEKU_OPTS=-XX:HeapDumpPath=/path
This can be disabled by settingTEKU_OPTS=-XX:-HeapDumpOnOutOfMemoryError
- Treat attestations from verified blocks or produced in the validator as "seen" for gossip handling
- Added metrics to report the active and live validators for the current and previous epochs
(
beacon_previous_live_validators
,beacon_previous_active_validators
,beacon_current_live_validators
,beacon_current_active_validators
) - Added metrics to report on the in-memory store. Includes state cache hit/miss rates and the current number of states, blocks and checkpoint states held in the store.
- Optimised decompression of points in BLS
- Keystores generated with Teku are now compatible with Lighthouse
- Added additional logging during start up to provide progress information while hot states are being regenerated
- Integrated the new fork choice reference tests
- Fixed
StackOverflowException
from fork choiceget_ancestor
method during long periods of non-finalization - Fixed issue where ETH1 events could be missed immediately after startup resulting in an incorrect genesis state being generated
- Fixed issue where the beacon node was considered in-sync prior to finding any peers
- Recalculate validator duties when a block is imported which may affect duty scheudling. This occurs when blocks are delayed for more than epoch, for example due to a network outage
- Block production no longer fails if the Eth1Data vote in the new block is the last required vote for that Eth1Data and the new Eth1Data allows inclusion of new deposits
io.netty.handler.timeout.ReadTimeoutException
andio.netty.channel.ExtendedClosedChannelException
are no longer reported atERROR
level- Fix
attestation is invalid
error messages caused by a race condition verifying signatures - Support zero-roundtrip multistream negotiations in libp2p
- Fix missed assertion in fork choice which could lead to an
IndexOutOfBoundException
(not consensus affecting) - Clarified the "Minimum genesis time reached" message to be clearer that this only indicates that an ETH1 block satisfying the time criteria for genesis has been found. Additional validators may still be required before the genesis state is known.
- Fixed a number of error messages that were logged during Teku shutdown
- Respect the optional
epoch
paramter to the/beacon/validators
REST API endpoint - Fix "Command too long" error when running on Windows
- Fixed issue where exceptions may be reported by the uncaught exception handler instead of reported back to the original caller. This resulted in some RPC streams not being closed correctly.
- Fixed execessive use of CPU regenerating states to map slots to block roots while servicing beacon block by root RPC requests.
- The
--eth1-enabled
option removed. ETH1 will be enabled when an--eth1-endpoint
is provided and otherwise disabled. - CLI option
--validators-key-file
renamed to--validators-unencrypted-key-file
to avoid ambiguity from similar named CLI option--validators-key-files
which is used to specify encrypted validator keystore files. - Added CLI option
--rest-api-host-whitelist
which restricts access to the REST API. Defaults to [localhost, 127.0.0.1] - External signer API has been changed to not include the type being signed. Please ensure you update to the latest version of Eth2Signer
peer generate
andgenesis mock
subcommands now use lower case options consistently:--outputFile
is renamed--output-file
,--validatorCount
is renamed--validator-count
, and--genesisTime
is renamed--genesis-time
--network witti
includes the final configuration for the Witti testnet. The genesis state is included so an ETH1 endpoint is no longer required when connecting to Witti- Teku can now use Infura as the ETH1 endpoint
- ETH1 node is no longer required to maintain historic world state
- Added
--log-include-validator-duties-enabled
option to enable log messages when validator clients produce blocks, attestations or aggregates (defaults to off) - Improved logging of errors during execution of validator duties to be more informative, less noisy and set log levels more appropriately
- Teku will now exit when an
OutOfMemoryError
is encountered to allow tools like systemd to restart it - Added support for compiling from source using Java 14
- Improved error messages for a number of configuration errors
- Added protection for DNS rebinding attacks to the REST API via host whitelisting. Configure available hosts with the
--rest-api-host-whitelist
option (defaults to[localhost, 127.0.0.1]
) - Simplified API for external signers
- Added support for the
name
field in keystore files - Improved reporting of errors when using
BOTH
or default log destinations. Unhandled exceptions are now reported to the console but without stack traces. The full stack trace is available in the log file - Report (to log file) the list of validators being run at startup.
- Append to existing log files rather than rolling them. Avoids the potential for logs to be lost when rolling
- Improved selection of attestations to include in proposed blocks.
- Include attestations received via gossip
- Exclude attestations that have already been included in blocks
- Fix issue where attestations with an incompatible source were included, resulting in an invalid block
- Fixed a file descriptor leak caused by not correctly disconnecting duplicate peer connections
- Fixed race condition when the genesis event occurs which prevented the validator client from subscribing to persistent committee topics and retrieving the initial duties
- ETH1 chain processing recovers better after interruptions to the ETH1 node
- RPC
STATUS
messages now use the finalized checkpoint from the state, not the fork choice store. Fixes a networking incompatibility with Lighthouse when only genesis has been finalized - Fix incompatibility with Lighthouse in how RPC
METADATA
requests are made - Large RPC response chunks (> 90K) are now correctly processed
- Improved validation of received attestations
- Fixed a number of race conditions which could lead to inconsistent data being reported via the REST API
- Stopped logging the Javalin ascii art banner during startup
- The
peer generate
subcommand now provides a useful error message when the output file can not be written - The
peer generate
subcommand no longer silently overwrites an existing output file - Interop validators are no longer loaded when no validator keys were specified
- Fixed or suppressed a number of
ERROR
level log messages - Non-fatal errors are no longer reported at
FATAL
log level
- Block production may fail if the Eth1Data vote in the new block is the last required vote for that Eth1Data and the new Eth1Data allows inclusion of new deposits
io.netty.handler.timeout.ReadTimeoutException
andio.netty.channel.ExtendedClosedChannelException
reported atERROR
level.
- Updated to spec version v0.11.3.
- Improved recovery from network changes. Peers are now disconnected if they do not respond for a period ensuring upstream network interruptions are detected and peers can reconnect.
- The node's ENR is printed at startup even if the genesis state is not yet known. As per the beacon chain spec, the network ports are still not opened until the genesis state is known.
- OpenAPI schemas are now more compatible with code generating tools.
- Include block root in
/beacon/block
responses. - Improved error messages when invalid or incompatible CLI options are provided.
- Improved peer discovery by filtering out peers with incompatible
eth2
ENR fields. - Improved performance of BLS signature verification
- Updated to jvm-libp2p 0.4.0
- Fixed a deadlock condition which could cause block imports to silently stall.
- Initial sync now reaches chain head correctly even when the chain has not finalized for more than 10 epochs.
- Fixed
NullPointerException
andArrayIndexOutOfBoundException
intermittently encountered when importing blocks due to a concurrency issue in batch signature verification. /beacon/chainhead
reported incorrect slot and block root data.- Fixed a range of race conditions when loading chain data which could result in inconsistent views of the data or data not being found as it moved from recent to finalized storage.
- Significantly reduced the number of ERROR level log messages. Invalid network data or unexpectedly disconnected peers is now logged at DEBUG level.
- Storage system did not correctly prune blocks loaded from disk on startup when they became finalized.
- This release provides support for the Witti testnet via
--network witti
however the configuration for this testnet is not yet stable and will likely differ from the one currently used. - The Schlesi testnet has been abandoned. The
--network schlesi
option will be removed in a future release. - Memory usage grows signficantly during periods of non-finalization.
- Teku requires the ETH1 endpoint to keep historic world state available for at least the ETH1 voting period. This is typically more historic state than is kept when ETH1 nodes are pruning state. Workaround is to connect to an archive node or configure the node to preserve a greater period of historic world state.