-
-
Notifications
You must be signed in to change notification settings - Fork 330
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 b44db38. * 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 50fe56f. * 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 003a233. * 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>
- Loading branch information
1 parent
8c42768
commit 03034ff
Showing
50 changed files
with
1,240 additions
and
182 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import {LodestarError} from "@lodestar/utils"; | ||
import {GossipActionError} from "./gossipValidation.js"; | ||
|
||
export enum LightClientErrorCode { | ||
FINALITY_UPDATE_ALREADY_FORWARDED = "FINALITY_UPDATE_ALREADY_FORWARDED", | ||
OPTIMISTIC_UPDATE_ALREADY_FORWARDED = "OPTIMISTIC_UPDATE_ALREADY_FORWARDED", | ||
FINALITY_UPDATE_RECEIVED_TOO_EARLY = "FINALITY_UPDATE_RECEIVED_TOO_EARLY", | ||
OPTIMISTIC_UPDATE_RECEIVED_TOO_EARLY = "OPTIMISTIC_UPDATE_RECEIVED_TOO_EARLY", | ||
FINALITY_UPDATE_NOT_MATCHING_LOCAL = "FINALITY_UPDATE_NOT_MATCHING_LOCAL", | ||
OPTIMISTIC_UPDATE_NOT_MATCHING_LOCAL = "OPTIMISTIC_UPDATE_NOT_MATCHING_LOCAL", | ||
} | ||
export type LightClientErrorType = | ||
| {code: LightClientErrorCode.FINALITY_UPDATE_ALREADY_FORWARDED} | ||
| {code: LightClientErrorCode.OPTIMISTIC_UPDATE_ALREADY_FORWARDED} | ||
| {code: LightClientErrorCode.FINALITY_UPDATE_RECEIVED_TOO_EARLY} | ||
| {code: LightClientErrorCode.OPTIMISTIC_UPDATE_RECEIVED_TOO_EARLY} | ||
| {code: LightClientErrorCode.FINALITY_UPDATE_NOT_MATCHING_LOCAL} | ||
| {code: LightClientErrorCode.OPTIMISTIC_UPDATE_NOT_MATCHING_LOCAL}; | ||
|
||
export class LightClientError extends GossipActionError<LightClientErrorType> {} | ||
|
||
// Errors for the light client server | ||
|
||
export enum LightClientServerErrorCode { | ||
RESOURCE_UNAVAILABLE = "RESOURCE_UNAVALIABLE", | ||
} | ||
|
||
export type LightClientServerErrorType = {code: LightClientServerErrorCode.RESOURCE_UNAVAILABLE}; | ||
|
||
export class LightClientServerError extends LodestarError<LightClientServerErrorType> {} |
Oops, something went wrong.