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

Fix the zero finalized light client header upgrade #5139

Merged
merged 3 commits into from
Feb 13, 2023

Conversation

g11tech
Copy link
Contributor

@g11tech g11tech commented Feb 13, 2023

Starting on a checkpoint sync, when the finalized header for the light client update store will be zero (till a finalization happens post startup), the upgrade would fail as zero finalized header's slot (use to upgrade from) is 0 and would result in such kind of error as reported by @philknows

image

However the upgrade neednot be applied as zero finalized already belongs to the highest fork, this PR fixes the same

@g11tech g11tech requested a review from a team as a code owner February 13, 2023 07:54
@g11tech g11tech enabled auto-merge (squash) February 13, 2023 07:55
@github-actions
Copy link
Contributor

github-actions bot commented Feb 13, 2023

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 4008c76 Previous: 3236de8 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 993.52 us/op 912.83 us/op 1.09
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 47.608 us/op 62.338 us/op 0.76
BLS verify - blst-native 1.2060 ms/op 1.2409 ms/op 0.97
BLS verifyMultipleSignatures 3 - blst-native 2.4330 ms/op 2.5221 ms/op 0.96
BLS verifyMultipleSignatures 8 - blst-native 5.1982 ms/op 5.4319 ms/op 0.96
BLS verifyMultipleSignatures 32 - blst-native 18.877 ms/op 19.518 ms/op 0.97
BLS aggregatePubkeys 32 - blst-native 25.542 us/op 26.201 us/op 0.97
BLS aggregatePubkeys 128 - blst-native 97.577 us/op 101.41 us/op 0.96
getAttestationsForBlock 51.751 ms/op 64.442 ms/op 0.80
isKnown best case - 1 super set check 267.00 ns/op 284.00 ns/op 0.94
isKnown normal case - 2 super set checks 258.00 ns/op 280.00 ns/op 0.92
isKnown worse case - 16 super set checks 243.00 ns/op 278.00 ns/op 0.87
CheckpointStateCache - add get delete 5.1460 us/op 6.2080 us/op 0.83
validate gossip signedAggregateAndProof - struct 2.6329 ms/op 2.8164 ms/op 0.93
validate gossip attestation - struct 1.2717 ms/op 1.3402 ms/op 0.95
pickEth1Vote - no votes 1.1810 ms/op 1.3875 ms/op 0.85
pickEth1Vote - max votes 8.9894 ms/op 13.734 ms/op 0.65
pickEth1Vote - Eth1Data hashTreeRoot value x2048 8.7631 ms/op 9.7717 ms/op 0.90
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 15.715 ms/op 16.824 ms/op 0.93
pickEth1Vote - Eth1Data fastSerialize value x2048 687.57 us/op 760.44 us/op 0.90
pickEth1Vote - Eth1Data fastSerialize tree x2048 7.8027 ms/op 7.5644 ms/op 1.03
bytes32 toHexString 552.00 ns/op 734.00 ns/op 0.75
bytes32 Buffer.toString(hex) 403.00 ns/op 414.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 625.00 ns/op 623.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 410.00 ns/op 421.00 ns/op 0.97
Object access 1 prop 0.19300 ns/op 0.20800 ns/op 0.93
Map access 1 prop 0.16300 ns/op 0.17300 ns/op 0.94
Object get x1000 6.5960 ns/op 6.5690 ns/op 1.00
Map get x1000 0.57800 ns/op 0.68800 ns/op 0.84
Object set x1000 59.644 ns/op 74.201 ns/op 0.80
Map set x1000 50.509 ns/op 58.889 ns/op 0.86
Return object 10000 times 0.24360 ns/op 0.24700 ns/op 0.99
Throw Error 10000 times 4.2410 us/op 4.2262 us/op 1.00
fastMsgIdFn sha256 / 200 bytes 3.5360 us/op 3.6330 us/op 0.97
fastMsgIdFn h32 xxhash / 200 bytes 321.00 ns/op 319.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 453.00 ns/op 464.00 ns/op 0.98
fastMsgIdFn sha256 / 1000 bytes 11.842 us/op 11.888 us/op 1.00
fastMsgIdFn h32 xxhash / 1000 bytes 445.00 ns/op 455.00 ns/op 0.98
fastMsgIdFn h64 xxhash / 1000 bytes 524.00 ns/op 535.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 104.04 us/op 105.43 us/op 0.99
fastMsgIdFn h32 xxhash / 10000 bytes 1.9670 us/op 2.0080 us/op 0.98
fastMsgIdFn h64 xxhash / 10000 bytes 1.4390 us/op 1.4740 us/op 0.98
enrSubnets - fastDeserialize 64 bits 1.3830 us/op 1.7260 us/op 0.80
enrSubnets - ssz BitVector 64 bits 525.00 ns/op 603.00 ns/op 0.87
enrSubnets - fastDeserialize 4 bits 193.00 ns/op 210.00 ns/op 0.92
enrSubnets - ssz BitVector 4 bits 584.00 ns/op 616.00 ns/op 0.95
prioritizePeers score -10:0 att 32-0.1 sync 2-0 100.52 us/op 98.350 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 129.60 us/op 136.98 us/op 0.95
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 186.24 us/op 213.10 us/op 0.87
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 336.43 us/op 381.64 us/op 0.88
prioritizePeers score 0:0 att 64-1 sync 4-1 394.29 us/op 446.46 us/op 0.88
array of 16000 items push then shift 1.6572 us/op 1.6691 us/op 0.99
LinkedList of 16000 items push then shift 8.6850 ns/op 9.5670 ns/op 0.91
array of 16000 items push then pop 85.431 ns/op 116.58 ns/op 0.73
LinkedList of 16000 items push then pop 8.5020 ns/op 9.2750 ns/op 0.92
array of 24000 items push then shift 2.3704 us/op 2.3996 us/op 0.99
LinkedList of 24000 items push then shift 8.7860 ns/op 9.9180 ns/op 0.89
array of 24000 items push then pop 77.971 ns/op 87.205 ns/op 0.89
LinkedList of 24000 items push then pop 8.4750 ns/op 9.0400 ns/op 0.94
intersect bitArray bitLen 8 13.216 ns/op 13.485 ns/op 0.98
intersect array and set length 8 75.109 ns/op 99.203 ns/op 0.76
intersect bitArray bitLen 128 43.894 ns/op 45.167 ns/op 0.97
intersect array and set length 128 1.1364 us/op 1.3024 us/op 0.87
Buffer.concat 32 items 2.7310 us/op 2.7770 us/op 0.98
Uint8Array.set 32 items 2.7630 us/op 2.4850 us/op 1.11
pass gossip attestations to forkchoice per slot 2.3450 ms/op 5.0278 ms/op 0.47
computeDeltas 3.0228 ms/op 2.9102 ms/op 1.04
computeProposerBoostScoreFromBalances 1.7803 ms/op 1.8014 ms/op 0.99
altair processAttestation - 250000 vs - 7PWei normalcase 2.4636 ms/op 2.5543 ms/op 0.96
altair processAttestation - 250000 vs - 7PWei worstcase 4.4794 ms/op 3.6613 ms/op 1.22
altair processAttestation - setStatus - 1/6 committees join 151.66 us/op 138.71 us/op 1.09
altair processAttestation - setStatus - 1/3 committees join 287.31 us/op 275.63 us/op 1.04
altair processAttestation - setStatus - 1/2 committees join 382.11 us/op 370.56 us/op 1.03
altair processAttestation - setStatus - 2/3 committees join 470.08 us/op 458.06 us/op 1.03
altair processAttestation - setStatus - 4/5 committees join 663.82 us/op 634.76 us/op 1.05
altair processAttestation - setStatus - 100% committees join 766.32 us/op 760.29 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 16.621 ms/op 20.566 ms/op 0.81
altair processBlock - 250000 vs - 7PWei normalcase hashState 27.039 ms/op 25.785 ms/op 1.05
altair processBlock - 250000 vs - 7PWei worstcase 54.442 ms/op 52.784 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase hashState 70.484 ms/op 66.446 ms/op 1.06
phase0 processBlock - 250000 vs - 7PWei normalcase 2.1380 ms/op 1.9661 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei worstcase 28.787 ms/op 27.303 ms/op 1.05
altair processEth1Data - 250000 vs - 7PWei normalcase 511.43 us/op 468.46 us/op 1.09
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 8.8540 us/op 6.7740 us/op 1.31
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 19.332 us/op 19.497 us/op 0.99
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 8.6050 us/op 8.5020 us/op 1.01
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 7.3530 us/op 7.3780 us/op 1.00
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 85.259 us/op 74.410 us/op 1.15
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 623.05 us/op 610.80 us/op 1.02
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 16384 854.06 us/op 905.12 us/op 0.94
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 16384 870.89 us/op 823.89 us/op 1.06
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 16384 2.3259 ms/op 2.1185 ms/op 1.10
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 16384 1.7478 ms/op 1.4510 ms/op 1.20
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 16384 4.0761 ms/op 3.5278 ms/op 1.16
Tree 40 250000 create 352.00 ms/op 312.43 ms/op 1.13
Tree 40 250000 get(125000) 191.59 ns/op 169.14 ns/op 1.13
Tree 40 250000 set(125000) 1.0370 us/op 806.27 ns/op 1.29
Tree 40 250000 toArray() 21.719 ms/op 16.674 ms/op 1.30
Tree 40 250000 iterate all - toArray() + loop 19.657 ms/op 16.692 ms/op 1.18
Tree 40 250000 iterate all - get(i) 71.891 ms/op 64.259 ms/op 1.12
MutableVector 250000 create 11.011 ms/op 9.2414 ms/op 1.19
MutableVector 250000 get(125000) 6.4630 ns/op 6.0830 ns/op 1.06
MutableVector 250000 set(125000) 271.24 ns/op 243.84 ns/op 1.11
MutableVector 250000 toArray() 3.6332 ms/op 2.7200 ms/op 1.34
MutableVector 250000 iterate all - toArray() + loop 3.3516 ms/op 2.7518 ms/op 1.22
MutableVector 250000 iterate all - get(i) 1.5633 ms/op 1.4495 ms/op 1.08
Array 250000 create 2.9097 ms/op 2.4546 ms/op 1.19
Array 250000 clone - spread 1.2722 ms/op 1.2157 ms/op 1.05
Array 250000 get(125000) 0.62200 ns/op 0.57000 ns/op 1.09
Array 250000 set(125000) 0.70000 ns/op 0.66100 ns/op 1.06
Array 250000 iterate all - loop 111.25 us/op 103.39 us/op 1.08
effectiveBalanceIncrements clone Uint8Array 300000 37.410 us/op 29.298 us/op 1.28
effectiveBalanceIncrements clone MutableVector 300000 384.00 ns/op 382.00 ns/op 1.01
effectiveBalanceIncrements rw all Uint8Array 300000 167.22 us/op 160.93 us/op 1.04
effectiveBalanceIncrements rw all MutableVector 300000 87.081 ms/op 79.740 ms/op 1.09
phase0 afterProcessEpoch - 250000 vs - 7PWei 114.59 ms/op 108.81 ms/op 1.05
phase0 beforeProcessEpoch - 250000 vs - 7PWei 35.749 ms/op 34.280 ms/op 1.04
altair processEpoch - mainnet_e81889 327.60 ms/op 323.23 ms/op 1.01
mainnet_e81889 - altair beforeProcessEpoch 51.231 ms/op 61.092 ms/op 0.84
mainnet_e81889 - altair processJustificationAndFinalization 16.913 us/op 16.378 us/op 1.03
mainnet_e81889 - altair processInactivityUpdates 5.5971 ms/op 5.3835 ms/op 1.04
mainnet_e81889 - altair processRewardsAndPenalties 69.246 ms/op 69.142 ms/op 1.00
mainnet_e81889 - altair processRegistryUpdates 3.0830 us/op 2.2350 us/op 1.38
mainnet_e81889 - altair processSlashings 541.00 ns/op 452.00 ns/op 1.20
mainnet_e81889 - altair processEth1DataReset 617.00 ns/op 503.00 ns/op 1.23
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3880 ms/op 1.2052 ms/op 1.15
mainnet_e81889 - altair processSlashingsReset 5.7690 us/op 3.7290 us/op 1.55
mainnet_e81889 - altair processRandaoMixesReset 10.038 us/op 4.3960 us/op 2.28
mainnet_e81889 - altair processHistoricalRootsUpdate 1.7680 us/op 954.00 ns/op 1.85
mainnet_e81889 - altair processParticipationFlagUpdates 5.1500 us/op 2.5250 us/op 2.04
mainnet_e81889 - altair processSyncCommitteeUpdates 1.2630 us/op 608.00 ns/op 2.08
mainnet_e81889 - altair afterProcessEpoch 126.22 ms/op 119.34 ms/op 1.06
phase0 processEpoch - mainnet_e58758 357.50 ms/op 348.96 ms/op 1.02
mainnet_e58758 - phase0 beforeProcessEpoch 128.95 ms/op 130.66 ms/op 0.99
mainnet_e58758 - phase0 processJustificationAndFinalization 17.016 us/op 16.858 us/op 1.01
mainnet_e58758 - phase0 processRewardsAndPenalties 66.510 ms/op 63.544 ms/op 1.05
mainnet_e58758 - phase0 processRegistryUpdates 11.054 us/op 7.5540 us/op 1.46
mainnet_e58758 - phase0 processSlashings 742.00 ns/op 453.00 ns/op 1.64
mainnet_e58758 - phase0 processEth1DataReset 837.00 ns/op 531.00 ns/op 1.58
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.5168 ms/op 942.66 us/op 2.67
mainnet_e58758 - phase0 processSlashingsReset 5.2950 us/op 4.2790 us/op 1.24
mainnet_e58758 - phase0 processRandaoMixesReset 5.3910 us/op 4.6010 us/op 1.17
mainnet_e58758 - phase0 processHistoricalRootsUpdate 736.00 ns/op 550.00 ns/op 1.34
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.5010 us/op 3.8880 us/op 1.16
mainnet_e58758 - phase0 afterProcessEpoch 101.25 ms/op 95.141 ms/op 1.06
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2761 ms/op 1.2195 ms/op 1.05
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6054 ms/op 1.4374 ms/op 1.12
altair processInactivityUpdates - 250000 normalcase 25.492 ms/op 24.485 ms/op 1.04
altair processInactivityUpdates - 250000 worstcase 31.181 ms/op 26.296 ms/op 1.19
phase0 processRegistryUpdates - 250000 normalcase 11.627 us/op 6.4860 us/op 1.79
phase0 processRegistryUpdates - 250000 badcase_full_deposits 267.38 us/op 229.34 us/op 1.17
phase0 processRegistryUpdates - 250000 worstcase 0.5 112.29 ms/op 127.72 ms/op 0.88
altair processRewardsAndPenalties - 250000 normalcase 67.161 ms/op 67.953 ms/op 0.99
altair processRewardsAndPenalties - 250000 worstcase 69.311 ms/op 70.749 ms/op 0.98
phase0 getAttestationDeltas - 250000 normalcase 7.1818 ms/op 6.2135 ms/op 1.16
phase0 getAttestationDeltas - 250000 worstcase 6.9496 ms/op 6.4309 ms/op 1.08
phase0 processSlashings - 250000 worstcase 3.7380 ms/op 3.4768 ms/op 1.08
altair processSyncCommitteeUpdates - 250000 184.09 ms/op 169.50 ms/op 1.09
BeaconState.hashTreeRoot - No change 267.00 ns/op 255.00 ns/op 1.05
BeaconState.hashTreeRoot - 1 full validator 54.011 us/op 51.421 us/op 1.05
BeaconState.hashTreeRoot - 32 full validator 490.62 us/op 510.57 us/op 0.96
BeaconState.hashTreeRoot - 512 full validator 5.3695 ms/op 5.1030 ms/op 1.05
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 62.832 us/op 62.545 us/op 1.00
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 926.00 us/op 837.58 us/op 1.11
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.516 ms/op 11.054 ms/op 1.04
BeaconState.hashTreeRoot - 1 balances 46.825 us/op 47.426 us/op 0.99
BeaconState.hashTreeRoot - 32 balances 469.52 us/op 419.12 us/op 1.12
BeaconState.hashTreeRoot - 512 balances 4.6622 ms/op 4.1337 ms/op 1.13
BeaconState.hashTreeRoot - 250000 balances 78.035 ms/op 68.937 ms/op 1.13
aggregationBits - 2048 els - zipIndexesInBitList 18.246 us/op 14.876 us/op 1.23
regular array get 100000 times 36.215 us/op 31.923 us/op 1.13
wrappedArray get 100000 times 36.210 us/op 31.924 us/op 1.13
arrayWithProxy get 100000 times 15.815 ms/op 16.064 ms/op 0.98
ssz.Root.equals 579.00 ns/op 531.00 ns/op 1.09
byteArrayEquals 567.00 ns/op 524.00 ns/op 1.08
shuffle list - 16384 els 7.0272 ms/op 6.6958 ms/op 1.05
shuffle list - 250000 els 102.88 ms/op 98.317 ms/op 1.05
processSlot - 1 slots 9.0050 us/op 8.3910 us/op 1.07
processSlot - 32 slots 1.3968 ms/op 1.2905 ms/op 1.08
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 211.16 us/op 184.80 us/op 1.14
getCommitteeAssignments - req 1 vs - 250000 vc 2.9376 ms/op 2.7812 ms/op 1.06
getCommitteeAssignments - req 100 vs - 250000 vc 4.2531 ms/op 3.9199 ms/op 1.08
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5749 ms/op 4.2446 ms/op 1.08
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.9300 ns/op 4.1700 ns/op 1.18
state getBlockRootAtSlot - 250000 vs - 7PWei 980.19 ns/op 877.43 ns/op 1.12
computeProposers - vc 250000 12.292 ms/op 10.143 ms/op 1.21
computeEpochShuffling - vc 250000 105.33 ms/op 98.088 ms/op 1.07
getNextSyncCommittee - vc 250000 207.32 ms/op 167.83 ms/op 1.24

by benchmarkbot/action

@g11tech g11tech merged commit 93ae89e into unstable Feb 13, 2023
@g11tech g11tech deleted the g11tech/zerofinalized-upgrade-fix branch February 13, 2023 18:26
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.6.0 🎉

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.

2 participants