Skip to content

EIP-4844: Add beacon_block_and_blobs_sidecar gossip topic validation#4861

Merged
twoeths merged 2 commits intounstablefrom
dapplion/eip-4844-gossipvalidation
Dec 7, 2022
Merged

EIP-4844: Add beacon_block_and_blobs_sidecar gossip topic validation#4861
twoeths merged 2 commits intounstablefrom
dapplion/eip-4844-gossipvalidation

Conversation

@dapplion
Copy link
Contributor

@dapplion dapplion commented Dec 6, 2022

Motivation

Description

@dapplion dapplion requested a review from a team as a code owner December 6, 2022 08:40
@github-actions
Copy link
Contributor

github-actions bot commented Dec 6, 2022

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: f98f129 Previous: eb61572 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.0821 ms/op 2.1912 ms/op 0.95
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 63.444 us/op 71.288 us/op 0.89
BLS verify - blst-native 2.1732 ms/op 1.8602 ms/op 1.17
BLS verifyMultipleSignatures 3 - blst-native 4.4880 ms/op 3.8106 ms/op 1.18
BLS verifyMultipleSignatures 8 - blst-native 9.7014 ms/op 8.2072 ms/op 1.18
BLS verifyMultipleSignatures 32 - blst-native 35.234 ms/op 29.735 ms/op 1.18
BLS aggregatePubkeys 32 - blst-native 47.264 us/op 39.297 us/op 1.20
BLS aggregatePubkeys 128 - blst-native 182.26 us/op 154.18 us/op 1.18
getAttestationsForBlock 83.512 ms/op 91.241 ms/op 0.92
isKnown best case - 1 super set check 491.00 ns/op 417.00 ns/op 1.18
isKnown normal case - 2 super set checks 475.00 ns/op 404.00 ns/op 1.18
isKnown worse case - 16 super set checks 475.00 ns/op 404.00 ns/op 1.18
CheckpointStateCache - add get delete 8.9730 us/op 9.1710 us/op 0.98
validate gossip signedAggregateAndProof - struct 5.0526 ms/op 4.2812 ms/op 1.18
validate gossip attestation - struct 2.3815 ms/op 2.0368 ms/op 1.17
pickEth1Vote - no votes 2.5139 ms/op 2.2380 ms/op 1.12
pickEth1Vote - max votes 21.185 ms/op 21.529 ms/op 0.98
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.263 ms/op 11.753 ms/op 1.13
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 21.628 ms/op 21.384 ms/op 1.01
pickEth1Vote - Eth1Data fastSerialize value x2048 1.5078 ms/op 1.5825 ms/op 0.95
pickEth1Vote - Eth1Data fastSerialize tree x2048 14.599 ms/op 15.093 ms/op 0.97
bytes32 toHexString 1.0700 us/op 1.1470 us/op 0.93
bytes32 Buffer.toString(hex) 776.00 ns/op 753.00 ns/op 1.03
bytes32 Buffer.toString(hex) from Uint8Array 1.0480 us/op 981.00 ns/op 1.07
bytes32 Buffer.toString(hex) + 0x 777.00 ns/op 771.00 ns/op 1.01
Object access 1 prop 0.37700 ns/op 0.36400 ns/op 1.04
Map access 1 prop 0.31700 ns/op 0.29000 ns/op 1.09
Object get x1000 11.457 ns/op 16.502 ns/op 0.69
Map get x1000 1.0890 ns/op 0.98300 ns/op 1.11
Object set x1000 77.370 ns/op 117.42 ns/op 0.66
Map set x1000 51.075 ns/op 74.689 ns/op 0.68
Return object 10000 times 0.44490 ns/op 0.36740 ns/op 1.21
Throw Error 10000 times 6.0079 us/op 6.0465 us/op 0.99
fastMsgIdFn sha256 / 200 bytes 4.8750 us/op 4.2470 us/op 1.15
fastMsgIdFn h32 xxhash / 200 bytes 637.00 ns/op 578.00 ns/op 1.10
fastMsgIdFn h64 xxhash / 200 bytes 819.00 ns/op 780.00 ns/op 1.05
fastMsgIdFn sha256 / 1000 bytes 15.424 us/op 13.198 us/op 1.17
fastMsgIdFn h32 xxhash / 1000 bytes 780.00 ns/op 700.00 ns/op 1.11
fastMsgIdFn h64 xxhash / 1000 bytes 840.00 ns/op 870.00 ns/op 0.97
fastMsgIdFn sha256 / 10000 bytes 135.19 us/op 112.46 us/op 1.20
fastMsgIdFn h32 xxhash / 10000 bytes 2.6500 us/op 2.3270 us/op 1.14
fastMsgIdFn h64 xxhash / 10000 bytes 1.8800 us/op 1.7740 us/op 1.06
enrSubnets - fastDeserialize 64 bits 2.8000 us/op 2.6780 us/op 1.05
enrSubnets - ssz BitVector 64 bits 824.00 ns/op 790.00 ns/op 1.04
enrSubnets - fastDeserialize 4 bits 383.00 ns/op 398.00 ns/op 0.96
enrSubnets - ssz BitVector 4 bits 822.00 ns/op 788.00 ns/op 1.04
prioritizePeers score -10:0 att 32-0.1 sync 2-0 83.252 us/op 99.104 us/op 0.84
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 135.55 us/op 122.57 us/op 1.11
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 207.16 us/op 229.49 us/op 0.90
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 351.90 us/op 460.93 us/op 0.76
prioritizePeers score 0:0 att 64-1 sync 4-1 447.12 us/op 457.92 us/op 0.98
RateTracker 1000000 limit, 1 obj count per request 191.57 ns/op 198.20 ns/op 0.97
RateTracker 1000000 limit, 2 obj count per request 138.67 ns/op 151.19 ns/op 0.92
RateTracker 1000000 limit, 4 obj count per request 112.36 ns/op 127.88 ns/op 0.88
RateTracker 1000000 limit, 8 obj count per request 103.15 ns/op 118.04 ns/op 0.87
RateTracker with prune 4.0620 us/op 4.8660 us/op 0.83
array of 16000 items push then shift 51.740 us/op 2.7524 us/op 18.80
LinkedList of 16000 items push then shift 12.460 ns/op 17.749 ns/op 0.70
array of 16000 items push then pop 211.02 ns/op 259.92 ns/op 0.81
LinkedList of 16000 items push then pop 12.186 ns/op 16.517 ns/op 0.74
array of 24000 items push then shift 77.614 us/op 3.9720 us/op 19.54
LinkedList of 24000 items push then shift 13.452 ns/op 22.112 ns/op 0.61
array of 24000 items push then pop 197.07 ns/op 213.24 ns/op 0.92
LinkedList of 24000 items push then pop 12.388 ns/op 17.874 ns/op 0.69
intersect bitArray bitLen 8 10.928 ns/op 11.450 ns/op 0.95
intersect array and set length 8 141.73 ns/op 175.94 ns/op 0.81
intersect bitArray bitLen 128 58.796 ns/op 71.982 ns/op 0.82
intersect array and set length 128 1.9094 us/op 2.3207 us/op 0.82
Buffer.concat 32 items 1.7720 ns/op 1.9420 ns/op 0.91
pass gossip attestations to forkchoice per slot 3.6141 ms/op 4.0958 ms/op 0.88
computeDeltas 4.4604 ms/op 5.9455 ms/op 0.75
computeProposerBoostScoreFromBalances 805.16 us/op 907.65 us/op 0.89
altair processAttestation - 250000 vs - 7PWei normalcase 3.3342 ms/op 4.1725 ms/op 0.80
altair processAttestation - 250000 vs - 7PWei worstcase 6.0252 ms/op 6.4287 ms/op 0.94
altair processAttestation - setStatus - 1/6 committees join 186.64 us/op 212.99 us/op 0.88
altair processAttestation - setStatus - 1/3 committees join 361.77 us/op 395.25 us/op 0.92
altair processAttestation - setStatus - 1/2 committees join 519.68 us/op 552.92 us/op 0.94
altair processAttestation - setStatus - 2/3 committees join 682.70 us/op 711.90 us/op 0.96
altair processAttestation - setStatus - 4/5 committees join 940.39 us/op 988.43 us/op 0.95
altair processAttestation - setStatus - 100% committees join 1.1325 ms/op 1.1761 ms/op 0.96
altair processBlock - 250000 vs - 7PWei normalcase 24.939 ms/op 28.921 ms/op 0.86
altair processBlock - 250000 vs - 7PWei normalcase hashState 34.998 ms/op 39.141 ms/op 0.89
altair processBlock - 250000 vs - 7PWei worstcase 79.299 ms/op 85.441 ms/op 0.93
altair processBlock - 250000 vs - 7PWei worstcase hashState 104.54 ms/op 101.46 ms/op 1.03
phase0 processBlock - 250000 vs - 7PWei normalcase 3.6395 ms/op 3.9264 ms/op 0.93
phase0 processBlock - 250000 vs - 7PWei worstcase 54.100 ms/op 50.471 ms/op 1.07
altair processEth1Data - 250000 vs - 7PWei normalcase 690.95 us/op 826.13 us/op 0.84
vc - 250000 eb 1 eth1 1 we 0 wn 0 - smpl 15 6.6310 us/op 7.6330 us/op 0.87
vc - 250000 eb 0.95 eth1 0.1 we 0.05 wn 0 - smpl 219 21.158 us/op 26.499 us/op 0.80
vc - 250000 eb 0.95 eth1 0.3 we 0.05 wn 0 - smpl 42 9.3190 us/op 10.898 us/op 0.86
vc - 250000 eb 0.95 eth1 0.7 we 0.05 wn 0 - smpl 18 6.6480 us/op 7.9960 us/op 0.83
vc - 250000 eb 0.1 eth1 0.1 we 0 wn 0 - smpl 1020 95.413 us/op 104.13 us/op 0.92
vc - 250000 eb 0.03 eth1 0.03 we 0 wn 0 - smpl 11777 962.58 us/op 1.0597 ms/op 0.91
vc - 250000 eb 0.01 eth1 0.01 we 0 wn 0 - smpl 141069 13.028 ms/op 15.008 ms/op 0.87
vc - 250000 eb 0 eth1 0 we 0 wn 0 - smpl 250000 23.007 ms/op 25.550 ms/op 0.90
vc - 250000 eb 0 eth1 0 we 0 wn 0 nocache - smpl 250000 74.721 ms/op 89.097 ms/op 0.84
vc - 250000 eb 0 eth1 1 we 0 wn 0 - smpl 250000 37.951 ms/op 47.137 ms/op 0.81
vc - 250000 eb 0 eth1 1 we 0 wn 0 nocache - smpl 250000 119.52 ms/op 131.79 ms/op 0.91
Tree 40 250000 create 699.04 ms/op 815.09 ms/op 0.86
Tree 40 250000 get(125000) 259.91 ns/op 294.88 ns/op 0.88
Tree 40 250000 set(125000) 2.3423 us/op 3.0776 us/op 0.76
Tree 40 250000 toArray() 27.295 ms/op 33.449 ms/op 0.82
Tree 40 250000 iterate all - toArray() + loop 27.661 ms/op 33.999 ms/op 0.81
Tree 40 250000 iterate all - get(i) 113.48 ms/op 112.10 ms/op 1.01
MutableVector 250000 create 14.000 ms/op 15.290 ms/op 0.92
MutableVector 250000 get(125000) 11.177 ns/op 14.754 ns/op 0.76
MutableVector 250000 set(125000) 628.50 ns/op 742.61 ns/op 0.85
MutableVector 250000 toArray() 6.4017 ms/op 7.9623 ms/op 0.80
MutableVector 250000 iterate all - toArray() + loop 6.4358 ms/op 8.1128 ms/op 0.79
MutableVector 250000 iterate all - get(i) 2.7039 ms/op 3.4398 ms/op 0.79
Array 250000 create 5.4713 ms/op 7.2616 ms/op 0.75
Array 250000 clone - spread 2.3920 ms/op 4.9914 ms/op 0.48
Array 250000 get(125000) 1.1580 ns/op 1.9020 ns/op 0.61
Array 250000 set(125000) 1.1480 ns/op 1.8900 ns/op 0.61
Array 250000 iterate all - loop 181.83 us/op 167.93 us/op 1.08
effectiveBalanceIncrements clone Uint8Array 300000 352.03 us/op 91.926 us/op 3.83
effectiveBalanceIncrements clone MutableVector 300000 716.00 ns/op 1.3610 us/op 0.53
effectiveBalanceIncrements rw all Uint8Array 300000 247.64 us/op 252.52 us/op 0.98
effectiveBalanceIncrements rw all MutableVector 300000 142.82 ms/op 216.27 ms/op 0.66
phase0 afterProcessEpoch - 250000 vs - 7PWei 189.87 ms/op 184.83 ms/op 1.03
phase0 beforeProcessEpoch - 250000 vs - 7PWei 58.434 ms/op 74.070 ms/op 0.79
altair processEpoch - mainnet_e81889 552.18 ms/op 507.49 ms/op 1.09
mainnet_e81889 - altair beforeProcessEpoch 113.24 ms/op 148.26 ms/op 0.76
mainnet_e81889 - altair processJustificationAndFinalization 17.968 us/op 19.273 us/op 0.93
mainnet_e81889 - altair processInactivityUpdates 9.0357 ms/op 10.749 ms/op 0.84
mainnet_e81889 - altair processRewardsAndPenalties 78.024 ms/op 95.100 ms/op 0.82
mainnet_e81889 - altair processRegistryUpdates 2.7050 us/op 5.1270 us/op 0.53
mainnet_e81889 - altair processSlashings 582.00 ns/op 668.00 ns/op 0.87
mainnet_e81889 - altair processEth1DataReset 619.00 ns/op 742.00 ns/op 0.83
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.9321 ms/op 2.2409 ms/op 0.86
mainnet_e81889 - altair processSlashingsReset 3.9860 us/op 6.8920 us/op 0.58
mainnet_e81889 - altair processRandaoMixesReset 4.1860 us/op 6.2840 us/op 0.67
mainnet_e81889 - altair processHistoricalRootsUpdate 648.00 ns/op 1.0260 us/op 0.63
mainnet_e81889 - altair processParticipationFlagUpdates 2.1750 us/op 3.0540 us/op 0.71
mainnet_e81889 - altair processSyncCommitteeUpdates 530.00 ns/op 694.00 ns/op 0.76
mainnet_e81889 - altair afterProcessEpoch 200.54 ms/op 193.82 ms/op 1.03
phase0 processEpoch - mainnet_e58758 489.00 ms/op 540.35 ms/op 0.90
mainnet_e58758 - phase0 beforeProcessEpoch 180.90 ms/op 241.08 ms/op 0.75
mainnet_e58758 - phase0 processJustificationAndFinalization 17.150 us/op 21.534 us/op 0.80
mainnet_e58758 - phase0 processRewardsAndPenalties 99.849 ms/op 123.45 ms/op 0.81
mainnet_e58758 - phase0 processRegistryUpdates 7.6050 us/op 10.066 us/op 0.76
mainnet_e58758 - phase0 processSlashings 587.00 ns/op 666.00 ns/op 0.88
mainnet_e58758 - phase0 processEth1DataReset 615.00 ns/op 719.00 ns/op 0.86
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.6220 ms/op 2.8779 ms/op 0.56
mainnet_e58758 - phase0 processSlashingsReset 3.2770 us/op 5.3420 us/op 0.61
mainnet_e58758 - phase0 processRandaoMixesReset 4.1790 us/op 5.5030 us/op 0.76
mainnet_e58758 - phase0 processHistoricalRootsUpdate 679.00 ns/op 927.00 ns/op 0.73
mainnet_e58758 - phase0 processParticipationRecordUpdates 3.2930 us/op 4.8530 us/op 0.68
mainnet_e58758 - phase0 afterProcessEpoch 164.79 ms/op 158.05 ms/op 1.04
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.9292 ms/op 2.6589 ms/op 0.73
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.1818 ms/op 3.5367 ms/op 0.62
altair processInactivityUpdates - 250000 normalcase 40.461 ms/op 43.422 ms/op 0.93
altair processInactivityUpdates - 250000 worstcase 33.200 ms/op 57.413 ms/op 0.58
phase0 processRegistryUpdates - 250000 normalcase 6.4690 us/op 8.0940 us/op 0.80
phase0 processRegistryUpdates - 250000 badcase_full_deposits 379.70 us/op 415.13 us/op 0.91
phase0 processRegistryUpdates - 250000 worstcase 0.5 171.08 ms/op 225.70 ms/op 0.76
altair processRewardsAndPenalties - 250000 normalcase 77.672 ms/op 136.92 ms/op 0.57
altair processRewardsAndPenalties - 250000 worstcase 112.28 ms/op 88.610 ms/op 1.27
phase0 getAttestationDeltas - 250000 normalcase 11.587 ms/op 16.071 ms/op 0.72
phase0 getAttestationDeltas - 250000 worstcase 12.078 ms/op 15.928 ms/op 0.76
phase0 processSlashings - 250000 worstcase 5.6195 ms/op 6.1186 ms/op 0.92
altair processSyncCommitteeUpdates - 250000 290.38 ms/op 292.84 ms/op 0.99
BeaconState.hashTreeRoot - No change 558.00 ns/op 522.00 ns/op 1.07
BeaconState.hashTreeRoot - 1 full validator 70.795 us/op 63.049 us/op 1.12
BeaconState.hashTreeRoot - 32 full validator 652.42 us/op 762.16 us/op 0.86
BeaconState.hashTreeRoot - 512 full validator 6.8685 ms/op 6.5376 ms/op 1.05
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 87.839 us/op 79.279 us/op 1.11
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2790 ms/op 1.2314 ms/op 1.04
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 16.797 ms/op 16.838 ms/op 1.00
BeaconState.hashTreeRoot - 1 balances 66.678 us/op 53.220 us/op 1.25
BeaconState.hashTreeRoot - 32 balances 647.73 us/op 658.43 us/op 0.98
BeaconState.hashTreeRoot - 512 balances 6.3821 ms/op 6.1312 ms/op 1.04
BeaconState.hashTreeRoot - 250000 balances 105.82 ms/op 95.623 ms/op 1.11
aggregationBits - 2048 els - zipIndexesInBitList 25.063 us/op 42.299 us/op 0.59
regular array get 100000 times 60.543 us/op 67.508 us/op 0.90
wrappedArray get 100000 times 60.610 us/op 67.472 us/op 0.90
arrayWithProxy get 100000 times 28.028 ms/op 28.790 ms/op 0.97
ssz.Root.equals 466.00 ns/op 518.00 ns/op 0.90
byteArrayEquals 443.00 ns/op 512.00 ns/op 0.87
shuffle list - 16384 els 11.745 ms/op 11.050 ms/op 1.06
shuffle list - 250000 els 171.07 ms/op 163.40 ms/op 1.05
processSlot - 1 slots 13.398 us/op 13.857 us/op 0.97
processSlot - 32 slots 2.0037 ms/op 1.8441 ms/op 1.09
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 362.12 us/op 428.95 us/op 0.84
getCommitteeAssignments - req 1 vs - 250000 vc 5.4884 ms/op 5.4336 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 8.2491 ms/op 7.4173 ms/op 1.11
getCommitteeAssignments - req 1000 vs - 250000 vc 8.7745 ms/op 7.9493 ms/op 1.10
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 8.6300 ns/op 9.6500 ns/op 0.89
state getBlockRootAtSlot - 250000 vs - 7PWei 1.0918 us/op 1.2754 us/op 0.86
computeProposers - vc 250000 17.451 ms/op 17.494 ms/op 1.00
computeEpochShuffling - vc 250000 173.17 ms/op 165.98 ms/op 1.04
getNextSyncCommittee - vc 250000 293.83 ms/op 288.18 ms/op 1.02

by benchmarkbot/action

@dapplion dapplion changed the title Add beacon_block_and_blobs_sidecar gossip topic validation EIP-4844: Add beacon_block_and_blobs_sidecar gossip topic validation Dec 6, 2022
@dapplion dapplion added the spec-deneb 🐡 Issues targeting the Deneb spec version label Dec 6, 2022
@twoeths twoeths force-pushed the dapplion/eip-4844-gossipvalidation branch from 26a270f to fe40589 Compare December 7, 2022 04:11
@twoeths
Copy link
Contributor

twoeths commented Dec 7, 2022

@dapplion new code added to validateGossipBlobsSidecar to consume validateBlobsSidecar (check my last commit), just fyi

@twoeths twoeths merged commit 8bd86ae into unstable Dec 7, 2022
@twoeths twoeths deleted the dapplion/eip-4844-gossipvalidation branch December 7, 2022 04:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

spec-deneb 🐡 Issues targeting the Deneb spec version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants