Skip to main content

Optimized version of eth2spec

Project description

eth2fastspec

Eth2fastspec is an extension to eth2spec, utilizing the same types, configuration and dependencies, but optimized for transition speed.

Usage

A few new objects are introduced for precomputed data, speeding up the transition:

  • ShufflingEpoch: Committee shuffling information for a single epoch
  • EpochsContext: A collection of contextual information to re-use during an epoch, and rotating precomputed data of the next epoch into the current epoch. This includes shuffling, but also proposer information is available.
    • epochs_ctx.load_state(state) precomputes the data for the given state.
    • sync_pubkeys() checks the precomputed data against a state, and then adds missing pubkeys (strictly append-only however, not meant to fork this information)
    • copy() if a fork occurs, the context will have to be copied. To avoid copying the immutable parts, the copy() implements a specialized copy routine.
    • rotate_epochs() to re-use information, such as the shuffling of the next epoch, after transitioning into a new epoch, the rotate_epochs() is called. The transition function takes care of epoch-context data rotation.
  • FlatValidator: A copy of the regular Validator, but in a simple object instead of a tree-representation. For intermediate computation the remerkleable representation slows things down, so a regular object is used instead.
  • AttesterStatus: During the epoch transition, additional data is precomputed to avoid traversing any state a second time. Attestations are a big part of this, and each validator has an "status" to represent its precomputed participation.
  • EpochProcess: The AttesterStatus (and FlatValidator under status.validator) objects and EpochStakeSummary are tracked in the EpochProcess and made available as additional context in the epoch transition.
    • prepare_epoch_process_state(epochs_ctx, state) computes this data.

Method signatures in the spec changed to utilize precomputed data:

  • state_transition, process_slots, process_slot, process_epoch, every epoch sub-process, process_block, every block sub-process, and verify_block_signature all have an additional epochs_ctx (EpochsContext) argument.
  • every epoch sub-process has an additional process (EpochProcess) argument.

The argument order is generally: epochs_ctx, proces, state, remaining args.

from eth2spec.config.config_util import prepare_config
# Example: load a config, loading it in `eth2spec` as well as `eth2fastspec`, before loading the spec modules.
prepare_config("./lighthouse", "config")

import eth2fastspec as spec

state: spec.BeaconState = ...  # BeaconState.deserialize(stream, size), or some other source.
block: spec.SignedBeaconBlock = ...

epochs_ctx = spec.EpochsContext()
epochs_ctx.load_state(state)

spec.state_transition(epochs_ctx, state, block)

print(state.hash_tree_root().hex())

License

MIT, see LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eth2fastspec-0.0.5.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eth2fastspec-0.0.5-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file eth2fastspec-0.0.5.tar.gz.

File metadata

  • Download URL: eth2fastspec-0.0.5.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.3

File hashes

Hashes for eth2fastspec-0.0.5.tar.gz
Algorithm Hash digest
SHA256 1aceebe77a7cdc114981f508885d0891a8c2a32631b70b52cc406d865d182895
MD5 05ce315e853d72484f17c854a49c3169
BLAKE2b-256 d97bca8d304807bb19667b88759a467f22bd9381a22acd01f0d2bea640e45eb6

See more details on using hashes here.

File details

Details for the file eth2fastspec-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: eth2fastspec-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.8.3

File hashes

Hashes for eth2fastspec-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8d87b651ec96dc740fa2f188592b2d91d80c846377275213629485e353d5ed79
MD5 9c8acdb2b634d81206c40c9c2836da1c
BLAKE2b-256 64943dd0b05fb1340eea961567226654eb20f8d7cac20cd00de2f26640f19e49

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page