Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serve Lightclient related data via p2p #4365

Merged
merged 127 commits into from
Oct 28, 2022
Merged

Conversation

dadepo
Copy link
Contributor

@dadepo dadepo commented Aug 5, 2022

Motivation

Adds ability for a lodestar full node to serve light client related data via p2p. Implements the Altair Light Client -- Networking spec

Description

  • Implement the Req/Resp domain
  • Implement the gossip domain: gossipsub
  • Process all TODOs
  • Add tests

Confirmed the new gossip messages get's published. Also confirmed that changes did not break existing lightclient which uses the REST endpoint and SSE:

➜  lodestar git:(dadepo/p2p-lightclient) ✗ ./lodestar lightclient --network goerli --logFile none --beaconApiUrl http://localhost:9596 --checkpointRoot 0x1946bf174cc3589b1b38a0bd8374732de84a3328bcf5f7258cb92ac0cabb6dad
Sep-30 19:42:37.140[]                 info: Head updated slot=4004312, root=0x89d90a7a40f3c93c1a094967e137f55dd39a15a6038acd186edee79995e9be64
Sep-30 19:42:49.011[]                 info: Head updated slot=4004313, root=0x18c097fdc52e2d206547072f3647b65e2d306dd852304c51b95a3611f4825312

Using a minimalist libp2p node with gossip enabled (see here), the optimistic update message got picked up:

➜  lightclient_consumer git:(master) ✗ node src/index.js /ip4/127.0.0.1/tcp/9000/p2p/16Uiu2HAky1xHb8Zn5WZFZ9UCrSNL1cmnsYMmBJigRKUXHKi1YFvD
started node with peer id: 12D3KooWSu7B4U8RTGhC2eCGyCnMpMec49DRED87kwfW2jMoeoiR
Connection established to: 16Uiu2HAky1xHb8Zn5WZFZ9UCrSNL1cmnsYMmBJigRKUXHKi1YFvD
Got binary data: 152,2,12,78,99,62,0,1,1,8,223,189,4,1,7,244,8,1,0,214,71,36,210,147,38,25,171,48,243,206,9,83,144,102,75,68,156,207,96,7,237,16,226,149,96,219,215,240,191,228,94,122,176,240,36,85,21,9,105,27,87,189,193,46,91,59,47,215,173,29,205,229,25,37,112,123,46,251,36,42,174,227,218,150,157,10,54,177,184,103,61,132,80,135,229,160,212,199,80,102,194,105,111,177,214,86,227,249,137,250,208,33,163,92,180,162,79,238,155,110,255,119,126,115,253,186,103,127,199,250,251,95,111,63,127,173,119,50,211,237,63,239,79,237,220,251,191,239,95,93,222,127,253,229,254,189,189,235,183,255,183,126,255,221,154,126,223,221,207,223,119,175,93,255,127,255,123,244,253,164,217,64,57,50,137,63,75,1,184,207,208,23,44,229,25,43,208,85,210,91,25,85,41,72,222,25,211,244,223,230,35,59,243,20,99,41,98,179,91,154,192,23,40,163,106,49,49,18,214,246,28,6,141,55,225,130,48,107,201,255,87,80,234,199,210,151,253,110,162,246,25,11,142,32,197,118,125,141,127,149,210,125,112,36,34,160,191,3,33,176,166,68,86,189,29,80,99,62,0,0,0,0,0 on topic /eth2/c2ce3aa8/light_client_optimistic_update/ssz_snappy

Consuming the light client related data will be implemented in #4618

Partially closes #3077

@dadepo dadepo changed the title Dadepo/p2p lightclient Serve Lightclient related data via p2p Aug 5, 2022
@github-actions
Copy link
Contributor

github-actions bot commented Aug 5, 2022

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 14fe5af Previous: 8c42768 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.6341 ms/op 2.5722 ms/op 1.02
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 91.954 us/op 91.514 us/op 1.00
BLS verify - blst-native 2.7142 ms/op 2.6963 ms/op 1.01
BLS verifyMultipleSignatures 3 - blst-native 5.7165 ms/op 5.5233 ms/op 1.03
BLS verifyMultipleSignatures 8 - blst-native 12.742 ms/op 12.043 ms/op 1.06
BLS verifyMultipleSignatures 32 - blst-native 46.412 ms/op 43.048 ms/op 1.08
BLS aggregatePubkeys 32 - blst-native 59.926 us/op 58.715 us/op 1.02
BLS aggregatePubkeys 128 - blst-native 243.27 us/op 237.87 us/op 1.02
getAttestationsForBlock 117.45 ms/op 108.99 ms/op 1.08
isKnown best case - 1 super set check 558.00 ns/op 540.00 ns/op 1.03
isKnown normal case - 2 super set checks 528.00 ns/op 498.00 ns/op 1.06
isKnown worse case - 16 super set checks 526.00 ns/op 516.00 ns/op 1.02
CheckpointStateCache - add get delete 11.773 us/op 11.460 us/op 1.03
validate gossip signedAggregateAndProof - struct 6.3230 ms/op 6.4928 ms/op 0.97
validate gossip attestation - struct 2.9998 ms/op 3.0286 ms/op 0.99
pickEth1Vote - no votes 2.5921 ms/op 2.7734 ms/op 0.93
pickEth1Vote - max votes 24.336 ms/op 25.062 ms/op 0.97
pickEth1Vote - Eth1Data hashTreeRoot value x2048 15.186 ms/op 15.080 ms/op 1.01
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 27.027 ms/op 24.842 ms/op 1.09
pickEth1Vote - Eth1Data fastSerialize value x2048 1.8384 ms/op 1.9213 ms/op 0.96
pickEth1Vote - Eth1Data fastSerialize tree x2048 17.256 ms/op 15.510 ms/op 1.11
bytes32 toHexString 1.3480 us/op 1.3380 us/op 1.01
bytes32 Buffer.toString(hex) 878.00 ns/op 831.00 ns/op 1.06
bytes32 Buffer.toString(hex) from Uint8Array 1.2380 us/op 1.1130 us/op 1.11
bytes32 Buffer.toString(hex) + 0x 905.00 ns/op 823.00 ns/op 1.10
Object access 1 prop 0.46800 ns/op 0.46500 ns/op 1.01
Map access 1 prop 0.34900 ns/op 0.33800 ns/op 1.03
Object get x1000 16.803 ns/op 16.552 ns/op 1.02
Map get x1000 1.1500 ns/op 0.95600 ns/op 1.20
Object set x1000 132.82 ns/op 124.38 ns/op 1.07
Map set x1000 90.661 ns/op 81.756 ns/op 1.11
Return object 10000 times 0.43670 ns/op 0.43100 ns/op 1.01
Throw Error 10000 times 8.5847 us/op 8.6040 us/op 1.00
fastMsgIdFn sha256 / 200 bytes 5.7220 us/op 5.5090 us/op 1.04
fastMsgIdFn h32 xxhash / 200 bytes 677.00 ns/op 636.00 ns/op 1.06
fastMsgIdFn h64 xxhash / 200 bytes 978.00 ns/op 816.00 ns/op 1.20
fastMsgIdFn sha256 / 1000 bytes 18.088 us/op 16.926 us/op 1.07
fastMsgIdFn h32 xxhash / 1000 bytes 808.00 ns/op 795.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 1.0530 us/op 974.00 ns/op 1.08
fastMsgIdFn sha256 / 10000 bytes 153.18 us/op 156.56 us/op 0.98
fastMsgIdFn h32 xxhash / 10000 bytes 2.8060 us/op 2.8180 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 2.2400 us/op 2.1590 us/op 1.04
enrSubnets - fastDeserialize 64 bits 3.4760 us/op 3.3220 us/op 1.05
enrSubnets - ssz BitVector 64 bits 958.00 ns/op 872.00 ns/op 1.10
enrSubnets - fastDeserialize 4 bits 480.00 ns/op 459.00 ns/op 1.05
enrSubnets - ssz BitVector 4 bits 977.00 ns/op 878.00 ns/op 1.11
prioritizePeers score -10:0 att 32-0.1 sync 2-0 120.10 us/op 117.21 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 156.86 us/op 167.35 us/op 0.94
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 286.79 us/op 298.77 us/op 0.96
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 641.55 us/op 530.32 us/op 1.21
prioritizePeers score 0:0 att 64-1 sync 4-1 673.60 us/op 611.81 us/op 1.10
RateTracker 1000000 limit, 1 obj count per request 222.64 ns/op 208.85 ns/op 1.07
RateTracker 1000000 limit, 2 obj count per request 168.71 ns/op 154.52 ns/op 1.09
RateTracker 1000000 limit, 4 obj count per request 143.08 ns/op 135.51 ns/op 1.06
RateTracker 1000000 limit, 8 obj count per request 127.82 ns/op 116.59 ns/op 1.10
RateTracker with prune 6.0670 us/op 5.4270 us/op 1.12
array of 16000 items push then shift 5.5598 us/op 5.3097 us/op 1.05
LinkedList of 16000 items push then shift 19.176 ns/op 19.370 ns/op 0.99
array of 16000 items push then pop 265.38 ns/op 255.15 ns/op 1.04
LinkedList of 16000 items push then pop 17.861 ns/op 18.848 ns/op 0.95
array of 24000 items push then shift 7.8918 us/op 8.1526 us/op 0.97
LinkedList of 24000 items push then shift 19.486 ns/op 20.219 ns/op 0.96
array of 24000 items push then pop 247.40 ns/op 237.24 ns/op 1.04
LinkedList of 24000 items push then pop 18.946 ns/op 18.291 ns/op 1.04
intersect bitArray bitLen 8 13.298 ns/op 12.537 ns/op 1.06
intersect array and set length 8 304.69 ns/op 195.22 ns/op 1.56
intersect bitArray bitLen 128 72.744 ns/op 73.475 ns/op 0.99
intersect array and set length 128 3.8854 us/op 2.4773 us/op 1.57
Buffer.concat 32 items 2.2670 ns/op 2.8040 ns/op 0.81
pass gossip attestations to forkchoice per slot 7.5879 ms/op 4.7125 ms/op 1.61
computeDeltas 5.7194 ms/op 5.7426 ms/op 1.00
computeProposerBoostScoreFromBalances 901.94 us/op 889.62 us/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 5.8955 ms/op 5.4452 ms/op 1.08
altair processAttestation - 250000 vs - 7PWei worstcase 8.0956 ms/op 7.9054 ms/op 1.02
altair processAttestation - setStatus - 1/6 committees join 248.11 us/op 243.19 us/op 1.02
altair processAttestation - setStatus - 1/3 committees join 482.96 us/op 463.77 us/op 1.04
altair processAttestation - setStatus - 1/2 committees join 708.42 us/op 652.01 us/op 1.09
altair processAttestation - setStatus - 2/3 committees join 953.75 us/op 881.22 us/op 1.08
altair processAttestation - setStatus - 4/5 committees join 1.2643 ms/op 1.2375 ms/op 1.02
altair processAttestation - setStatus - 100% committees join 1.5046 ms/op 1.4769 ms/op 1.02
altair processBlock - 250000 vs - 7PWei normalcase 30.944 ms/op 30.777 ms/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase hashState 42.746 ms/op 42.658 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase 116.38 ms/op 101.26 ms/op 1.15
altair processBlock - 250000 vs - 7PWei worstcase hashState 125.39 ms/op 123.75 ms/op 1.01
phase0 processBlock - 250000 vs - 7PWei normalcase 4.7861 ms/op 4.3831 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei worstcase 65.823 ms/op 66.476 ms/op 0.99
altair processEth1Data - 250000 vs - 7PWei normalcase 1.2114 ms/op 1.1691 ms/op 1.04
Tree 40 250000 create 1.1197 s/op 1.0656 s/op 1.05
Tree 40 250000 get(125000) 329.84 ns/op 329.37 ns/op 1.00
Tree 40 250000 set(125000) 3.6624 us/op 3.6032 us/op 1.02
Tree 40 250000 toArray() 37.576 ms/op 36.102 ms/op 1.04
Tree 40 250000 iterate all - toArray() + loop 37.081 ms/op 36.555 ms/op 1.01
Tree 40 250000 iterate all - get(i) 140.19 ms/op 133.38 ms/op 1.05
MutableVector 250000 create 21.821 ms/op 17.231 ms/op 1.27
MutableVector 250000 get(125000) 18.085 ns/op 14.524 ns/op 1.25
MutableVector 250000 set(125000) 987.92 ns/op 833.93 ns/op 1.18
MutableVector 250000 toArray() 7.8993 ms/op 7.5056 ms/op 1.05
MutableVector 250000 iterate all - toArray() + loop 8.1104 ms/op 7.8696 ms/op 1.03
MutableVector 250000 iterate all - get(i) 3.9429 ms/op 3.4922 ms/op 1.13
Array 250000 create 7.6819 ms/op 7.1951 ms/op 1.07
Array 250000 clone - spread 4.6556 ms/op 4.1328 ms/op 1.13
Array 250000 get(125000) 2.2290 ns/op 1.7660 ns/op 1.26
Array 250000 set(125000) 2.0810 ns/op 1.8590 ns/op 1.12
Array 250000 iterate all - loop 150.91 us/op 147.37 us/op 1.02
effectiveBalanceIncrements clone Uint8Array 300000 242.48 us/op 112.81 us/op 2.15
effectiveBalanceIncrements clone MutableVector 300000 764.00 ns/op 1.3140 us/op 0.58
effectiveBalanceIncrements rw all Uint8Array 300000 307.38 us/op 299.28 us/op 1.03
effectiveBalanceIncrements rw all MutableVector 300000 245.03 ms/op 278.10 ms/op 0.88
phase0 afterProcessEpoch - 250000 vs - 7PWei 227.89 ms/op 208.82 ms/op 1.09
phase0 beforeProcessEpoch - 250000 vs - 7PWei 79.850 ms/op 109.91 ms/op 0.73
altair processEpoch - mainnet_e81889 705.06 ms/op 661.70 ms/op 1.07
mainnet_e81889 - altair beforeProcessEpoch 103.80 ms/op 191.48 ms/op 0.54
mainnet_e81889 - altair processJustificationAndFinalization 61.400 us/op 64.915 us/op 0.95
mainnet_e81889 - altair processInactivityUpdates 11.434 ms/op 11.732 ms/op 0.97
mainnet_e81889 - altair processRewardsAndPenalties 193.18 ms/op 158.64 ms/op 1.22
mainnet_e81889 - altair processRegistryUpdates 13.372 us/op 14.225 us/op 0.94
mainnet_e81889 - altair processSlashings 3.8850 us/op 4.1190 us/op 0.94
mainnet_e81889 - altair processEth1DataReset 3.9370 us/op 4.5550 us/op 0.86
mainnet_e81889 - altair processEffectiveBalanceUpdates 4.0599 ms/op 3.6279 ms/op 1.12
mainnet_e81889 - altair processSlashingsReset 25.799 us/op 28.633 us/op 0.90
mainnet_e81889 - altair processRandaoMixesReset 22.105 us/op 23.504 us/op 0.94
mainnet_e81889 - altair processHistoricalRootsUpdate 4.1950 us/op 4.0650 us/op 1.03
mainnet_e81889 - altair processParticipationFlagUpdates 14.010 us/op 14.562 us/op 0.96
mainnet_e81889 - altair processSyncCommitteeUpdates 3.0550 us/op 3.0180 us/op 1.01
mainnet_e81889 - altair afterProcessEpoch 224.59 ms/op 219.48 ms/op 1.02
phase0 processEpoch - mainnet_e58758 649.20 ms/op 703.14 ms/op 0.92
mainnet_e58758 - phase0 beforeProcessEpoch 292.91 ms/op 240.19 ms/op 1.22
mainnet_e58758 - phase0 processJustificationAndFinalization 56.896 us/op 59.044 us/op 0.96
mainnet_e58758 - phase0 processRewardsAndPenalties 160.37 ms/op 91.668 ms/op 1.75
mainnet_e58758 - phase0 processRegistryUpdates 31.783 us/op 33.792 us/op 0.94
mainnet_e58758 - phase0 processSlashings 3.2310 us/op 3.0780 us/op 1.05
mainnet_e58758 - phase0 processEth1DataReset 3.4490 us/op 3.2740 us/op 1.05
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.9000 ms/op 2.3021 ms/op 1.26
mainnet_e58758 - phase0 processSlashingsReset 14.298 us/op 13.976 us/op 1.02
mainnet_e58758 - phase0 processRandaoMixesReset 22.652 us/op 23.739 us/op 0.95
mainnet_e58758 - phase0 processHistoricalRootsUpdate 3.7930 us/op 4.1320 us/op 0.92
mainnet_e58758 - phase0 processParticipationRecordUpdates 23.801 us/op 22.724 us/op 1.05
mainnet_e58758 - phase0 afterProcessEpoch 184.64 ms/op 200.60 ms/op 0.92
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.7055 ms/op 2.6678 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.8079 ms/op 2.8703 ms/op 0.98
altair processInactivityUpdates - 250000 normalcase 53.195 ms/op 49.645 ms/op 1.07
altair processInactivityUpdates - 250000 worstcase 63.128 ms/op 59.952 ms/op 1.05
phase0 processRegistryUpdates - 250000 normalcase 25.073 us/op 27.649 us/op 0.91
phase0 processRegistryUpdates - 250000 badcase_full_deposits 527.98 us/op 517.30 us/op 1.02
phase0 processRegistryUpdates - 250000 worstcase 0.5 251.94 ms/op 239.94 ms/op 1.05
altair processRewardsAndPenalties - 250000 normalcase 145.11 ms/op 96.640 ms/op 1.50
altair processRewardsAndPenalties - 250000 worstcase 96.165 ms/op 142.80 ms/op 0.67
phase0 getAttestationDeltas - 250000 normalcase 16.196 ms/op 14.457 ms/op 1.12
phase0 getAttestationDeltas - 250000 worstcase 16.860 ms/op 14.549 ms/op 1.16
phase0 processSlashings - 250000 worstcase 6.6987 ms/op 6.6586 ms/op 1.01
altair processSyncCommitteeUpdates - 250000 379.78 ms/op 335.55 ms/op 1.13
BeaconState.hashTreeRoot - No change 635.00 ns/op 592.00 ns/op 1.07
BeaconState.hashTreeRoot - 1 full validator 93.768 us/op 83.086 us/op 1.13
BeaconState.hashTreeRoot - 32 full validator 873.75 us/op 842.07 us/op 1.04
BeaconState.hashTreeRoot - 512 full validator 11.297 ms/op 7.7046 ms/op 1.47
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 107.24 us/op 112.89 us/op 0.95
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.6324 ms/op 1.6422 ms/op 0.99
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 20.783 ms/op 20.500 ms/op 1.01
BeaconState.hashTreeRoot - 1 balances 84.287 us/op 80.678 us/op 1.04
BeaconState.hashTreeRoot - 32 balances 780.44 us/op 723.57 us/op 1.08
BeaconState.hashTreeRoot - 512 balances 7.9537 ms/op 7.4913 ms/op 1.06
BeaconState.hashTreeRoot - 250000 balances 108.16 ms/op 104.63 ms/op 1.03
aggregationBits - 2048 els - zipIndexesInBitList 50.742 us/op 33.214 us/op 1.53
regular array get 100000 times 59.506 us/op 58.332 us/op 1.02
wrappedArray get 100000 times 58.441 us/op 58.114 us/op 1.01
arrayWithProxy get 100000 times 35.397 ms/op 34.926 ms/op 1.01
ssz.Root.equals 652.00 ns/op 549.00 ns/op 1.19
byteArrayEquals 661.00 ns/op 554.00 ns/op 1.19
shuffle list - 16384 els 13.271 ms/op 12.614 ms/op 1.05
shuffle list - 250000 els 187.89 ms/op 181.69 ms/op 1.03
processSlot - 1 slots 21.032 us/op 18.466 us/op 1.14
processSlot - 32 slots 2.3468 ms/op 2.4889 ms/op 0.94
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 489.96 us/op 461.59 us/op 1.06
getCommitteeAssignments - req 1 vs - 250000 vc 5.8647 ms/op 5.7143 ms/op 1.03
getCommitteeAssignments - req 100 vs - 250000 vc 7.8788 ms/op 8.2094 ms/op 0.96
getCommitteeAssignments - req 1000 vs - 250000 vc 8.6442 ms/op 8.6994 ms/op 0.99
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 9.4300 ns/op 11.220 ns/op 0.84
state getBlockRootAtSlot - 250000 vs - 7PWei 1.4213 us/op 1.3930 us/op 1.02
computeProposers - vc 250000 22.947 ms/op 20.327 ms/op 1.13
computeEpochShuffling - vc 250000 191.33 ms/op 187.84 ms/op 1.02
getNextSyncCommittee - vc 250000 371.14 ms/op 353.16 ms/op 1.05

by benchmarkbot/action

Copy link
Member

@wemeetagain wemeetagain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know its not quite ready, just giving this a light pass
Looks good so far

packages/beacon-node/src/chain/lightClient/index.ts Outdated Show resolved Hide resolved
requestBody: altair.LightClientUpdateByRangeRequest,
chain: IBeaconChain
): AsyncIterable<altair.LightClientUpdate[]> {
yield await chain.lightClientServer.getUpdates(requestBody.startPeriod, requestBody.count);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be wrapped in try/catch?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I intentionally left out the try/catch since the spec did not explicitly say RESOURCE_UNAVAILABLE should be returned as it did in the other cases. I will look into this again, and if need be, make a PR to the spec.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it makes sense to have RESOURCE_UNAVAILABLE response, may be the spec just missed it

Copy link
Contributor Author

@dadepo dadepo Sep 21, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wrapped in try/catch and made a PR to update the spec here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternative is to just return an empty result, or omit the periods that are unavailable, same as for beaconBlocksByRange / beaconBlocksByRoot.

packages/beacon-node/src/network/reqresp/request/index.ts Outdated Show resolved Hide resolved
packages/beacon-node/src/network/reqresp/types.ts Outdated Show resolved Hide resolved
packages/beacon-node/src/network/reqresp/types.ts Outdated Show resolved Hide resolved
packages/types/src/altair/sszTypes.ts Outdated Show resolved Hide resolved
private waitOneThirdOfSlot = async (slot: number): Promise<void> => {
const minPubTime = computeTimeAtSlot(this.config, slot, this.chain.genesisTime) + this.config.SECONDS_PER_SLOT / 3;
const waitTime = minPubTime - Date.now() / 1000;
await sleep(waitTime, this.signal);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sleep takes miliseconds, looks like it's passing seconds which would cause the sleep to wait 1000 times less than expected. Fixing on a commit locally, will push soon

@wemeetagain
Copy link
Member

I pushed some commits on top addressing some unaddressed comments to help expedite this.

Copy link
Contributor

@dapplion dapplion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGMT, some comments for future work:

@dapplion dapplion enabled auto-merge (squash) October 28, 2022 18:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Light client integration into p2p network
6 participants