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

docs: add PR workflow section in contribution guide #7602

Open
wants to merge 6 commits into
base: unstable
Choose a base branch
from

Conversation

nazarhussain
Copy link
Contributor

Motivation

Document the PR workflow based on the last team discussion.

Description

  • Explain different natures of PRs
  • Explain steps how to open and manage those PRs.

Steps to test or reproduce

  • Run all tests

@nazarhussain nazarhussain requested a review from a team as a code owner March 19, 2025 04:35
Copy link
Contributor

github-actions bot commented Mar 19, 2025

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: 7afe8e0 Previous: 706f45e Ratio
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 7.2589 ms/op 1.9147 ms/op 3.79
Full benchmark results
Benchmark suite Current: 7afe8e0 Previous: 706f45e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.0508 ms/op 1.0272 ms/op 1.02
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.202 us/op 35.144 us/op 1.09
BLS verify - blst 1.0086 ms/op 970.24 us/op 1.04
BLS verifyMultipleSignatures 3 - blst 1.6387 ms/op 1.5939 ms/op 1.03
BLS verifyMultipleSignatures 8 - blst 2.0887 ms/op 2.0757 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst 7.5779 ms/op 6.6586 ms/op 1.14
BLS verifyMultipleSignatures 64 - blst 11.657 ms/op 10.733 ms/op 1.09
BLS verifyMultipleSignatures 128 - blst 24.120 ms/op 17.014 ms/op 1.42
BLS deserializing 10000 signatures 777.28 ms/op 681.11 ms/op 1.14
BLS deserializing 100000 signatures 7.4285 s/op 6.9431 s/op 1.07
BLS verifyMultipleSignatures - same message - 3 - blst 1.0827 ms/op 988.39 us/op 1.10
BLS verifyMultipleSignatures - same message - 8 - blst 1.0593 ms/op 1.1579 ms/op 0.91
BLS verifyMultipleSignatures - same message - 32 - blst 1.8462 ms/op 1.9271 ms/op 0.96
BLS verifyMultipleSignatures - same message - 64 - blst 2.7959 ms/op 2.6791 ms/op 1.04
BLS verifyMultipleSignatures - same message - 128 - blst 4.6163 ms/op 4.4060 ms/op 1.05
BLS aggregatePubkeys 32 - blst 19.998 us/op 19.747 us/op 1.01
BLS aggregatePubkeys 128 - blst 72.314 us/op 70.203 us/op 1.03
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 57.632 ms/op 58.791 ms/op 0.98
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 60.923 ms/op 65.269 ms/op 0.93
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 39.731 ms/op 44.403 ms/op 0.89
getSlashingsAndExits - default max 76.758 us/op 74.926 us/op 1.02
getSlashingsAndExits - 2k 323.21 us/op 347.61 us/op 0.93
proposeBlockBody type=full, size=empty 5.3950 ms/op 5.6345 ms/op 0.96
isKnown best case - 1 super set check 204.00 ns/op 212.00 ns/op 0.96
isKnown normal case - 2 super set checks 200.00 ns/op 208.00 ns/op 0.96
isKnown worse case - 16 super set checks 199.00 ns/op 213.00 ns/op 0.93
InMemoryCheckpointStateCache - add get delete 2.3970 us/op 2.5610 us/op 0.94
validate api signedAggregateAndProof - struct 2.5293 ms/op 1.9620 ms/op 1.29
validate gossip signedAggregateAndProof - struct 1.7263 ms/op 2.1001 ms/op 0.82
batch validate gossip attestation - vc 640000 - chunk 32 117.43 us/op 132.63 us/op 0.89
batch validate gossip attestation - vc 640000 - chunk 64 105.30 us/op 112.02 us/op 0.94
batch validate gossip attestation - vc 640000 - chunk 128 98.080 us/op 119.60 us/op 0.82
batch validate gossip attestation - vc 640000 - chunk 256 110.63 us/op 108.60 us/op 1.02
pickEth1Vote - no votes 1.0520 ms/op 1.0975 ms/op 0.96
pickEth1Vote - max votes 8.5419 ms/op 15.110 ms/op 0.57
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.578 ms/op 18.955 ms/op 0.72
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 19.616 ms/op 33.121 ms/op 0.59
pickEth1Vote - Eth1Data fastSerialize value x2048 465.28 us/op 596.60 us/op 0.78
pickEth1Vote - Eth1Data fastSerialize tree x2048 2.5106 ms/op 4.9907 ms/op 0.50
bytes32 toHexString 395.00 ns/op 552.00 ns/op 0.72
bytes32 Buffer.toString(hex) 244.00 ns/op 369.00 ns/op 0.66
bytes32 Buffer.toString(hex) from Uint8Array 343.00 ns/op 436.00 ns/op 0.79
bytes32 Buffer.toString(hex) + 0x 246.00 ns/op 332.00 ns/op 0.74
Object access 1 prop 0.12500 ns/op 0.18500 ns/op 0.68
Map access 1 prop 0.13200 ns/op 0.15200 ns/op 0.87
Object get x1000 6.1080 ns/op 6.5590 ns/op 0.93
Map get x1000 6.6840 ns/op 7.7150 ns/op 0.87
Object set x1000 32.640 ns/op 36.571 ns/op 0.89
Map set x1000 22.764 ns/op 24.452 ns/op 0.93
Return object 10000 times 0.30590 ns/op 0.31640 ns/op 0.97
Throw Error 10000 times 4.6479 us/op 4.7595 us/op 0.98
toHex 140.75 ns/op 188.42 ns/op 0.75
Buffer.from 127.19 ns/op 179.72 ns/op 0.71
shared Buffer 82.520 ns/op 90.619 ns/op 0.91
fastMsgIdFn sha256 / 200 bytes 2.3330 us/op 2.8140 us/op 0.83
fastMsgIdFn h32 xxhash / 200 bytes 212.00 ns/op 285.00 ns/op 0.74
fastMsgIdFn h64 xxhash / 200 bytes 291.00 ns/op 398.00 ns/op 0.73
fastMsgIdFn sha256 / 1000 bytes 7.5710 us/op 7.8420 us/op 0.97
fastMsgIdFn h32 xxhash / 1000 bytes 355.00 ns/op 440.00 ns/op 0.81
fastMsgIdFn h64 xxhash / 1000 bytes 392.00 ns/op 436.00 ns/op 0.90
fastMsgIdFn sha256 / 10000 bytes 68.645 us/op 93.655 us/op 0.73
fastMsgIdFn h32 xxhash / 10000 bytes 1.9490 us/op 1.9950 us/op 0.98
fastMsgIdFn h64 xxhash / 10000 bytes 1.3170 us/op 1.3230 us/op 1.00
send data - 1000 256B messages 16.958 ms/op 21.280 ms/op 0.80
send data - 1000 512B messages 21.761 ms/op 26.494 ms/op 0.82
send data - 1000 1024B messages 32.890 ms/op 46.720 ms/op 0.70
send data - 1000 1200B messages 30.224 ms/op 33.682 ms/op 0.90
send data - 1000 2048B messages 26.800 ms/op 33.650 ms/op 0.80
send data - 1000 4096B messages 34.681 ms/op 42.121 ms/op 0.82
send data - 1000 16384B messages 76.897 ms/op 110.26 ms/op 0.70
send data - 1000 65536B messages 261.29 ms/op 1.0520 s/op 0.25
enrSubnets - fastDeserialize 64 bits 980.00 ns/op 1.2250 us/op 0.80
enrSubnets - ssz BitVector 64 bits 366.00 ns/op 353.00 ns/op 1.04
enrSubnets - fastDeserialize 4 bits 180.00 ns/op 190.00 ns/op 0.95
enrSubnets - ssz BitVector 4 bits 387.00 ns/op 851.00 ns/op 0.45
prioritizePeers score -10:0 att 32-0.1 sync 2-0 144.61 us/op 250.70 us/op 0.58
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 180.48 us/op 350.58 us/op 0.51
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 225.07 us/op 321.42 us/op 0.70
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 428.98 us/op 1.0420 ms/op 0.41
prioritizePeers score 0:0 att 64-1 sync 4-1 537.58 us/op 1.1296 ms/op 0.48
array of 16000 items push then shift 1.7694 us/op 1.8520 us/op 0.96
LinkedList of 16000 items push then shift 10.770 ns/op 15.433 ns/op 0.70
array of 16000 items push then pop 88.992 ns/op 135.60 ns/op 0.66
LinkedList of 16000 items push then pop 8.7810 ns/op 10.650 ns/op 0.82
array of 24000 items push then shift 2.8534 us/op 4.0615 us/op 0.70
LinkedList of 24000 items push then shift 10.195 ns/op 18.048 ns/op 0.56
array of 24000 items push then pop 134.31 ns/op 159.27 ns/op 0.84
LinkedList of 24000 items push then pop 13.867 ns/op 10.323 ns/op 1.34
intersect bitArray bitLen 8 6.9830 ns/op 13.173 ns/op 0.53
intersect array and set length 8 44.797 ns/op 57.996 ns/op 0.77
intersect bitArray bitLen 128 49.959 ns/op 33.504 ns/op 1.49
intersect array and set length 128 734.48 ns/op 748.87 ns/op 0.98
bitArray.getTrueBitIndexes() bitLen 128 1.1540 us/op 1.5560 us/op 0.74
bitArray.getTrueBitIndexes() bitLen 248 1.9600 us/op 3.4010 us/op 0.58
bitArray.getTrueBitIndexes() bitLen 512 4.1210 us/op 6.5880 us/op 0.63
Buffer.concat 32 items 835.00 ns/op 1.2590 us/op 0.66
Uint8Array.set 32 items 1.5780 us/op 3.1430 us/op 0.50
Buffer.copy 3.3900 us/op 4.6230 us/op 0.73
Uint8Array.set - with subarray 2.4200 us/op 4.3730 us/op 0.55
Uint8Array.set - without subarray 1.5410 us/op 2.3230 us/op 0.66
getUint32 - dataview 238.00 ns/op 222.00 ns/op 1.07
getUint32 - manual 137.00 ns/op 185.00 ns/op 0.74
Set add up to 64 items then delete first 3.0916 us/op 4.1481 us/op 0.75
OrderedSet add up to 64 items then delete first 5.4716 us/op 6.4157 us/op 0.85
Set add up to 64 items then delete last 3.5055 us/op 3.5680 us/op 0.98
OrderedSet add up to 64 items then delete last 6.5966 us/op 7.1563 us/op 0.92
Set add up to 64 items then delete middle 3.9829 us/op 3.9705 us/op 1.00
OrderedSet add up to 64 items then delete middle 7.2436 us/op 10.608 us/op 0.68
Set add up to 128 items then delete first 6.6816 us/op 9.3361 us/op 0.72
OrderedSet add up to 128 items then delete first 12.488 us/op 14.554 us/op 0.86
Set add up to 128 items then delete last 7.0941 us/op 7.7619 us/op 0.91
OrderedSet add up to 128 items then delete last 11.518 us/op 12.641 us/op 0.91
Set add up to 128 items then delete middle 7.3332 us/op 7.6438 us/op 0.96
OrderedSet add up to 128 items then delete middle 18.617 us/op 18.772 us/op 0.99
Set add up to 256 items then delete first 14.475 us/op 18.849 us/op 0.77
OrderedSet add up to 256 items then delete first 21.317 us/op 26.159 us/op 0.81
Set add up to 256 items then delete last 13.867 us/op 15.461 us/op 0.90
OrderedSet add up to 256 items then delete last 21.749 us/op 24.127 us/op 0.90
Set add up to 256 items then delete middle 13.807 us/op 15.676 us/op 0.88
OrderedSet add up to 256 items then delete middle 51.629 us/op 60.322 us/op 0.86
transfer serialized Status (84 B) 2.4220 us/op 3.4730 us/op 0.70
copy serialized Status (84 B) 1.3780 us/op 2.3930 us/op 0.58
transfer serialized SignedVoluntaryExit (112 B) 2.4690 us/op 3.9020 us/op 0.63
copy serialized SignedVoluntaryExit (112 B) 1.3810 us/op 2.0730 us/op 0.67
transfer serialized ProposerSlashing (416 B) 2.5630 us/op 4.6470 us/op 0.55
copy serialized ProposerSlashing (416 B) 1.8040 us/op 2.6860 us/op 0.67
transfer serialized Attestation (485 B) 2.5810 us/op 3.5980 us/op 0.72
copy serialized Attestation (485 B) 2.0720 us/op 2.6110 us/op 0.79
transfer serialized AttesterSlashing (33232 B) 2.7070 us/op 4.3700 us/op 0.62
copy serialized AttesterSlashing (33232 B) 5.6850 us/op 6.5450 us/op 0.87
transfer serialized Small SignedBeaconBlock (128000 B) 3.3370 us/op 4.1600 us/op 0.80
copy serialized Small SignedBeaconBlock (128000 B) 18.203 us/op 17.977 us/op 1.01
transfer serialized Avg SignedBeaconBlock (200000 B) 4.3560 us/op 5.5860 us/op 0.78
copy serialized Avg SignedBeaconBlock (200000 B) 25.754 us/op 27.097 us/op 0.95
transfer serialized BlobsSidecar (524380 B) 7.3840 us/op 6.0250 us/op 1.23
copy serialized BlobsSidecar (524380 B) 81.479 us/op 106.60 us/op 0.76
transfer serialized Big SignedBeaconBlock (1000000 B) 6.4310 us/op 7.9860 us/op 0.81
copy serialized Big SignedBeaconBlock (1000000 B) 132.66 us/op 221.60 us/op 0.60
pass gossip attestations to forkchoice per slot 3.0023 ms/op 2.9551 ms/op 1.02
forkChoice updateHead vc 100000 bc 64 eq 0 578.56 us/op 483.53 us/op 1.20
forkChoice updateHead vc 600000 bc 64 eq 0 4.4408 ms/op 3.0179 ms/op 1.47
forkChoice updateHead vc 1000000 bc 64 eq 0 6.4184 ms/op 6.0153 ms/op 1.07
forkChoice updateHead vc 600000 bc 320 eq 0 3.3538 ms/op 4.2102 ms/op 0.80
forkChoice updateHead vc 600000 bc 1200 eq 0 3.2690 ms/op 4.8076 ms/op 0.68
forkChoice updateHead vc 600000 bc 7200 eq 0 3.5619 ms/op 5.0143 ms/op 0.71
forkChoice updateHead vc 600000 bc 64 eq 1000 11.269 ms/op 12.048 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 10000 11.281 ms/op 13.052 ms/op 0.86
forkChoice updateHead vc 600000 bc 64 eq 300000 37.098 ms/op 39.327 ms/op 0.94
computeDeltas 500000 validators 300 proto nodes 5.2080 ms/op 5.1378 ms/op 1.01
computeDeltas 500000 validators 1200 proto nodes 4.7372 ms/op 4.7155 ms/op 1.00
computeDeltas 500000 validators 7200 proto nodes 5.8314 ms/op 6.4486 ms/op 0.90
computeDeltas 750000 validators 300 proto nodes 9.1873 ms/op 9.1870 ms/op 1.00
computeDeltas 750000 validators 1200 proto nodes 9.0692 ms/op 9.1963 ms/op 0.99
computeDeltas 750000 validators 7200 proto nodes 8.9258 ms/op 8.3635 ms/op 1.07
computeDeltas 1400000 validators 300 proto nodes 17.064 ms/op 13.589 ms/op 1.26
computeDeltas 1400000 validators 1200 proto nodes 20.844 ms/op 11.918 ms/op 1.75
computeDeltas 1400000 validators 7200 proto nodes 18.036 ms/op 12.476 ms/op 1.45
computeDeltas 2100000 validators 300 proto nodes 21.976 ms/op 18.329 ms/op 1.20
computeDeltas 2100000 validators 1200 proto nodes 18.957 ms/op 19.197 ms/op 0.99
computeDeltas 2100000 validators 7200 proto nodes 19.294 ms/op 17.641 ms/op 1.09
altair processAttestation - 250000 vs - 7PWei normalcase 3.1518 ms/op 2.0969 ms/op 1.50
altair processAttestation - 250000 vs - 7PWei worstcase 3.8687 ms/op 3.0734 ms/op 1.26
altair processAttestation - setStatus - 1/6 committees join 186.26 us/op 139.48 us/op 1.34
altair processAttestation - setStatus - 1/3 committees join 301.56 us/op 292.41 us/op 1.03
altair processAttestation - setStatus - 1/2 committees join 410.68 us/op 366.99 us/op 1.12
altair processAttestation - setStatus - 2/3 committees join 536.26 us/op 452.13 us/op 1.19
altair processAttestation - setStatus - 4/5 committees join 713.88 us/op 596.03 us/op 1.20
altair processAttestation - setStatus - 100% committees join 1.1347 ms/op 720.08 us/op 1.58
altair processBlock - 250000 vs - 7PWei normalcase 6.2332 ms/op 5.5780 ms/op 1.12
altair processBlock - 250000 vs - 7PWei normalcase hashState 32.497 ms/op 33.125 ms/op 0.98
altair processBlock - 250000 vs - 7PWei worstcase 43.763 ms/op 40.648 ms/op 1.08
altair processBlock - 250000 vs - 7PWei worstcase hashState 107.48 ms/op 87.007 ms/op 1.24
phase0 processBlock - 250000 vs - 7PWei normalcase 2.9202 ms/op 2.0353 ms/op 1.43
phase0 processBlock - 250000 vs - 7PWei worstcase 27.882 ms/op 29.716 ms/op 0.94
altair processEth1Data - 250000 vs - 7PWei normalcase 495.47 us/op 371.57 us/op 1.33
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 8.0700 us/op 5.6810 us/op 1.42
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 49.542 us/op 41.747 us/op 1.19
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 13.900 us/op 9.0500 us/op 1.54
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 7.6080 us/op 4.6350 us/op 1.64
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 174.19 us/op 151.37 us/op 1.15
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.3428 ms/op 1.1096 ms/op 1.21
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.9705 ms/op 2.0252 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8884 ms/op 2.0130 ms/op 0.94
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.1350 ms/op 3.3826 ms/op 1.22
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0587 ms/op 1.6947 ms/op 1.21
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.4527 ms/op 3.5495 ms/op 1.25
Tree 40 250000 create 854.61 ms/op 453.42 ms/op 1.88
Tree 40 250000 get(125000) 177.81 ns/op 145.21 ns/op 1.22
Tree 40 250000 set(125000) 3.3260 us/op 1.5399 us/op 2.16
Tree 40 250000 toArray() 23.297 ms/op 21.200 ms/op 1.10
Tree 40 250000 iterate all - toArray() + loop 24.144 ms/op 19.916 ms/op 1.21
Tree 40 250000 iterate all - get(i) 67.094 ms/op 57.163 ms/op 1.17
Array 250000 create 4.6477 ms/op 3.4384 ms/op 1.35
Array 250000 clone - spread 4.2059 ms/op 817.80 us/op 5.14
Array 250000 get(125000) 0.46400 ns/op 0.41600 ns/op 1.12
Array 250000 set(125000) 0.60700 ns/op 0.46700 ns/op 1.30
Array 250000 iterate all - loop 96.145 us/op 111.14 us/op 0.87
phase0 afterProcessEpoch - 250000 vs - 7PWei 54.993 ms/op 43.427 ms/op 1.27
Array.fill - length 1000000 9.3748 ms/op 3.8178 ms/op 2.46
Array push - length 1000000 27.580 ms/op 13.880 ms/op 1.99
Array.get 0.33287 ns/op 0.28216 ns/op 1.18
Uint8Array.get 0.55127 ns/op 0.44578 ns/op 1.24
phase0 beforeProcessEpoch - 250000 vs - 7PWei 22.149 ms/op 16.531 ms/op 1.34
altair processEpoch - mainnet_e81889 393.21 ms/op 253.00 ms/op 1.55
mainnet_e81889 - altair beforeProcessEpoch 42.356 ms/op 18.990 ms/op 2.23
mainnet_e81889 - altair processJustificationAndFinalization 10.786 us/op 5.7920 us/op 1.86
mainnet_e81889 - altair processInactivityUpdates 9.4127 ms/op 4.5080 ms/op 2.09
mainnet_e81889 - altair processRewardsAndPenalties 72.533 ms/op 43.110 ms/op 1.68
mainnet_e81889 - altair processRegistryUpdates 1.5390 us/op 706.00 ns/op 2.18
mainnet_e81889 - altair processSlashings 327.00 ns/op 199.00 ns/op 1.64
mainnet_e81889 - altair processEth1DataReset 304.00 ns/op 178.00 ns/op 1.71
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.6304 ms/op 1.2645 ms/op 2.08
mainnet_e81889 - altair processSlashingsReset 2.0200 us/op 949.00 ns/op 2.13
mainnet_e81889 - altair processRandaoMixesReset 2.1480 us/op 1.2410 us/op 1.73
mainnet_e81889 - altair processHistoricalRootsUpdate 452.00 ns/op 183.00 ns/op 2.47
mainnet_e81889 - altair processParticipationFlagUpdates 1.0990 us/op 565.00 ns/op 1.95
mainnet_e81889 - altair processSyncCommitteeUpdates 337.00 ns/op 151.00 ns/op 2.23
mainnet_e81889 - altair afterProcessEpoch 62.796 ms/op 44.601 ms/op 1.41
capella processEpoch - mainnet_e217614 1.9183 s/op 1.0478 s/op 1.83
mainnet_e217614 - capella beforeProcessEpoch 166.70 ms/op 62.464 ms/op 2.67
mainnet_e217614 - capella processJustificationAndFinalization 15.624 us/op 5.7340 us/op 2.72
mainnet_e217614 - capella processInactivityUpdates 42.384 ms/op 15.325 ms/op 2.77
mainnet_e217614 - capella processRewardsAndPenalties 358.04 ms/op 202.34 ms/op 1.77
mainnet_e217614 - capella processRegistryUpdates 14.544 us/op 6.8590 us/op 2.12
mainnet_e217614 - capella processSlashings 516.00 ns/op 190.00 ns/op 2.72
mainnet_e217614 - capella processEth1DataReset 536.00 ns/op 176.00 ns/op 3.05
mainnet_e217614 - capella processEffectiveBalanceUpdates 25.315 ms/op 4.1943 ms/op 6.04
mainnet_e217614 - capella processSlashingsReset 2.3760 us/op 984.00 ns/op 2.41
mainnet_e217614 - capella processRandaoMixesReset 2.7770 us/op 1.4830 us/op 1.87
mainnet_e217614 - capella processHistoricalRootsUpdate 524.00 ns/op 195.00 ns/op 2.69
mainnet_e217614 - capella processParticipationFlagUpdates 1.3340 us/op 561.00 ns/op 2.38
mainnet_e217614 - capella afterProcessEpoch 142.39 ms/op 117.35 ms/op 1.21
phase0 processEpoch - mainnet_e58758 656.39 ms/op 325.71 ms/op 2.02
mainnet_e58758 - phase0 beforeProcessEpoch 211.41 ms/op 94.830 ms/op 2.23
mainnet_e58758 - phase0 processJustificationAndFinalization 12.623 us/op 6.9630 us/op 1.81
mainnet_e58758 - phase0 processRewardsAndPenalties 68.789 ms/op 41.186 ms/op 1.67
mainnet_e58758 - phase0 processRegistryUpdates 5.8010 us/op 2.9620 us/op 1.96
mainnet_e58758 - phase0 processSlashings 310.00 ns/op 189.00 ns/op 1.64
mainnet_e58758 - phase0 processEth1DataReset 330.00 ns/op 174.00 ns/op 1.90
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 6.8400 ms/op 1.1676 ms/op 5.86
mainnet_e58758 - phase0 processSlashingsReset 2.3050 us/op 1.0060 us/op 2.29
mainnet_e58758 - phase0 processRandaoMixesReset 1.9670 us/op 1.2430 us/op 1.58
mainnet_e58758 - phase0 processHistoricalRootsUpdate 216.00 ns/op 177.00 ns/op 1.22
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.7310 us/op 877.00 ns/op 1.97
mainnet_e58758 - phase0 afterProcessEpoch 106.02 ms/op 35.617 ms/op 2.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.6336 ms/op 1.4567 ms/op 1.81
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 7.2589 ms/op 1.9147 ms/op 3.79
altair processInactivityUpdates - 250000 normalcase 37.292 ms/op 16.223 ms/op 2.30
altair processInactivityUpdates - 250000 worstcase 37.526 ms/op 19.452 ms/op 1.93
phase0 processRegistryUpdates - 250000 normalcase 20.106 us/op 6.4180 us/op 3.13
phase0 processRegistryUpdates - 250000 badcase_full_deposits 583.17 us/op 426.81 us/op 1.37
phase0 processRegistryUpdates - 250000 worstcase 0.5 197.12 ms/op 126.72 ms/op 1.56
altair processRewardsAndPenalties - 250000 normalcase 40.543 ms/op 33.783 ms/op 1.20
altair processRewardsAndPenalties - 250000 worstcase 51.711 ms/op 34.406 ms/op 1.50
phase0 getAttestationDeltas - 250000 normalcase 15.494 ms/op 6.9312 ms/op 2.24
phase0 getAttestationDeltas - 250000 worstcase 9.5122 ms/op 6.5707 ms/op 1.45
phase0 processSlashings - 250000 worstcase 128.20 us/op 122.43 us/op 1.05
altair processSyncCommitteeUpdates - 250000 15.071 ms/op 10.751 ms/op 1.40
BeaconState.hashTreeRoot - No change 263.00 ns/op 223.00 ns/op 1.18
BeaconState.hashTreeRoot - 1 full validator 109.38 us/op 88.808 us/op 1.23
BeaconState.hashTreeRoot - 32 full validator 1.4455 ms/op 1.3317 ms/op 1.09
BeaconState.hashTreeRoot - 512 full validator 14.566 ms/op 11.105 ms/op 1.31
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 142.81 us/op 123.35 us/op 1.16
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.1797 ms/op 2.1075 ms/op 1.03
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 31.434 ms/op 31.267 ms/op 1.01
BeaconState.hashTreeRoot - 1 balances 103.58 us/op 96.425 us/op 1.07
BeaconState.hashTreeRoot - 32 balances 998.44 us/op 1.1923 ms/op 0.84
BeaconState.hashTreeRoot - 512 balances 12.637 ms/op 9.7817 ms/op 1.29
BeaconState.hashTreeRoot - 250000 balances 209.40 ms/op 198.08 ms/op 1.06
aggregationBits - 2048 els - zipIndexesInBitList 26.704 us/op 20.633 us/op 1.29
byteArrayEquals 32 57.561 ns/op 51.795 ns/op 1.11
Buffer.compare 32 18.208 ns/op 16.655 ns/op 1.09
byteArrayEquals 1024 1.7348 us/op 1.5329 us/op 1.13
Buffer.compare 1024 27.010 ns/op 24.860 ns/op 1.09
byteArrayEquals 16384 26.861 us/op 24.862 us/op 1.08
Buffer.compare 16384 205.44 ns/op 183.37 ns/op 1.12
byteArrayEquals 123687377 206.20 ms/op 190.50 ms/op 1.08
Buffer.compare 123687377 9.2149 ms/op 6.7590 ms/op 1.36
byteArrayEquals 32 - diff last byte 56.434 ns/op 52.590 ns/op 1.07
Buffer.compare 32 - diff last byte 17.763 ns/op 17.355 ns/op 1.02
byteArrayEquals 1024 - diff last byte 1.7040 us/op 1.5881 us/op 1.07
Buffer.compare 1024 - diff last byte 26.997 ns/op 24.823 ns/op 1.09
byteArrayEquals 16384 - diff last byte 26.319 us/op 25.240 us/op 1.04
Buffer.compare 16384 - diff last byte 185.98 ns/op 189.21 ns/op 0.98
byteArrayEquals 123687377 - diff last byte 214.85 ms/op 198.64 ms/op 1.08
Buffer.compare 123687377 - diff last byte 9.9639 ms/op 10.400 ms/op 0.96
byteArrayEquals 32 - random bytes 5.5560 ns/op 5.4050 ns/op 1.03
Buffer.compare 32 - random bytes 18.926 ns/op 18.747 ns/op 1.01
byteArrayEquals 1024 - random bytes 5.6330 ns/op 5.4330 ns/op 1.04
Buffer.compare 1024 - random bytes 18.657 ns/op 18.136 ns/op 1.03
byteArrayEquals 16384 - random bytes 5.5970 ns/op 5.4510 ns/op 1.03
Buffer.compare 16384 - random bytes 18.862 ns/op 17.678 ns/op 1.07
byteArrayEquals 123687377 - random bytes 6.9000 ns/op 6.9200 ns/op 1.00
Buffer.compare 123687377 - random bytes 19.830 ns/op 18.960 ns/op 1.05
regular array get 100000 times 47.286 us/op 45.036 us/op 1.05
wrappedArray get 100000 times 35.564 us/op 39.101 us/op 0.91
arrayWithProxy get 100000 times 13.034 ms/op 12.537 ms/op 1.04
ssz.Root.equals 48.370 ns/op 48.895 ns/op 0.99
byteArrayEquals 47.754 ns/op 46.737 ns/op 1.02
Buffer.compare 11.248 ns/op 10.610 ns/op 1.06
processSlot - 1 slots 11.883 us/op 11.311 us/op 1.05
processSlot - 32 slots 3.1666 ms/op 2.3788 ms/op 1.33
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.7877 ms/op 4.7693 ms/op 1.00
getCommitteeAssignments - req 1 vs - 250000 vc 2.2950 ms/op 2.2733 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 4.5947 ms/op 4.2950 ms/op 1.07
getCommitteeAssignments - req 1000 vs - 250000 vc 4.7668 ms/op 4.9535 ms/op 0.96
findModifiedValidators - 10000 modified validators 769.74 ms/op 820.60 ms/op 0.94
findModifiedValidators - 1000 modified validators 823.21 ms/op 832.36 ms/op 0.99
findModifiedValidators - 100 modified validators 315.85 ms/op 231.72 ms/op 1.36
findModifiedValidators - 10 modified validators 213.06 ms/op 282.49 ms/op 0.75
findModifiedValidators - 1 modified validators 202.74 ms/op 308.18 ms/op 0.66
findModifiedValidators - no difference 210.09 ms/op 222.10 ms/op 0.95
compare ViewDUs 8.8633 s/op 7.4428 s/op 1.19
compare each validator Uint8Array 2.1663 s/op 2.0018 s/op 1.08
compare ViewDU to Uint8Array 1.3827 s/op 1.3446 s/op 1.03
migrate state 1000000 validators, 24 modified, 0 new 1.2515 s/op 1.0015 s/op 1.25
migrate state 1000000 validators, 1700 modified, 1000 new 1.6105 s/op 1.4045 s/op 1.15
migrate state 1000000 validators, 3400 modified, 2000 new 1.6612 s/op 1.6239 s/op 1.02
migrate state 1500000 validators, 24 modified, 0 new 1.1227 s/op 1.0545 s/op 1.06
migrate state 1500000 validators, 1700 modified, 1000 new 1.2523 s/op 1.1315 s/op 1.11
migrate state 1500000 validators, 3400 modified, 2000 new 1.4826 s/op 1.5950 s/op 0.93
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.6300 ns/op 4.5100 ns/op 1.25
state getBlockRootAtSlot - 250000 vs - 7PWei 445.71 ns/op 598.76 ns/op 0.74
naive computeProposerIndex 100000 validators 59.522 ms/op 75.659 ms/op 0.79
computeProposerIndex 100000 validators 1.5483 ms/op 1.7870 ms/op 0.87
naiveGetNextSyncCommitteeIndices 1000 validators 8.9672 s/op 9.7376 s/op 0.92
getNextSyncCommitteeIndices 1000 validators 146.47 ms/op 158.56 ms/op 0.92
naiveGetNextSyncCommitteeIndices 10000 validators 8.7063 s/op 10.907 s/op 0.80
getNextSyncCommitteeIndices 10000 validators 120.90 ms/op 170.38 ms/op 0.71
naiveGetNextSyncCommitteeIndices 100000 validators 8.6496 s/op 9.1489 s/op 0.95
getNextSyncCommitteeIndices 100000 validators 116.61 ms/op 137.62 ms/op 0.85
naive computeShuffledIndex 100000 validators 26.335 s/op 27.296 s/op 0.96
cached computeShuffledIndex 100000 validators 589.51 ms/op 557.07 ms/op 1.06
naive computeShuffledIndex 2000000 validators 497.15 s/op 549.07 s/op 0.91
cached computeShuffledIndex 2000000 validators 41.468 s/op 34.798 s/op 1.19
computeProposers - vc 250000 685.81 us/op 596.49 us/op 1.15
computeEpochShuffling - vc 250000 46.104 ms/op 41.885 ms/op 1.10
getNextSyncCommittee - vc 250000 11.329 ms/op 10.420 ms/op 1.09
computeSigningRoot for AttestationData 22.554 us/op 18.543 us/op 1.22
hash AttestationData serialized data then Buffer.toString(base64) 1.6829 us/op 1.5479 us/op 1.09
toHexString serialized data 1.4334 us/op 1.0978 us/op 1.31
Buffer.toString(base64) 160.69 ns/op 160.14 ns/op 1.00
nodejs block root to RootHex using toHex 149.27 ns/op 136.57 ns/op 1.09
nodejs block root to RootHex using toRootHex 86.796 ns/op 87.840 ns/op 0.99
browser block root to RootHex using the deprecated toHexString 226.75 ns/op 210.54 ns/op 1.08
browser block root to RootHex using toHex 175.35 ns/op 170.77 ns/op 1.03
browser block root to RootHex using toRootHex 169.18 ns/op 159.42 ns/op 1.06

by benchmarkbot/action

Copy link
Member

@matthewkeil matthewkeil left a comment

Choose a reason for hiding this comment

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

Few thoughts for the team. What do you think?

Copy link

codecov bot commented Mar 19, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 50.23%. Comparing base (d9bd50b) to head (578014f).
Report is 14 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #7602      +/-   ##
============================================
+ Coverage     50.22%   50.23%   +0.01%     
============================================
  Files           604      604              
  Lines         40466    40466              
  Branches       2228     2228              
============================================
+ Hits          20324    20330       +6     
+ Misses        20102    20094       -8     
- Partials         40       42       +2     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

CONTRIBUTING.md Outdated

- Clearly explain the rationale and motivation behind the change in the PR description.
- Provide relevant context, including:
- Problem the PR is solving.
Copy link
Member

@nflaig nflaig Mar 24, 2025

Choose a reason for hiding this comment

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

this should be indented further as it's sub bullet point of line above

CONTRIBUTING.md Outdated
- Broad overview of how data will flow and integrate with the surrounding sub-systems
- Rough discussion of potential performance (cpu and memory) implications
- Share the document with the team and gather feedback before implementation.
- Create a feature branch to showcase the entire implementation. The idea will be to get this branch deployed on a feature group to test and tune the code on a devnet.
Copy link
Member

Choose a reason for hiding this comment

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

why "on a devnet"? if this change modifies code that is already live on mainnet / public testnet we should get data from those networks and test it there

- Link the discussion in the PR description once consensus is reached.
- If changes affect multiple packages or require coordination with ongoing development, summarize any key decisions from the discussion in the PR description.

### 3. Large Feature or Multi-PR Implementation
Copy link
Member

Choose a reason for hiding this comment

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

what's missing for this kind of large feature changes is that ideally it should be behind a feature flag (similar to how n-historical-states was rolled out), but of course this is not always possible

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes every feature should be rolled out under feature flags (hidden or public), but we are not yet there.

Copy link
Member

Choose a reason for hiding this comment

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

but we are not yet there.

but Tuyen managed to do that, so we should make sure this is desired if possible and should be documented as such

.wordlist.txt Outdated
@@ -160,6 +160,7 @@ feeRecipient
flamegraph
flamegraphs
floodsub
focussed
Copy link
Member

Choose a reason for hiding this comment

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

focused typically has 1 s, so this should be removed.

CONTRIBUTING.md Outdated
- Broad overview of how data will flow and integrate with the surrounding sub-systems
- Rough discussion of potential performance (cpu and memory) implications
- Share the document with the team and gather feedback before implementation.
- Create a feature branch to showcase the entire implementation. The idea will be to get this branch deployed on a feature group to test and tune the code on a devnet.
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 noted, an mvp implementation will hopefully also catch corner cases not anticipated in brainstorming.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added to the list.

CONTRIBUTING.md Outdated
If the PR introduces large-scale changes, affecting multiple areas of the codebase or requiring step-by-step integration:

- Document the feature first before opening any PR.
- Open a Github issue with a detailed technical proposal explaining the feature. This ideally will include some details like:
Copy link
Member

Choose a reason for hiding this comment

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

I don't fully understand why this wouldn't get a Github discussion (Like "2. PR with Major Refactoring) as well instead of an issue? These large features will typically have the most amount of back and forth.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated to the Github Discussion

CONTRIBUTING.md Outdated

If the PR involves significant code refactoring, structural changes, or fundamental modifications where team input is needed:

- Start a GitHub Discussion or Discord thread before writing code.
Copy link
Member

Choose a reason for hiding this comment

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

I would suggest that we do Discord for brainstorm back and forth and use Github Discussions to persist the outcome of what was discussed on the Discord thread.

Copy link
Member

@nflaig nflaig Mar 24, 2025

Choose a reason for hiding this comment

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

I thought it's fine to have both options (as per #7602 (comment)) but personally lean more towards discord for those kind of early (and potentially chaotic / back and forth) discussions

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.

5 participants