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

Throw Error if slot is too far into the future #4437

Merged
merged 1 commit into from Aug 18, 2022

Conversation

dapplion
Copy link
Contributor

@dapplion dapplion commented Aug 18, 2022

Motivation

Current REST API impl handles only the case where the requested slot is "close enough". Instead it should

  • If too far in the future: throw
  • If close enough in the future: wait
  • else: continue

Description

Throw Error if slot is too far into the future

Closes #4432

@dapplion dapplion requested a review from a team as a code owner August 18, 2022 13:13
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: de66990 Previous: 9ffdbfa Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.6550 ms/op 2.4179 ms/op 0.68
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 63.195 us/op 87.477 us/op 0.72
BLS verify - blst-native 2.1679 ms/op 2.6841 ms/op 0.81
BLS verifyMultipleSignatures 3 - blst-native 4.4689 ms/op 5.7157 ms/op 0.78
BLS verifyMultipleSignatures 8 - blst-native 9.6652 ms/op 11.658 ms/op 0.83
BLS verifyMultipleSignatures 32 - blst-native 35.147 ms/op 43.537 ms/op 0.81
BLS aggregatePubkeys 32 - blst-native 46.512 us/op 58.647 us/op 0.79
BLS aggregatePubkeys 128 - blst-native 182.01 us/op 228.15 us/op 0.80
getAttestationsForBlock 151.40 ms/op 198.66 ms/op 0.76
isKnown best case - 1 super set check 481.00 ns/op 509.00 ns/op 0.94
isKnown normal case - 2 super set checks 473.00 ns/op 485.00 ns/op 0.98
isKnown worse case - 16 super set checks 469.00 ns/op 493.00 ns/op 0.95
CheckpointStateCache - add get delete 8.7140 us/op 10.967 us/op 0.79
validate gossip signedAggregateAndProof - struct 5.0122 ms/op 6.3082 ms/op 0.79
validate gossip attestation - struct 2.3606 ms/op 3.0692 ms/op 0.77
altair verifyImport mainnet_s3766816:31 4.6250 s/op 5.8872 s/op 0.79
pickEth1Vote - no votes 2.0086 ms/op 2.4676 ms/op 0.81
pickEth1Vote - max votes 19.595 ms/op 25.442 ms/op 0.77
pickEth1Vote - Eth1Data hashTreeRoot value x2048 15.990 ms/op 18.061 ms/op 0.89
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 18.718 ms/op 24.884 ms/op 0.75
pickEth1Vote - Eth1Data fastSerialize value x2048 1.3826 ms/op 1.7626 ms/op 0.78
pickEth1Vote - Eth1Data fastSerialize tree x2048 11.323 ms/op 14.945 ms/op 0.76
bytes32 toHexString 879.00 ns/op 1.1770 us/op 0.75
bytes32 Buffer.toString(hex) 705.00 ns/op 829.00 ns/op 0.85
bytes32 Buffer.toString(hex) from Uint8Array 954.00 ns/op 1.1130 us/op 0.86
bytes32 Buffer.toString(hex) + 0x 826.00 ns/op 842.00 ns/op 0.98
Object access 1 prop 0.33200 ns/op 0.42000 ns/op 0.79
Map access 1 prop 0.30100 ns/op 0.34700 ns/op 0.87
Object get x1000 10.765 ns/op 16.300 ns/op 0.66
Map get x1000 0.94200 ns/op 0.96100 ns/op 0.98
Object set x1000 64.374 ns/op 110.68 ns/op 0.58
Map set x1000 43.159 ns/op 79.549 ns/op 0.54
Return object 10000 times 0.43860 ns/op 0.41770 ns/op 1.05
Throw Error 10000 times 6.0164 us/op 7.0861 us/op 0.85
enrSubnets - fastDeserialize 64 bits 2.5410 us/op 3.0500 us/op 0.83
enrSubnets - ssz BitVector 64 bits 749.00 ns/op 851.00 ns/op 0.88
enrSubnets - fastDeserialize 4 bits 349.00 ns/op 414.00 ns/op 0.84
enrSubnets - ssz BitVector 4 bits 728.00 ns/op 805.00 ns/op 0.90
prioritizePeers score -10:0 att 32-0.1 sync 2-0 78.875 us/op 110.11 us/op 0.72
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 115.00 us/op 150.79 us/op 0.76
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 193.38 us/op 267.26 us/op 0.72
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 374.66 us/op 595.53 us/op 0.63
prioritizePeers score 0:0 att 64-1 sync 4-1 404.71 us/op 616.55 us/op 0.66
RateTracker 1000000 limit, 1 obj count per request 174.12 ns/op 215.60 ns/op 0.81
RateTracker 1000000 limit, 2 obj count per request 125.98 ns/op 156.72 ns/op 0.80
RateTracker 1000000 limit, 4 obj count per request 102.76 ns/op 124.74 ns/op 0.82
RateTracker 1000000 limit, 8 obj count per request 91.323 ns/op 116.21 ns/op 0.79
RateTracker with prune 3.5080 us/op 4.9340 us/op 0.71
array of 16000 items push then shift 51.571 us/op 5.3437 us/op 9.65
LinkedList of 16000 items push then shift 14.741 ns/op 27.548 ns/op 0.54
array of 16000 items push then pop 184.56 ns/op 238.41 ns/op 0.77
LinkedList of 16000 items push then pop 14.040 ns/op 23.173 ns/op 0.61
array of 24000 items push then shift 77.332 us/op 8.5070 us/op 9.09
LinkedList of 24000 items push then shift 17.297 ns/op 27.000 ns/op 0.64
array of 24000 items push then pop 200.63 ns/op 245.22 ns/op 0.82
LinkedList of 24000 items push then pop 14.835 ns/op 23.171 ns/op 0.64
intersect bitArray bitLen 8 10.720 ns/op 12.434 ns/op 0.86
intersect array and set length 8 124.03 ns/op 185.30 ns/op 0.67
intersect bitArray bitLen 128 57.854 ns/op 72.050 ns/op 0.80
intersect array and set length 128 1.7181 us/op 2.3241 us/op 0.74
Buffer.concat 32 items 1.8160 ns/op 2.2500 ns/op 0.81
pass gossip attestations to forkchoice per slot 2.8241 ms/op 3.5542 ms/op 0.79
computeDeltas 3.6174 ms/op 4.6458 ms/op 0.78
computeProposerBoostScoreFromBalances 803.78 us/op 911.51 us/op 0.88
altair processAttestation - 250000 vs - 7PWei normalcase 3.4917 ms/op 5.1772 ms/op 0.67
altair processAttestation - 250000 vs - 7PWei worstcase 5.2220 ms/op 7.2496 ms/op 0.72
altair processAttestation - setStatus - 1/6 committees join 175.15 us/op 250.75 us/op 0.70
altair processAttestation - setStatus - 1/3 committees join 337.34 us/op 464.37 us/op 0.73
altair processAttestation - setStatus - 1/2 committees join 485.29 us/op 689.55 us/op 0.70
altair processAttestation - setStatus - 2/3 committees join 634.49 us/op 862.84 us/op 0.74
altair processAttestation - setStatus - 4/5 committees join 896.16 us/op 1.2213 ms/op 0.73
altair processAttestation - setStatus - 100% committees join 1.0758 ms/op 1.5146 ms/op 0.71
altair processBlock - 250000 vs - 7PWei normalcase 24.350 ms/op 33.641 ms/op 0.72
altair processBlock - 250000 vs - 7PWei normalcase hashState 36.453 ms/op 56.209 ms/op 0.65
altair processBlock - 250000 vs - 7PWei worstcase 83.115 ms/op 115.03 ms/op 0.72
altair processBlock - 250000 vs - 7PWei worstcase hashState 96.788 ms/op 120.96 ms/op 0.80
phase0 processBlock - 250000 vs - 7PWei normalcase 4.6894 ms/op 3.9766 ms/op 1.18
phase0 processBlock - 250000 vs - 7PWei worstcase 51.473 ms/op 63.966 ms/op 0.80
altair processEth1Data - 250000 vs - 7PWei normalcase 1.0464 ms/op 1.4840 ms/op 0.71
Tree 40 250000 create 703.25 ms/op 1.0083 s/op 0.70
Tree 40 250000 get(125000) 231.83 ns/op 326.94 ns/op 0.71
Tree 40 250000 set(125000) 2.0092 us/op 3.0655 us/op 0.66
Tree 40 250000 toArray() 29.178 ms/op 38.649 ms/op 0.75
Tree 40 250000 iterate all - toArray() + loop 30.883 ms/op 39.040 ms/op 0.79
Tree 40 250000 iterate all - get(i) 112.56 ms/op 132.57 ms/op 0.85
MutableVector 250000 create 19.553 ms/op 25.682 ms/op 0.76
MutableVector 250000 get(125000) 11.169 ns/op 13.866 ns/op 0.81
MutableVector 250000 set(125000) 445.00 ns/op 769.61 ns/op 0.58
MutableVector 250000 toArray() 5.5834 ms/op 7.1351 ms/op 0.78
MutableVector 250000 iterate all - toArray() + loop 5.7765 ms/op 8.0038 ms/op 0.72
MutableVector 250000 iterate all - get(i) 2.7099 ms/op 3.5144 ms/op 0.77
Array 250000 create 5.3531 ms/op 6.5985 ms/op 0.81
Array 250000 clone - spread 2.4672 ms/op 2.9943 ms/op 0.82
Array 250000 get(125000) 1.1750 ns/op 1.2390 ns/op 0.95
Array 250000 set(125000) 1.1680 ns/op 1.4050 ns/op 0.83
Array 250000 iterate all - loop 150.97 us/op 146.11 us/op 1.03
effectiveBalanceIncrements clone Uint8Array 300000 40.251 us/op 95.038 us/op 0.42
effectiveBalanceIncrements clone MutableVector 300000 730.00 ns/op 935.00 ns/op 0.78
effectiveBalanceIncrements rw all Uint8Array 300000 247.21 us/op 300.31 us/op 0.82
effectiveBalanceIncrements rw all MutableVector 300000 125.99 ms/op 246.46 ms/op 0.51
phase0 afterProcessEpoch - 250000 vs - 7PWei 191.76 ms/op 207.62 ms/op 0.92
phase0 beforeProcessEpoch - 250000 vs - 7PWei 111.09 ms/op 157.41 ms/op 0.71
altair processEpoch - mainnet_e81889 565.41 ms/op 802.84 ms/op 0.70
mainnet_e81889 - altair beforeProcessEpoch 129.20 ms/op 239.93 ms/op 0.54
mainnet_e81889 - altair processJustificationAndFinalization 16.978 us/op 65.240 us/op 0.26
mainnet_e81889 - altair processInactivityUpdates 9.7671 ms/op 11.150 ms/op 0.88
mainnet_e81889 - altair processRewardsAndPenalties 80.309 ms/op 206.68 ms/op 0.39
mainnet_e81889 - altair processRegistryUpdates 2.6230 us/op 14.581 us/op 0.18
mainnet_e81889 - altair processSlashings 684.00 ns/op 4.1460 us/op 0.16
mainnet_e81889 - altair processEth1DataReset 669.00 ns/op 4.2110 us/op 0.16
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.9390 ms/op 3.0139 ms/op 0.64
mainnet_e81889 - altair processSlashingsReset 4.5200 us/op 28.577 us/op 0.16
mainnet_e81889 - altair processRandaoMixesReset 4.3360 us/op 25.112 us/op 0.17
mainnet_e81889 - altair processHistoricalRootsUpdate 684.00 ns/op 5.0750 us/op 0.13
mainnet_e81889 - altair processParticipationFlagUpdates 2.1810 us/op 16.758 us/op 0.13
mainnet_e81889 - altair processSyncCommitteeUpdates 536.00 ns/op 3.9390 us/op 0.14
mainnet_e81889 - altair afterProcessEpoch 198.73 ms/op 209.98 ms/op 0.95
phase0 processEpoch - mainnet_e58758 493.17 ms/op 811.71 ms/op 0.61
mainnet_e58758 - phase0 beforeProcessEpoch 180.40 ms/op 362.05 ms/op 0.50
mainnet_e58758 - phase0 processJustificationAndFinalization 15.013 us/op 61.554 us/op 0.24
mainnet_e58758 - phase0 processRewardsAndPenalties 70.018 ms/op 175.13 ms/op 0.40
mainnet_e58758 - phase0 processRegistryUpdates 7.8610 us/op 33.529 us/op 0.23
mainnet_e58758 - phase0 processSlashings 637.00 ns/op 3.2280 us/op 0.20
mainnet_e58758 - phase0 processEth1DataReset 633.00 ns/op 4.3490 us/op 0.15
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.6225 ms/op 2.1046 ms/op 0.77
mainnet_e58758 - phase0 processSlashingsReset 3.5490 us/op 17.332 us/op 0.20
mainnet_e58758 - phase0 processRandaoMixesReset 4.4930 us/op 23.281 us/op 0.19
mainnet_e58758 - phase0 processHistoricalRootsUpdate 669.00 ns/op 4.5610 us/op 0.15
mainnet_e58758 - phase0 processParticipationRecordUpdates 3.8460 us/op 21.540 us/op 0.18
mainnet_e58758 - phase0 afterProcessEpoch 165.22 ms/op 177.34 ms/op 0.93
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.9591 ms/op 2.4781 ms/op 0.79
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.6195 ms/op 2.9279 ms/op 0.89
altair processInactivityUpdates - 250000 normalcase 32.216 ms/op 79.968 ms/op 0.40
altair processInactivityUpdates - 250000 worstcase 39.575 ms/op 55.086 ms/op 0.72
phase0 processRegistryUpdates - 250000 normalcase 6.1690 us/op 27.207 us/op 0.23
phase0 processRegistryUpdates - 250000 badcase_full_deposits 369.13 us/op 511.04 us/op 0.72
phase0 processRegistryUpdates - 250000 worstcase 0.5 180.96 ms/op 319.14 ms/op 0.57
altair processRewardsAndPenalties - 250000 normalcase 107.57 ms/op 175.28 ms/op 0.61
altair processRewardsAndPenalties - 250000 worstcase 98.014 ms/op 182.12 ms/op 0.54
phase0 getAttestationDeltas - 250000 normalcase 11.518 ms/op 14.835 ms/op 0.78
phase0 getAttestationDeltas - 250000 worstcase 11.793 ms/op 14.783 ms/op 0.80
phase0 processSlashings - 250000 worstcase 5.1211 ms/op 7.6117 ms/op 0.67
altair processSyncCommitteeUpdates - 250000 285.98 ms/op 341.25 ms/op 0.84
BeaconState.hashTreeRoot - No change 506.00 ns/op 563.00 ns/op 0.90
BeaconState.hashTreeRoot - 1 full validator 73.463 us/op 79.688 us/op 0.92
BeaconState.hashTreeRoot - 32 full validator 707.50 us/op 1.0320 ms/op 0.69
BeaconState.hashTreeRoot - 512 full validator 6.8351 ms/op 10.554 ms/op 0.65
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 88.166 us/op 110.27 us/op 0.80
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2334 ms/op 1.7954 ms/op 0.69
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 16.251 ms/op 20.074 ms/op 0.81
BeaconState.hashTreeRoot - 1 balances 67.647 us/op 84.051 us/op 0.80
BeaconState.hashTreeRoot - 32 balances 647.32 us/op 819.32 us/op 0.79
BeaconState.hashTreeRoot - 512 balances 6.2485 ms/op 7.3465 ms/op 0.85
BeaconState.hashTreeRoot - 250000 balances 106.98 ms/op 124.10 ms/op 0.86
aggregationBits - 2048 els - zipIndexesInBitList 26.083 us/op 33.852 us/op 0.77
regular array get 100000 times 62.055 us/op 59.185 us/op 1.05
wrappedArray get 100000 times 61.276 us/op 59.292 us/op 1.03
arrayWithProxy get 100000 times 28.978 ms/op 40.618 ms/op 0.71
ssz.Root.equals 452.00 ns/op 648.00 ns/op 0.70
byteArrayEquals 444.00 ns/op 510.00 ns/op 0.87
shuffle list - 16384 els 11.442 ms/op 12.206 ms/op 0.94
shuffle list - 250000 els 168.88 ms/op 178.53 ms/op 0.95
processSlot - 1 slots 13.299 us/op 16.677 us/op 0.80
processSlot - 32 slots 1.9206 ms/op 2.8218 ms/op 0.68
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 442.56 us/op 704.30 us/op 0.63
getCommitteeAssignments - req 1 vs - 250000 vc 5.3921 ms/op 5.3994 ms/op 1.00
getCommitteeAssignments - req 100 vs - 250000 vc 7.8609 ms/op 7.9159 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 8.4143 ms/op 8.5652 ms/op 0.98
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 7.9200 ns/op 11.390 ns/op 0.70
state getBlockRootAtSlot - 250000 vs - 7PWei 983.10 ns/op 1.2239 us/op 0.80
computeProposers - vc 250000 17.539 ms/op 21.204 ms/op 0.83
computeEpochShuffling - vc 250000 170.50 ms/op 184.97 ms/op 0.92
getNextSyncCommittee - vc 250000 288.78 ms/op 333.39 ms/op 0.87

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 543198d into unstable Aug 18, 2022
@wemeetagain wemeetagain deleted the dapplion/future-slot-api-throw branch August 18, 2022 18:35
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.

Prevent attestation-data API endpoint from accepting slot far in the future
2 participants