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: 77264e0 Previous: 5bc6125 Ratio
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 4.9719 ms/op 1.4855 ms/op 3.35
Full benchmark results
Benchmark suite Current: 77264e0 Previous: 5bc6125 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.0221 ms/op 736.57 us/op 1.39
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 37.872 us/op 29.427 us/op 1.29
BLS verify - blst 888.46 us/op 865.52 us/op 1.03
BLS verifyMultipleSignatures 3 - blst 1.5814 ms/op 1.2583 ms/op 1.26
BLS verifyMultipleSignatures 8 - blst 2.0929 ms/op 1.9919 ms/op 1.05
BLS verifyMultipleSignatures 32 - blst 6.6227 ms/op 4.4245 ms/op 1.50
BLS verifyMultipleSignatures 64 - blst 10.825 ms/op 8.2606 ms/op 1.31
BLS verifyMultipleSignatures 128 - blst 17.547 ms/op 15.686 ms/op 1.12
BLS deserializing 10000 signatures 693.56 ms/op 586.60 ms/op 1.18
BLS deserializing 100000 signatures 6.9258 s/op 5.9052 s/op 1.17
BLS verifyMultipleSignatures - same message - 3 - blst 873.72 us/op 902.39 us/op 0.97
BLS verifyMultipleSignatures - same message - 8 - blst 1.0979 ms/op 1.0542 ms/op 1.04
BLS verifyMultipleSignatures - same message - 32 - blst 1.8656 ms/op 1.6147 ms/op 1.16
BLS verifyMultipleSignatures - same message - 64 - blst 2.6465 ms/op 2.4147 ms/op 1.10
BLS verifyMultipleSignatures - same message - 128 - blst 4.4169 ms/op 3.9618 ms/op 1.11
BLS aggregatePubkeys 32 - blst 19.358 us/op 16.791 us/op 1.15
BLS aggregatePubkeys 128 - blst 69.361 us/op 59.533 us/op 1.17
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 68.528 ms/op 35.803 ms/op 1.91
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 64.177 ms/op 33.876 ms/op 1.89
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 51.290 ms/op 32.182 ms/op 1.59
getSlashingsAndExits - default max 71.555 us/op 45.557 us/op 1.57
getSlashingsAndExits - 2k 329.40 us/op 242.84 us/op 1.36
proposeBlockBody type=full, size=empty 6.8799 ms/op 6.2248 ms/op 1.11
isKnown best case - 1 super set check 199.00 ns/op 405.00 ns/op 0.49
isKnown normal case - 2 super set checks 194.00 ns/op 403.00 ns/op 0.48
isKnown worse case - 16 super set checks 197.00 ns/op 408.00 ns/op 0.48
InMemoryCheckpointStateCache - add get delete 2.3610 us/op 2.3580 us/op 1.00
validate api signedAggregateAndProof - struct 1.7590 ms/op 1.4364 ms/op 1.22
validate gossip signedAggregateAndProof - struct 2.6239 ms/op 1.4401 ms/op 1.82
batch validate gossip attestation - vc 640000 - chunk 32 118.97 us/op 107.54 us/op 1.11
batch validate gossip attestation - vc 640000 - chunk 64 104.35 us/op 92.826 us/op 1.12
batch validate gossip attestation - vc 640000 - chunk 128 96.928 us/op 83.633 us/op 1.16
batch validate gossip attestation - vc 640000 - chunk 256 100.90 us/op 83.061 us/op 1.21
pickEth1Vote - no votes 935.33 us/op 789.39 us/op 1.18
pickEth1Vote - max votes 6.9893 ms/op 4.9131 ms/op 1.42
pickEth1Vote - Eth1Data hashTreeRoot value x2048 10.251 ms/op 9.7548 ms/op 1.05
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 17.071 ms/op 15.189 ms/op 1.12
pickEth1Vote - Eth1Data fastSerialize value x2048 439.51 us/op 309.52 us/op 1.42
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.8931 ms/op 3.7415 ms/op 1.31
bytes32 toHexString 347.00 ns/op 508.00 ns/op 0.68
bytes32 Buffer.toString(hex) 211.00 ns/op 418.00 ns/op 0.50
bytes32 Buffer.toString(hex) from Uint8Array 319.00 ns/op 500.00 ns/op 0.64
bytes32 Buffer.toString(hex) + 0x 318.00 ns/op 415.00 ns/op 0.77
Object access 1 prop 0.10900 ns/op 0.30200 ns/op 0.36
Map access 1 prop 0.12000 ns/op 0.31200 ns/op 0.38
Object get x1000 5.6920 ns/op 5.0690 ns/op 1.12
Map get x1000 6.0620 ns/op 5.7670 ns/op 1.05
Object set x1000 28.327 ns/op 21.574 ns/op 1.31
Map set x1000 19.254 ns/op 16.212 ns/op 1.19
Return object 10000 times 0.28540 ns/op 0.29270 ns/op 0.98
Throw Error 10000 times 4.3121 us/op 3.4346 us/op 1.26
toHex 137.21 ns/op 102.80 ns/op 1.33
Buffer.from 121.82 ns/op 95.395 ns/op 1.28
shared Buffer 83.574 ns/op 65.921 ns/op 1.27
fastMsgIdFn sha256 / 200 bytes 2.1530 us/op 1.9310 us/op 1.11
fastMsgIdFn h32 xxhash / 200 bytes 201.00 ns/op 385.00 ns/op 0.52
fastMsgIdFn h64 xxhash / 200 bytes 261.00 ns/op 444.00 ns/op 0.59
fastMsgIdFn sha256 / 1000 bytes 6.7440 us/op 5.7020 us/op 1.18
fastMsgIdFn h32 xxhash / 1000 bytes 332.00 ns/op 504.00 ns/op 0.66
fastMsgIdFn h64 xxhash / 1000 bytes 335.00 ns/op 514.00 ns/op 0.65
fastMsgIdFn sha256 / 10000 bytes 64.078 us/op 49.325 us/op 1.30
fastMsgIdFn h32 xxhash / 10000 bytes 1.7110 us/op 1.8630 us/op 0.92
fastMsgIdFn h64 xxhash / 10000 bytes 1.1600 us/op 1.3080 us/op 0.89
send data - 1000 256B messages 12.593 ms/op 9.8024 ms/op 1.28
send data - 1000 512B messages 15.782 ms/op 13.133 ms/op 1.20
send data - 1000 1024B messages 23.793 ms/op 20.860 ms/op 1.14
send data - 1000 1200B messages 21.162 ms/op 15.044 ms/op 1.41
send data - 1000 2048B messages 21.431 ms/op 15.463 ms/op 1.39
send data - 1000 4096B messages 25.244 ms/op 17.396 ms/op 1.45
send data - 1000 16384B messages 67.192 ms/op 44.404 ms/op 1.51
send data - 1000 65536B messages 203.03 ms/op 253.32 ms/op 0.80
enrSubnets - fastDeserialize 64 bits 868.00 ns/op 952.00 ns/op 0.91
enrSubnets - ssz BitVector 64 bits 319.00 ns/op 495.00 ns/op 0.64
enrSubnets - fastDeserialize 4 bits 120.00 ns/op 328.00 ns/op 0.37
enrSubnets - ssz BitVector 4 bits 312.00 ns/op 503.00 ns/op 0.62
prioritizePeers score -10:0 att 32-0.1 sync 2-0 111.64 us/op 97.060 us/op 1.15
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 135.83 us/op 117.25 us/op 1.16
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 193.70 us/op 169.91 us/op 1.14
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 357.13 us/op 332.89 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 435.90 us/op 390.40 us/op 1.12
array of 16000 items push then shift 1.5384 us/op 1.2882 us/op 1.19
LinkedList of 16000 items push then shift 6.6260 ns/op 6.2390 ns/op 1.06
array of 16000 items push then pop 73.395 ns/op 60.568 ns/op 1.21
LinkedList of 16000 items push then pop 6.7290 ns/op 6.1150 ns/op 1.10
array of 24000 items push then shift 2.2713 us/op 1.8879 us/op 1.20
LinkedList of 24000 items push then shift 8.4450 ns/op 6.2390 ns/op 1.35
array of 24000 items push then pop 95.302 ns/op 84.973 ns/op 1.12
LinkedList of 24000 items push then pop 6.5000 ns/op 6.1140 ns/op 1.06
intersect bitArray bitLen 8 6.4350 ns/op 5.4360 ns/op 1.18
intersect array and set length 8 37.058 ns/op 32.614 ns/op 1.14
intersect bitArray bitLen 128 29.201 ns/op 26.632 ns/op 1.10
intersect array and set length 128 606.65 ns/op 543.88 ns/op 1.12
bitArray.getTrueBitIndexes() bitLen 128 988.00 ns/op 1.1320 us/op 0.87
bitArray.getTrueBitIndexes() bitLen 248 1.7510 us/op 1.7890 us/op 0.98
bitArray.getTrueBitIndexes() bitLen 512 3.5560 us/op 3.2520 us/op 1.09
Buffer.concat 32 items 708.00 ns/op 773.00 ns/op 0.92
Uint8Array.set 32 items 1.9410 us/op 1.0410 us/op 1.86
Buffer.copy 2.8320 us/op 2.0330 us/op 1.39
Uint8Array.set - with subarray 2.7220 us/op 1.6710 us/op 1.63
Uint8Array.set - without subarray 1.1580 us/op 1.0070 us/op 1.15
getUint32 - dataview 185.00 ns/op 386.00 ns/op 0.48
getUint32 - manual 112.00 ns/op 321.00 ns/op 0.35
Set add up to 64 items then delete first 2.0731 us/op 1.7644 us/op 1.17
OrderedSet add up to 64 items then delete first 3.0608 us/op 2.5214 us/op 1.21
Set add up to 64 items then delete last 2.3544 us/op 1.9199 us/op 1.23
OrderedSet add up to 64 items then delete last 3.4621 us/op 3.0533 us/op 1.13
Set add up to 64 items then delete middle 2.3798 us/op 2.0423 us/op 1.17
OrderedSet add up to 64 items then delete middle 4.8823 us/op 4.5418 us/op 1.07
Set add up to 128 items then delete first 4.7474 us/op 4.0192 us/op 1.18
OrderedSet add up to 128 items then delete first 7.5169 us/op 6.3009 us/op 1.19
Set add up to 128 items then delete last 4.7763 us/op 3.8899 us/op 1.23
OrderedSet add up to 128 items then delete last 6.9535 us/op 5.9226 us/op 1.17
Set add up to 128 items then delete middle 4.6028 us/op 3.8880 us/op 1.18
OrderedSet add up to 128 items then delete middle 13.026 us/op 11.959 us/op 1.09
Set add up to 256 items then delete first 9.9704 us/op 7.8640 us/op 1.27
OrderedSet add up to 256 items then delete first 15.369 us/op 12.347 us/op 1.24
Set add up to 256 items then delete last 9.1838 us/op 7.6274 us/op 1.20
OrderedSet add up to 256 items then delete last 14.157 us/op 11.630 us/op 1.22
Set add up to 256 items then delete middle 9.0800 us/op 7.5998 us/op 1.19
OrderedSet add up to 256 items then delete middle 39.044 us/op 34.299 us/op 1.14
transfer serialized Status (84 B) 2.1950 us/op 1.9860 us/op 1.11
copy serialized Status (84 B) 1.2240 us/op 1.2300 us/op 1.00
transfer serialized SignedVoluntaryExit (112 B) 2.2720 us/op 1.9970 us/op 1.14
copy serialized SignedVoluntaryExit (112 B) 1.2210 us/op 1.2620 us/op 0.97
transfer serialized ProposerSlashing (416 B) 2.4180 us/op 2.0360 us/op 1.19
copy serialized ProposerSlashing (416 B) 2.2660 us/op 1.4980 us/op 1.51
transfer serialized Attestation (485 B) 2.4420 us/op 2.0140 us/op 1.21
copy serialized Attestation (485 B) 1.3030 us/op 1.3600 us/op 0.96
transfer serialized AttesterSlashing (33232 B) 2.6870 us/op 2.0740 us/op 1.30
copy serialized AttesterSlashing (33232 B) 4.0930 us/op 3.1620 us/op 1.29
transfer serialized Small SignedBeaconBlock (128000 B) 3.4200 us/op 2.5460 us/op 1.34
copy serialized Small SignedBeaconBlock (128000 B) 9.6080 us/op 5.8010 us/op 1.66
transfer serialized Avg SignedBeaconBlock (200000 B) 3.6130 us/op 2.3540 us/op 1.53
copy serialized Avg SignedBeaconBlock (200000 B) 13.359 us/op 8.2620 us/op 1.62
transfer serialized BlobsSidecar (524380 B) 3.5290 us/op 3.0250 us/op 1.17
copy serialized BlobsSidecar (524380 B) 95.277 us/op 59.729 us/op 1.60
transfer serialized Big SignedBeaconBlock (1000000 B) 3.6880 us/op 3.5360 us/op 1.04
copy serialized Big SignedBeaconBlock (1000000 B) 114.76 us/op 108.81 us/op 1.05
pass gossip attestations to forkchoice per slot 2.7090 ms/op 2.3284 ms/op 1.16
forkChoice updateHead vc 100000 bc 64 eq 0 444.08 us/op 369.20 us/op 1.20
forkChoice updateHead vc 600000 bc 64 eq 0 2.7050 ms/op 2.0553 ms/op 1.32
forkChoice updateHead vc 1000000 bc 64 eq 0 5.1945 ms/op 3.7589 ms/op 1.38
forkChoice updateHead vc 600000 bc 320 eq 0 2.7002 ms/op 2.0679 ms/op 1.31
forkChoice updateHead vc 600000 bc 1200 eq 0 2.7560 ms/op 2.2804 ms/op 1.21
forkChoice updateHead vc 600000 bc 7200 eq 0 3.2210 ms/op 2.2987 ms/op 1.40
forkChoice updateHead vc 600000 bc 64 eq 1000 10.040 ms/op 9.5019 ms/op 1.06
forkChoice updateHead vc 600000 bc 64 eq 10000 10.003 ms/op 8.9692 ms/op 1.12
forkChoice updateHead vc 600000 bc 64 eq 300000 13.451 ms/op 10.731 ms/op 1.25
computeDeltas 500000 validators 300 proto nodes 3.7797 ms/op 3.0892 ms/op 1.22
computeDeltas 500000 validators 1200 proto nodes 3.7863 ms/op 3.0433 ms/op 1.24
computeDeltas 500000 validators 7200 proto nodes 3.8399 ms/op 3.0224 ms/op 1.27
computeDeltas 750000 validators 300 proto nodes 5.7669 ms/op 4.4647 ms/op 1.29
computeDeltas 750000 validators 1200 proto nodes 5.7861 ms/op 4.5173 ms/op 1.28
computeDeltas 750000 validators 7200 proto nodes 5.7942 ms/op 4.5842 ms/op 1.26
computeDeltas 1400000 validators 300 proto nodes 10.989 ms/op 8.4893 ms/op 1.29
computeDeltas 1400000 validators 1200 proto nodes 10.942 ms/op 8.5508 ms/op 1.28
computeDeltas 1400000 validators 7200 proto nodes 11.046 ms/op 8.5448 ms/op 1.29
computeDeltas 2100000 validators 300 proto nodes 16.740 ms/op 12.724 ms/op 1.32
computeDeltas 2100000 validators 1200 proto nodes 16.854 ms/op 12.843 ms/op 1.31
computeDeltas 2100000 validators 7200 proto nodes 16.940 ms/op 12.676 ms/op 1.34
altair processAttestation - 250000 vs - 7PWei normalcase 2.5010 ms/op 1.6542 ms/op 1.51
altair processAttestation - 250000 vs - 7PWei worstcase 3.7986 ms/op 2.5247 ms/op 1.50
altair processAttestation - setStatus - 1/6 committees join 142.84 us/op 93.524 us/op 1.53
altair processAttestation - setStatus - 1/3 committees join 284.69 us/op 190.48 us/op 1.49
altair processAttestation - setStatus - 1/2 committees join 347.70 us/op 258.69 us/op 1.34
altair processAttestation - setStatus - 2/3 committees join 478.64 us/op 354.50 us/op 1.35
altair processAttestation - setStatus - 4/5 committees join 645.09 us/op 486.86 us/op 1.33
altair processAttestation - setStatus - 100% committees join 731.15 us/op 559.53 us/op 1.31
altair processBlock - 250000 vs - 7PWei normalcase 11.382 ms/op 6.1888 ms/op 1.84
altair processBlock - 250000 vs - 7PWei normalcase hashState 56.816 ms/op 49.416 ms/op 1.15
altair processBlock - 250000 vs - 7PWei worstcase 35.946 ms/op 33.815 ms/op 1.06
altair processBlock - 250000 vs - 7PWei worstcase hashState 101.87 ms/op 87.524 ms/op 1.16
phase0 processBlock - 250000 vs - 7PWei normalcase 2.3145 ms/op 1.9321 ms/op 1.20
phase0 processBlock - 250000 vs - 7PWei worstcase 27.469 ms/op 20.740 ms/op 1.32
altair processEth1Data - 250000 vs - 7PWei normalcase 346.05 us/op 278.41 us/op 1.24
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 7.0340 us/op 4.2060 us/op 1.67
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 46.105 us/op 42.123 us/op 1.09
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 11.652 us/op 8.0020 us/op 1.46
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.8540 us/op 4.3450 us/op 1.58
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 176.40 us/op 110.11 us/op 1.60
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.2771 ms/op 1.2706 ms/op 1.01
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.6975 ms/op 989.93 us/op 1.71
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7929 ms/op 1.0907 ms/op 1.64
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.3687 ms/op 2.7174 ms/op 1.61
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.8926 ms/op 1.1304 ms/op 1.67
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.4730 ms/op 3.0264 ms/op 1.48
Tree 40 250000 create 710.60 ms/op 333.45 ms/op 2.13
Tree 40 250000 get(125000) 150.61 ns/op 103.41 ns/op 1.46
Tree 40 250000 set(125000) 2.5382 us/op 1.0848 us/op 2.34
Tree 40 250000 toArray() 22.842 ms/op 9.5096 ms/op 2.40
Tree 40 250000 iterate all - toArray() + loop 24.186 ms/op 9.6329 ms/op 2.51
Tree 40 250000 iterate all - get(i) 65.293 ms/op 39.311 ms/op 1.66
Array 250000 create 3.4675 ms/op 2.2955 ms/op 1.51
Array 250000 clone - spread 1.9673 ms/op 633.68 us/op 3.10
Array 250000 get(125000) 0.42000 ns/op 0.58200 ns/op 0.72
Array 250000 set(125000) 0.44300 ns/op 0.59600 ns/op 0.74
Array 250000 iterate all - loop 86.413 us/op 77.383 us/op 1.12
phase0 afterProcessEpoch - 250000 vs - 7PWei 45.632 ms/op 38.984 ms/op 1.17
Array.fill - length 1000000 4.7524 ms/op 2.4070 ms/op 1.97
Array push - length 1000000 20.872 ms/op 9.1813 ms/op 2.27
Array.get 0.29228 ns/op 0.24776 ns/op 1.18
Uint8Array.get 0.46501 ns/op 0.31985 ns/op 1.45
phase0 beforeProcessEpoch - 250000 vs - 7PWei 22.641 ms/op 15.382 ms/op 1.47
altair processEpoch - mainnet_e81889 365.35 ms/op 274.51 ms/op 1.33
mainnet_e81889 - altair beforeProcessEpoch 23.736 ms/op 19.322 ms/op 1.23
mainnet_e81889 - altair processJustificationAndFinalization 7.1150 us/op 4.5140 us/op 1.58
mainnet_e81889 - altair processInactivityUpdates 7.0197 ms/op 3.9759 ms/op 1.77
mainnet_e81889 - altair processRewardsAndPenalties 55.543 ms/op 53.270 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 735.00 ns/op 854.00 ns/op 0.86
mainnet_e81889 - altair processSlashings 210.00 ns/op 411.00 ns/op 0.51
mainnet_e81889 - altair processEth1DataReset 203.00 ns/op 397.00 ns/op 0.51
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3407 ms/op 917.73 us/op 1.46
mainnet_e81889 - altair processSlashingsReset 1.1170 us/op 1.2950 us/op 0.86
mainnet_e81889 - altair processRandaoMixesReset 1.3980 us/op 1.1950 us/op 1.17
mainnet_e81889 - altair processHistoricalRootsUpdate 199.00 ns/op 387.00 ns/op 0.51
mainnet_e81889 - altair processParticipationFlagUpdates 586.00 ns/op 685.00 ns/op 0.86
mainnet_e81889 - altair processSyncCommitteeUpdates 149.00 ns/op 351.00 ns/op 0.42
mainnet_e81889 - altair afterProcessEpoch 47.233 ms/op 38.565 ms/op 1.22
capella processEpoch - mainnet_e217614 1.2305 s/op 955.86 ms/op 1.29
mainnet_e217614 - capella beforeProcessEpoch 98.090 ms/op 66.327 ms/op 1.48
mainnet_e217614 - capella processJustificationAndFinalization 6.6870 us/op 4.5910 us/op 1.46
mainnet_e217614 - capella processInactivityUpdates 25.821 ms/op 13.367 ms/op 1.93
mainnet_e217614 - capella processRewardsAndPenalties 269.39 ms/op 207.79 ms/op 1.30
mainnet_e217614 - capella processRegistryUpdates 8.0020 us/op 5.1540 us/op 1.55
mainnet_e217614 - capella processSlashings 192.00 ns/op 392.00 ns/op 0.49
mainnet_e217614 - capella processEth1DataReset 189.00 ns/op 385.00 ns/op 0.49
mainnet_e217614 - capella processEffectiveBalanceUpdates 18.524 ms/op 9.6782 ms/op 1.91
mainnet_e217614 - capella processSlashingsReset 1.2010 us/op 1.1620 us/op 1.03
mainnet_e217614 - capella processRandaoMixesReset 1.5900 us/op 1.2860 us/op 1.24
mainnet_e217614 - capella processHistoricalRootsUpdate 234.00 ns/op 397.00 ns/op 0.59
mainnet_e217614 - capella processParticipationFlagUpdates 737.00 ns/op 688.00 ns/op 1.07
mainnet_e217614 - capella afterProcessEpoch 127.42 ms/op 108.54 ms/op 1.17
phase0 processEpoch - mainnet_e58758 387.05 ms/op 277.37 ms/op 1.40
mainnet_e58758 - phase0 beforeProcessEpoch 119.02 ms/op 70.390 ms/op 1.69
mainnet_e58758 - phase0 processJustificationAndFinalization 7.7490 us/op 5.5360 us/op 1.40
mainnet_e58758 - phase0 processRewardsAndPenalties 49.051 ms/op 44.329 ms/op 1.11
mainnet_e58758 - phase0 processRegistryUpdates 3.9630 us/op 2.8800 us/op 1.38
mainnet_e58758 - phase0 processSlashings 213.00 ns/op 393.00 ns/op 0.54
mainnet_e58758 - phase0 processEth1DataReset 212.00 ns/op 403.00 ns/op 0.53
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1481 ms/op 841.38 us/op 1.36
mainnet_e58758 - phase0 processSlashingsReset 1.4030 us/op 1.0420 us/op 1.35
mainnet_e58758 - phase0 processRandaoMixesReset 1.5700 us/op 1.3080 us/op 1.20
mainnet_e58758 - phase0 processHistoricalRootsUpdate 199.00 ns/op 390.00 ns/op 0.51
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0230 us/op 1.1830 us/op 0.86
mainnet_e58758 - phase0 afterProcessEpoch 39.529 ms/op 33.417 ms/op 1.18
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.7640 ms/op 914.37 us/op 1.93
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 4.9719 ms/op 1.4855 ms/op 3.35
altair processInactivityUpdates - 250000 normalcase 26.302 ms/op 18.601 ms/op 1.41
altair processInactivityUpdates - 250000 worstcase 24.827 ms/op 18.647 ms/op 1.33
phase0 processRegistryUpdates - 250000 normalcase 16.707 us/op 4.6140 us/op 3.62
phase0 processRegistryUpdates - 250000 badcase_full_deposits 372.16 us/op 293.07 us/op 1.27
phase0 processRegistryUpdates - 250000 worstcase 0.5 158.61 ms/op 104.52 ms/op 1.52
altair processRewardsAndPenalties - 250000 normalcase 48.049 ms/op 45.684 ms/op 1.05
altair processRewardsAndPenalties - 250000 worstcase 42.938 ms/op 33.512 ms/op 1.28
phase0 getAttestationDeltas - 250000 normalcase 8.6807 ms/op 4.9304 ms/op 1.76
phase0 getAttestationDeltas - 250000 worstcase 7.2402 ms/op 4.9801 ms/op 1.45
phase0 processSlashings - 250000 worstcase 133.69 us/op 84.759 us/op 1.58
altair processSyncCommitteeUpdates - 250000 14.561 ms/op 9.2816 ms/op 1.57
BeaconState.hashTreeRoot - No change 341.00 ns/op 451.00 ns/op 0.76
BeaconState.hashTreeRoot - 1 full validator 142.19 us/op 85.233 us/op 1.67
BeaconState.hashTreeRoot - 32 full validator 1.2063 ms/op 922.42 us/op 1.31
BeaconState.hashTreeRoot - 512 full validator 14.785 ms/op 11.385 ms/op 1.30
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 140.25 us/op 104.11 us/op 1.35
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.0169 ms/op 1.6274 ms/op 1.24
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 34.430 ms/op 22.471 ms/op 1.53
BeaconState.hashTreeRoot - 1 balances 90.823 us/op 75.677 us/op 1.20
BeaconState.hashTreeRoot - 32 balances 867.49 us/op 747.77 us/op 1.16
BeaconState.hashTreeRoot - 512 balances 9.5142 ms/op 6.1200 ms/op 1.55
BeaconState.hashTreeRoot - 250000 balances 169.13 ms/op 171.84 ms/op 0.98
aggregationBits - 2048 els - zipIndexesInBitList 23.732 us/op 17.354 us/op 1.37
byteArrayEquals 32 55.452 ns/op 46.871 ns/op 1.18
Buffer.compare 32 18.043 ns/op 16.056 ns/op 1.12
byteArrayEquals 1024 1.6699 us/op 1.2845 us/op 1.30
Buffer.compare 1024 26.519 ns/op 24.838 ns/op 1.07
byteArrayEquals 16384 26.229 us/op 20.301 us/op 1.29
Buffer.compare 16384 185.69 ns/op 168.31 ns/op 1.10
byteArrayEquals 123687377 196.55 ms/op 152.93 ms/op 1.29
Buffer.compare 123687377 6.6719 ms/op 3.6628 ms/op 1.82
byteArrayEquals 32 - diff last byte 54.620 ns/op 47.428 ns/op 1.15
Buffer.compare 32 - diff last byte 17.844 ns/op 16.372 ns/op 1.09
byteArrayEquals 1024 - diff last byte 1.6572 us/op 1.2727 us/op 1.30
Buffer.compare 1024 - diff last byte 27.377 ns/op 23.613 ns/op 1.16
byteArrayEquals 16384 - diff last byte 26.408 us/op 20.158 us/op 1.31
Buffer.compare 16384 - diff last byte 195.62 ns/op 175.81 ns/op 1.11
byteArrayEquals 123687377 - diff last byte 194.53 ms/op 152.43 ms/op 1.28
Buffer.compare 123687377 - diff last byte 7.4027 ms/op 3.7149 ms/op 1.99
byteArrayEquals 32 - random bytes 5.1720 ns/op 4.9420 ns/op 1.05
Buffer.compare 32 - random bytes 17.423 ns/op 16.492 ns/op 1.06
byteArrayEquals 1024 - random bytes 5.2080 ns/op 4.9190 ns/op 1.06
Buffer.compare 1024 - random bytes 17.415 ns/op 16.204 ns/op 1.07
byteArrayEquals 16384 - random bytes 5.1870 ns/op 5.6930 ns/op 0.91
Buffer.compare 16384 - random bytes 17.506 ns/op 16.595 ns/op 1.05
byteArrayEquals 123687377 - random bytes 8.3900 ns/op 7.8300 ns/op 1.07
Buffer.compare 123687377 - random bytes 28.610 ns/op 19.690 ns/op 1.45
regular array get 100000 times 44.830 us/op 30.821 us/op 1.45
wrappedArray get 100000 times 33.323 us/op 30.787 us/op 1.08
arrayWithProxy get 100000 times 13.892 ms/op 10.394 ms/op 1.34
ssz.Root.equals 46.988 ns/op 44.053 ns/op 1.07
byteArrayEquals 46.088 ns/op 43.219 ns/op 1.07
Buffer.compare 10.598 ns/op 9.7300 ns/op 1.09
processSlot - 1 slots 10.774 us/op 9.2760 us/op 1.16
processSlot - 32 slots 2.0564 ms/op 2.8121 ms/op 0.73
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 58.816 ms/op 57.907 ms/op 1.02
getCommitteeAssignments - req 1 vs - 250000 vc 2.1577 ms/op 1.6865 ms/op 1.28
getCommitteeAssignments - req 100 vs - 250000 vc 3.9227 ms/op 3.3151 ms/op 1.18
getCommitteeAssignments - req 1000 vs - 250000 vc 4.2088 ms/op 3.5277 ms/op 1.19
findModifiedValidators - 10000 modified validators 773.79 ms/op 749.04 ms/op 1.03
findModifiedValidators - 1000 modified validators 765.55 ms/op 655.54 ms/op 1.17
findModifiedValidators - 100 modified validators 216.81 ms/op 219.98 ms/op 0.99
findModifiedValidators - 10 modified validators 154.75 ms/op 126.47 ms/op 1.22
findModifiedValidators - 1 modified validators 159.85 ms/op 153.80 ms/op 1.04
findModifiedValidators - no difference 169.95 ms/op 143.20 ms/op 1.19
compare ViewDUs 6.6097 s/op 6.0363 s/op 1.09
compare each validator Uint8Array 1.3222 s/op 1.4559 s/op 0.91
compare ViewDU to Uint8Array 1.3988 s/op 731.21 ms/op 1.91
migrate state 1000000 validators, 24 modified, 0 new 949.49 ms/op 831.53 ms/op 1.14
migrate state 1000000 validators, 1700 modified, 1000 new 1.1987 s/op 1.1246 s/op 1.07
migrate state 1000000 validators, 3400 modified, 2000 new 1.3747 s/op 1.3277 s/op 1.04
migrate state 1500000 validators, 24 modified, 0 new 956.84 ms/op 789.92 ms/op 1.21
migrate state 1500000 validators, 1700 modified, 1000 new 1.1758 s/op 1.1156 s/op 1.05
migrate state 1500000 validators, 3400 modified, 2000 new 1.4419 s/op 1.3264 s/op 1.09
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2600 ns/op 5.8200 ns/op 0.73
state getBlockRootAtSlot - 250000 vs - 7PWei 489.10 ns/op 439.10 ns/op 1.11
naive computeProposerIndex 100000 validators 54.543 ms/op 42.288 ms/op 1.29
computeProposerIndex 100000 validators 1.5319 ms/op 1.2322 ms/op 1.24
naiveGetNextSyncCommitteeIndices 1000 validators 8.3477 s/op 6.1786 s/op 1.35
getNextSyncCommitteeIndices 1000 validators 112.28 ms/op 93.394 ms/op 1.20
naiveGetNextSyncCommitteeIndices 10000 validators 8.3376 s/op 6.1590 s/op 1.35
getNextSyncCommitteeIndices 10000 validators 114.22 ms/op 86.751 ms/op 1.32
naiveGetNextSyncCommitteeIndices 100000 validators 8.6804 s/op 6.2014 s/op 1.40
getNextSyncCommitteeIndices 100000 validators 119.24 ms/op 91.877 ms/op 1.30
naive computeShuffledIndex 100000 validators 27.298 s/op 20.945 s/op 1.30
cached computeShuffledIndex 100000 validators 551.56 ms/op 464.75 ms/op 1.19
naive computeShuffledIndex 2000000 validators 516.99 s/op 394.87 s/op 1.31
cached computeShuffledIndex 2000000 validators 42.073 s/op 14.976 s/op 2.81
computeProposers - vc 250000 607.60 us/op 524.86 us/op 1.16
computeEpochShuffling - vc 250000 42.967 ms/op 37.630 ms/op 1.14
getNextSyncCommittee - vc 250000 11.083 ms/op 9.1883 ms/op 1.21
computeSigningRoot for AttestationData 23.707 us/op 19.737 us/op 1.20
hash AttestationData serialized data then Buffer.toString(base64) 1.6257 us/op 1.1719 us/op 1.39
toHexString serialized data 1.2378 us/op 962.83 ns/op 1.29
Buffer.toString(base64) 178.32 ns/op 110.36 ns/op 1.62
nodejs block root to RootHex using toHex 142.06 ns/op 112.36 ns/op 1.26
nodejs block root to RootHex using toRootHex 88.644 ns/op 74.578 ns/op 1.19
browser block root to RootHex using the deprecated toHexString 280.80 ns/op 200.13 ns/op 1.40
browser block root to RootHex using toHex 181.08 ns/op 154.77 ns/op 1.17
browser block root to RootHex using toRootHex 166.77 ns/op 136.90 ns/op 1.22

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 (df2afef).
Report is 12 commits behind head on unstable.

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #7602   +/-   ##
=========================================
  Coverage     50.22%   50.23%           
=========================================
  Files           604      604           
  Lines         40466    40454   -12     
  Branches       2228     2229    +1     
=========================================
- Hits          20324    20321    -3     
+ Misses        20102    20091   -11     
- 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