dadepo 03034ff77c Serve Lightclient related data via p2p (#4365)
* rename to LightClientBootstrap to keep consistent with spec

* updating types in preparation to start serving LightClientBootstrap via p2p resp/req

* should be able to serve LightClientBootstrap via p2p

* aligning types in preparation to be able to serve light client update via p2p

* added a comment to take care of error handling for light client bootstrap

* fix type error

* handle error when lighclientBootstrap cannot be returned

* Add ability to serve LightclientUpdate via p2p req/resp

* Aligning types in prep for being able to serve LightClientFinalityUpdate via p2p resp/req

* Added ability to serve LightClientFinalityUpdate via p2p req/resp

* Serving lightclientFinalityUpdate via p2p

* fix check types

* fix failing lightclient.test.ts test

* fix check-types check

* fix check-types check

* initial changes to have light_client_optimistic_update and light_client_optimistic_update available via the gossip domain

* adding placeholder for validating lightclient's gossip messages

* Added some validation to LightClientFinalityUpdate

* added more gossip validation

* fix check-types errors

* temp disable test

* Unit tests should now be passing

* explicitly binding this to function passed to the chain event emitter handler

* removed TODO comment after processing it

* undo removal of space

* LightClientOptimisticUpdate has no request

* update to return corrosponding ssz type to lightclient gossip type

* turn runtime error to compile time error

* extend gossipsub.test to include tests for LightClientOptimisticUpdate and LightClientFinalityUpdate

* Fix build failure

* Also unsubscribe lightclient's gossip global topics

* Logging topics for debugging in CI

* debugging in CI

* do not override zeroProtoBlock

* removing cli debugging changes

* run the network.test within altair

* split lightclient gossip validation to seperate files

* adding tests for validateLightClientOptimisticUpdate

* undo unintended changes

* Added Light Client Finality Update validation

* corrected type name to be aligned with spec

* extend onRequest with light client

* fix test

* properly setting signatureSlot

* wrapped getting onLightclientUpdate via res/req in a try catch

* Align light client objects naming with spec

* remove comment

* process some TODO

* Add ability to request lightClientBootstrap via Req/Resp

* added ability to request light client optimistic and finality update via req/res

* Add ability to request light client update message via Req/Res channel

* renabled skipped test

* process LightClientUpdate via SSE also

* undo unintended committed changes

* remove unnecessary promise resolve

* remove unnecessary promise resolve

* temp undo commit cd4b595 and c5ca43c

* Revert "temp undo commit cd4b595 and c5ca43c"

This reverts commit b44db38444.

* yield LightClientUpdate instead of LightClientUpdates

* removed unused type

* fix compilation in tests

* improve error handling for getOptimisticUpdate

* improve error handling for getFinalityUpdate

* avoid voiding promise. Fix lint errors

* Switch to debug level to prevent unnecessary PublishError.InsufficientPeers

* Adding back promises to api client functions

* resolved confilict/merged in unstable

* Move setting of latestForwardedFinalitySlot and latestForwardedOptimisticSlot from validation logic

* Use correct version for Res/Req

* Use correct version for Res/Req

* use one event stream

* removed redundant async

* Fix tests due to removal of async

* Fixed test

* Do not forward if local light client updates do not exist yet

* fix lightClientOptimisticUpdate.test and wait 1/3 slot before publishing

* Added tests for scenarios where validation does not fail for validateLightClientFinalityUpdate and validateLightClientOptimisticUpdate

* Remove redefinition of Root. Removed utility functions in test

* Passing in syncAggregate and signatureSlot instead of whole block

* Make getUpdates more flexible

* use strong equality check

* do not publish events if sync committee is below MIN_SYNC_COMMITTEE_PARTICIPANTS

* doGetUpdate => getUpdate. private => public

* Allow gaps in light client updates instead of throwing

* Address pr comments

* Remove light client latest cached slot

* Revert "Remove light client latest cached slot"

This reverts commit 50fe56f4ea.

* Use simple for loop

* Remove trailing slash from lightclient apis

* Fix finality update gossip validation

* fixing failing tests

* invalid with not matching local when no local update yet

* Limit REST getUpdates response to MAX_REQUEST_LIGHT_CLIENT_UPDATES

* unbind listeners on close

* removed the need to bind to this

* fix lint

* wait one third before publishing lc updates in on onSyncAggregate

* Revert "wait one third before publishing lc updates in on onSyncAggregate"

This reverts commit 003a2335f4.

* update waiting logic before publishing lc update to network

* making use of abort signal when sleeping

* only publish lc updates if node has atleast one sync committee member

* Remove stray comment

* Use strict equals

* More consistent naming

* Reorg reqresp methods

* Add light client server error

* Fix seconds to miliseconds typo

* Remove need for -1 default

* Remove unnecessary arrow function

* Allow to publish to zero peers

* Use spec name LightClientUpdatesByRange

* Clarify FINALITY_UPDATE_RECEIVED_TOO_EARLY math

* De-duplicate updateReceivedToEarly condition

* Update emit comments

* Fix typo in updateReceivedTooEarly

Co-authored-by: Cayman <caymannava@gmail.com>
Co-authored-by: dapplion <35266934+dapplion@users.noreply.github.com>
2022-10-28 19:08:12 +00:00
2022-01-31 11:49:02 -06:00
2020-03-30 20:24:46 -04:00
2022-09-17 09:30:34 -05:00
2022-05-24 16:12:55 -05:00
2021-03-07 12:50:58 +01:00
2021-09-02 09:36:11 +02:00
2022-05-24 16:12:55 -05:00
2020-09-03 13:17:58 +02:00
2022-10-19 09:46:10 -05:00
2022-05-24 16:12:55 -05:00
2022-06-28 21:35:58 +02:00

Lodestar Ethereum Consensus Implementation

GitHub release (latest by date) npm Docker Image Version (latest by date) Eth Consensus Spec v1.1.10 codecov Maintainability ES Version Node Version gitpoap badge

Lodestar is a TypeScript implementation of the Ethereum Consensus specification developed by ChainSafe Systems.

Getting started

Prerequisites

Developer Quickstart:
lerna bootstrap
yarn build
./lodestar --help

Architecture Overview

  • 📦 This mono-repository contains a suite of Ethereum Consensus packages.
  • ⚖️ The mono-repository is released under LGPLv3 license. Note, that the packages contain their own licenses.
Package Version License Docs Description
@lodestar/beacon-node npm License: LGPL v3 documentation 🚨 Beacon-chain client
@lodestar/validator npm License: LGPL v3 documentation 🏦 Validator client
@lodestar/light-client npm License documentation 🐦 Ethereum Light client
@lodestar/api npm License documentation 📋 REST Client for the Eth Beacon API
@chainsafe/lodestar npm License: LGPL v3 documentation 💻 Command-line tool for Lodestar
@lodestar/state-transition npm License: LGPL v3 documentation 🔎 Eth Consensus beacon-state transition
@lodestar/types npm License documentation 🗒️ Eth Consensus TypeScript and SSZ types
@lodestar/params npm License documentation 🕸️ Eth Consensus network parameters
@lodestar/utils npm License documentation 🧰 Miscellaneous utility functions used across Lodestar
@lodestar/config npm License documentation 🗒️ Eth Consensus types and params bundled together
@lodestar/spec-test-util npm License documentation 🧪 Test harness for Eth Consensus spec tests
@lodestar/db npm License documentation 💾 Read/write persistent Eth Consensus data
@lodestar/fork-choice npm License documentation 🍴 Beacon-chain fork choice

Contributors

Read our contributors document, submit an issue or talk to us on our Discord!

Meetings

Weekly contributor meetings are public and announced on Discord. Feel free to check out our meeting notes and documents on HackMD. Post-September 2021, meeting notes can be found on the Lodestar Wiki Page.

Donations

We are a local group of Toronto open-source developers. As such, all of our open-source work is funded by grants. We all take the time out of our hectic lives to contribute to the Ethereum ecosystem. If you want to donate, you can send us ETH at the following address: lodestar.chainsafe.eth

Description
No description provided
Readme 734 MiB
Languages
TypeScript 99%
JavaScript 0.6%
Shell 0.4%