Skip to content

feat: automate project board PR status transitions - #9732

Draft
matthewkeil wants to merge 14 commits into
unstablefrom
mkeil/automate-project-board
Draft

feat: automate project board PR status transitions#9732
matthewkeil wants to merge 14 commits into
unstablefrom
mkeil/automate-project-board

Conversation

@matthewkeil

@matthewkeil matthewkeil commented Jul 30, 2026

Copy link
Copy Markdown
Member

Automates the swim lane movement for PR cards on the Lodestar Team Coordination board. The behavior contract lives in .github/specs/project-automation.md. Is worth reading before the code.

  • Requesting (or re-requesting) a review moves the card to Review Requested. That click is the signal.
  • A comment or changes-requested review moves it to Awaiting Author. An approval only moves it there once no other reviewers are pending.
  • Drafts and pushed commits never move cards. Team-level requests (CODEOWNERS noise) and bot reviews are ignored.
  • A 15-minute sweep self-heals missed events, covers fork PRs (their review events get no secrets)
  • Instead of event→action rules, the script recomputes the lane from full PR state every time, so it's idempotent and immune to event ordering/coalescing.

Other repos on the board opt in later via the thin caller template (.github/specs/project-board-caller.yml).

Add github.ts (GraphQL client, project config resolution, PR fetch,
status mutation, board sweep listing) and main.ts (CLI entrypoint
supporting event, --sweep, and --pr modes).

Also add a package.json with "type": "module" scoped to this
directory: without it, tsc's nodenext module resolution treats
main.ts as CommonJS (no ancestor package.json declares a module
type) and rejects its top-level await, even though Node's runtime
syntax detection already handles it correctly.
Removes a shell-injection surface in the reconcile run-line by passing
the workflow_dispatch pr input through an env var instead of inline
expression interpolation, adds a startup mode log and upfront
validation that every STATUS_TO_LANE entry exists as a board option
(fails loudly in dry-run instead of only at write time), null-guards a
missing GraphQL organization, adds job timeouts, documents the
PROJECT_BOARD_DRY_RUN variable's scope and concurrency caveat in the
caller template, and clarifies the tie-break rule in the spec to match
the existing implementation.
The live board's "Review Requested" option was renamed in place (was
"Review Ready/Requested"); update STATUS_TO_LANE and the matching plan
doc excerpt to match so the reconciler's lane validation resolves
correctly again.
… to managed lanes

Statusless and stale cards must never be touched automatically by the
sweep. Initial placement (adding the card via addProjectV2ItemById if
the built-in auto-add hasn't landed it yet, then setting its lane)
moves to event runs and the --pr path; the sweep goes back to only
recomputing cards already sitting in the three automated lanes.
@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 56e56f6 Previous: 4191d8e Ratio
proposeBlockBody type=full, size=empty 588.75 us/op 3.6516 ms/op 0.16
Full benchmark results
Benchmark suite Current: 56e56f6 Previous: 4191d8e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 862.53 us/op 1.3591 ms/op 0.63
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.362 us/op 40.785 us/op 0.94
BLS verify - blst 658.72 us/op 873.72 us/op 0.75
BLS verifyMultipleSignatures 3 - blst 1.4076 ms/op 1.3751 ms/op 1.02
BLS verifyMultipleSignatures 8 - blst 2.2374 ms/op 2.1672 ms/op 1.03
BLS verifyMultipleSignatures 32 - blst 6.9229 ms/op 6.8164 ms/op 1.02
BLS verifyMultipleSignatures 64 - blst 13.214 ms/op 12.975 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 26.369 ms/op 25.814 ms/op 1.02
BLS deserializing 10000 signatures 633.31 ms/op 637.50 ms/op 0.99
BLS deserializing 100000 signatures 6.4209 s/op 6.6307 s/op 0.97
BLS verifyMultipleSignatures - same message - 3 - blst 821.74 us/op 813.83 us/op 1.01
BLS verifyMultipleSignatures - same message - 8 - blst 961.84 us/op 903.57 us/op 1.06
BLS verifyMultipleSignatures - same message - 32 - blst 1.5520 ms/op 1.5546 ms/op 1.00
BLS verifyMultipleSignatures - same message - 64 - blst 2.4668 ms/op 2.4329 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 3.9889 ms/op 4.0664 ms/op 0.98
BLS aggregatePubkeys 32 - blst 17.800 us/op 18.163 us/op 0.98
BLS aggregatePubkeys 128 - blst 62.950 us/op 66.094 us/op 0.95
getSlashingsAndExits - default max 46.196 us/op 51.188 us/op 0.90
getSlashingsAndExits - 2k 349.25 us/op 512.87 us/op 0.68
proposeBlockBody type=full, size=empty 588.75 us/op 3.6516 ms/op 0.16
isKnown best case - 1 super set check 395.00 ns/op 168.00 ns/op 2.35
isKnown normal case - 2 super set checks 391.00 ns/op 163.00 ns/op 2.40
isKnown worse case - 16 super set checks 388.00 ns/op 150.00 ns/op 2.59
validate api signedAggregateAndProof - struct 1.5559 ms/op 1.5554 ms/op 1.00
validate gossip signedAggregateAndProof - struct 1.5577 ms/op 1.5667 ms/op 0.99
batch validate gossip attestation - vc 640000 - chunk 32 107.17 us/op 116.38 us/op 0.92
batch validate gossip attestation - vc 640000 - chunk 64 93.826 us/op 104.13 us/op 0.90
batch validate gossip attestation - vc 640000 - chunk 128 87.333 us/op 96.909 us/op 0.90
batch validate gossip attestation - vc 640000 - chunk 256 84.671 us/op 93.798 us/op 0.90
bytes32 toHexString 502.00 ns/op 287.00 ns/op 1.75
bytes32 Buffer.toString(hex) 386.00 ns/op 164.00 ns/op 2.35
bytes32 Buffer.toString(hex) from Uint8Array 453.00 ns/op 234.00 ns/op 1.94
bytes32 Buffer.toString(hex) + 0x 386.00 ns/op 165.00 ns/op 2.34
Return object 10000 times 0.23030 ns/op 0.21510 ns/op 1.07
Throw Error 10000 times 3.3710 us/op 3.4160 us/op 0.99
toHex 106.77 ns/op 98.652 ns/op 1.08
Buffer.from 91.655 ns/op 86.334 ns/op 1.06
shared Buffer 63.427 ns/op 62.194 ns/op 1.02
fastMsgIdFn sha256 / 200 bytes 1.7550 us/op 1.5260 us/op 1.15
fastMsgIdFn h32 xxhash / 200 bytes 362.00 ns/op 155.00 ns/op 2.34
fastMsgIdFn h64 xxhash / 200 bytes 409.00 ns/op 207.00 ns/op 1.98
fastMsgIdFn sha256 / 1000 bytes 5.2190 us/op 4.7900 us/op 1.09
fastMsgIdFn h32 xxhash / 1000 bytes 450.00 ns/op 251.00 ns/op 1.79
fastMsgIdFn h64 xxhash / 1000 bytes 455.00 ns/op 260.00 ns/op 1.75
fastMsgIdFn sha256 / 10000 bytes 42.807 us/op 41.630 us/op 1.03
fastMsgIdFn h32 xxhash / 10000 bytes 1.4750 us/op 1.2720 us/op 1.16
fastMsgIdFn h64 xxhash / 10000 bytes 1.0370 us/op 829.00 ns/op 1.25
send data - 1000 256B messages 4.2405 ms/op 4.7623 ms/op 0.89
send data - 1000 512B messages 5.7905 ms/op 6.0803 ms/op 0.95
send data - 1000 1024B messages 6.2460 ms/op 6.2410 ms/op 1.00
send data - 1000 1200B messages 6.9825 ms/op 7.1509 ms/op 0.98
send data - 1000 2048B messages 13.837 ms/op 9.6533 ms/op 1.43
send data - 1000 4096B messages 62.709 ms/op 87.750 ms/op 0.71
send data - 1000 16384B messages 289.82 ms/op 183.22 ms/op 1.58
send data - 1000 65536B messages 1.1709 s/op 940.25 ms/op 1.25
enrSubnets - fastDeserialize 64 bits 1.0030 us/op 768.00 ns/op 1.31
enrSubnets - ssz BitVector 64 bits 484.00 ns/op 260.00 ns/op 1.86
enrSubnets - fastDeserialize 4 bits 295.00 ns/op 104.00 ns/op 2.84
enrSubnets - ssz BitVector 4 bits 497.00 ns/op 276.00 ns/op 1.80
prioritizePeers score -10:0 att 32-0.1 sync 2-0 453.57 us/op 205.41 us/op 2.21
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 311.32 us/op 228.10 us/op 1.36
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 488.10 us/op 336.82 us/op 1.45
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 635.43 us/op 591.58 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 754.91 us/op 690.58 us/op 1.09
array of 16000 items push then shift 1.3008 us/op 1.2713 us/op 1.02
LinkedList of 16000 items push then shift 7.2670 ns/op 7.6500 ns/op 0.95
array of 16000 items push then pop 68.708 ns/op 79.581 ns/op 0.86
LinkedList of 16000 items push then pop 6.4080 ns/op 6.0090 ns/op 1.07
array of 24000 items push then shift 1.9243 us/op 1.8915 us/op 1.02
LinkedList of 24000 items push then shift 6.7400 ns/op 7.3210 ns/op 0.92
array of 24000 items push then pop 94.538 ns/op 116.95 ns/op 0.81
LinkedList of 24000 items push then pop 6.4260 ns/op 6.1130 ns/op 1.05
intersect bitArray bitLen 8 4.0810 ns/op 3.9400 ns/op 1.04
intersect array and set length 8 30.512 ns/op 29.677 ns/op 1.03
intersect bitArray bitLen 128 23.475 ns/op 23.641 ns/op 0.99
intersect array and set length 128 516.36 ns/op 495.31 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 128 1.1390 us/op 956.00 ns/op 1.19
bitArray.getTrueBitIndexes() bitLen 248 1.8590 us/op 1.7590 us/op 1.06
bitArray.getTrueBitIndexes() bitLen 512 3.6560 us/op 3.9990 us/op 0.91
Full columns - reconstruct all 6 blobs 200.72 us/op 200.30 us/op 1.00
Full columns - reconstruct half of the blobs out of 6 72.537 us/op 79.603 us/op 0.91
Full columns - reconstruct single blob out of 6 35.355 us/op 33.772 us/op 1.05
Half columns - reconstruct all 6 blobs 404.39 ms/op 391.62 ms/op 1.03
Half columns - reconstruct half of the blobs out of 6 200.42 ms/op 195.11 ms/op 1.03
Half columns - reconstruct single blob out of 6 72.240 ms/op 68.855 ms/op 1.05
Set add up to 64 items then delete first 2.1774 us/op 1.6531 us/op 1.32
OrderedSet add up to 64 items then delete first 3.4495 us/op 2.5142 us/op 1.37
Set add up to 64 items then delete last 2.4303 us/op 1.8429 us/op 1.32
OrderedSet add up to 64 items then delete last 3.3559 us/op 2.7481 us/op 1.22
Set add up to 64 items then delete middle 2.2072 us/op 1.8400 us/op 1.20
OrderedSet add up to 64 items then delete middle 4.8609 us/op 4.1702 us/op 1.17
Set add up to 128 items then delete first 4.3759 us/op 3.6193 us/op 1.21
OrderedSet add up to 128 items then delete first 6.7529 us/op 5.6452 us/op 1.20
Set add up to 128 items then delete last 4.1821 us/op 3.4839 us/op 1.20
OrderedSet add up to 128 items then delete last 6.0266 us/op 5.3975 us/op 1.12
Set add up to 128 items then delete middle 4.0439 us/op 3.5720 us/op 1.13
OrderedSet add up to 128 items then delete middle 12.141 us/op 11.398 us/op 1.07
Set add up to 256 items then delete first 8.8974 us/op 7.4638 us/op 1.19
OrderedSet add up to 256 items then delete first 12.767 us/op 12.450 us/op 1.03
Set add up to 256 items then delete last 8.0930 us/op 7.1550 us/op 1.13
OrderedSet add up to 256 items then delete last 12.110 us/op 11.884 us/op 1.02
Set add up to 256 items then delete middle 8.0509 us/op 7.6054 us/op 1.06
OrderedSet add up to 256 items then delete middle 36.231 us/op 35.150 us/op 1.03
runFastConfirmationRules vc:100000 bc:96 eq:0 5.1561 ms/op 4.7317 ms/op 1.09
runFastConfirmationRules vc:600000 bc:96 eq:0 38.438 ms/op 36.891 ms/op 1.04
runFastConfirmationRules vc:1000000 bc:96 eq:0 60.078 ms/op 62.375 ms/op 0.96
runFastConfirmationRules vc:600000 bc:320 eq:0 36.259 ms/op 37.277 ms/op 0.97
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1181 s/op 1.2446 s/op 0.90
pass gossip attestations to forkchoice per slot 2.5982 ms/op 2.5913 ms/op 1.00
forkChoice updateHead vc 100000 bc 64 eq 0 470.98 us/op 401.87 us/op 1.17
forkChoice updateHead vc 600000 bc 64 eq 0 2.8047 ms/op 2.4137 ms/op 1.16
forkChoice updateHead vc 1000000 bc 64 eq 0 4.7068 ms/op 4.3289 ms/op 1.09
forkChoice updateHead vc 600000 bc 320 eq 0 2.8214 ms/op 2.5974 ms/op 1.09
forkChoice updateHead vc 600000 bc 1200 eq 0 2.9517 ms/op 2.6638 ms/op 1.11
forkChoice updateHead vc 600000 bc 7200 eq 0 3.2872 ms/op 3.7116 ms/op 0.89
forkChoice updateHead vc 600000 bc 64 eq 1000 2.9614 ms/op 2.4760 ms/op 1.20
forkChoice updateHead vc 600000 bc 64 eq 10000 3.0203 ms/op 2.5450 ms/op 1.19
forkChoice updateHead vc 600000 bc 64 eq 300000 7.0902 ms/op 6.7450 ms/op 1.05
computeDeltas 1400000 validators 0% inactive 13.457 ms/op 12.301 ms/op 1.09
computeDeltas 1400000 validators 10% inactive 12.638 ms/op 11.599 ms/op 1.09
computeDeltas 1400000 validators 20% inactive 11.989 ms/op 10.883 ms/op 1.10
computeDeltas 1400000 validators 50% inactive 9.6796 ms/op 8.8123 ms/op 1.10
computeDeltas 2100000 validators 0% inactive 19.996 ms/op 18.356 ms/op 1.09
computeDeltas 2100000 validators 10% inactive 19.042 ms/op 17.420 ms/op 1.09
computeDeltas 2100000 validators 20% inactive 17.903 ms/op 17.693 ms/op 1.01
computeDeltas 2100000 validators 50% inactive 14.544 ms/op 10.941 ms/op 1.33
altair processAttestation - 250000 vs - 7PWei normalcase 1.6432 ms/op 2.6584 ms/op 0.62
altair processAttestation - 250000 vs - 7PWei worstcase 2.4836 ms/op 3.2927 ms/op 0.75
altair processAttestation - setStatus - 1/6 committees join 106.23 us/op 102.95 us/op 1.03
altair processAttestation - setStatus - 1/3 committees join 211.26 us/op 194.96 us/op 1.08
altair processAttestation - setStatus - 1/2 committees join 293.70 us/op 282.48 us/op 1.04
altair processAttestation - setStatus - 2/3 committees join 374.27 us/op 378.51 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 522.26 us/op 538.85 us/op 0.97
altair processAttestation - setStatus - 100% committees join 619.42 us/op 614.18 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 2.9907 ms/op 4.1573 ms/op 0.72
altair processBlock - 250000 vs - 7PWei normalcase hashState 11.888 ms/op 18.543 ms/op 0.64
altair processBlock - 250000 vs - 7PWei worstcase 19.525 ms/op 24.280 ms/op 0.80
altair processBlock - 250000 vs - 7PWei worstcase hashState 40.134 ms/op 43.418 ms/op 0.92
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4197 ms/op 1.5145 ms/op 0.94
phase0 processBlock - 250000 vs - 7PWei worstcase 17.390 ms/op 19.006 ms/op 0.91
altair processEth1Data - 250000 vs - 7PWei normalcase 292.52 us/op 298.10 us/op 0.98
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.8080 us/op 4.4920 us/op 0.85
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 22.755 us/op 20.850 us/op 1.09
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.6240 us/op 6.8770 us/op 0.96
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 5.0130 us/op 4.1490 us/op 1.21
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 100.28 us/op 94.845 us/op 1.06
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3685 ms/op 1.4123 ms/op 0.97
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7989 ms/op 1.8700 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8024 ms/op 1.8461 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6631 ms/op 3.6625 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1423 ms/op 2.0357 ms/op 1.05
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0836 ms/op 3.9687 ms/op 1.03
Tree 40 250000 create 329.99 ms/op 328.51 ms/op 1.00
Tree 40 250000 get(125000) 100.55 ns/op 93.533 ns/op 1.08
Tree 40 250000 set(125000) 1.1115 us/op 994.50 ns/op 1.12
Tree 40 250000 toArray() 9.7707 ms/op 14.900 ms/op 0.66
Tree 40 250000 iterate all - toArray() + loop 9.9198 ms/op 15.415 ms/op 0.64
Tree 40 250000 iterate all - get(i) 35.610 ms/op 39.727 ms/op 0.90
Array 250000 create 2.0709 ms/op 2.5127 ms/op 0.82
Array 250000 clone - spread 644.40 us/op 771.90 us/op 0.83
Array 250000 get(125000) 0.47700 ns/op 0.29700 ns/op 1.61
Array 250000 set(125000) 0.48600 ns/op 0.29600 ns/op 1.64
Array 250000 iterate all - loop 56.376 us/op 58.150 us/op 0.97
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.246 ms/op 39.994 ms/op 0.96
Array.fill - length 1000000 2.3161 ms/op 2.0882 ms/op 1.11
Array push - length 1000000 7.8990 ms/op 10.803 ms/op 0.73
Array.get 0.21144 ns/op 0.20653 ns/op 1.02
Uint8Array.get 0.24332 ns/op 0.24844 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 12.118 ms/op 14.914 ms/op 0.81
altair processEpoch - mainnet_e81889 233.96 ms/op 293.52 ms/op 0.80
mainnet_e81889 - altair beforeProcessEpoch 14.533 ms/op 18.907 ms/op 0.77
mainnet_e81889 - altair processJustificationAndFinalization 5.1740 us/op 6.5960 us/op 0.78
mainnet_e81889 - altair processInactivityUpdates 3.7126 ms/op 4.5363 ms/op 0.82
mainnet_e81889 - altair processRewardsAndPenalties 17.791 ms/op 19.777 ms/op 0.90
mainnet_e81889 - altair processRegistryUpdates 821.00 ns/op 592.00 ns/op 1.39
mainnet_e81889 - altair processSlashings 382.00 ns/op 159.00 ns/op 2.40
mainnet_e81889 - altair processEth1DataReset 378.00 ns/op 143.00 ns/op 2.64
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2459 ms/op 1.5922 ms/op 0.78
mainnet_e81889 - altair processSlashingsReset 933.00 ns/op 762.00 ns/op 1.22
mainnet_e81889 - altair processRandaoMixesReset 1.3020 us/op 1.3520 us/op 0.96
mainnet_e81889 - altair processHistoricalRootsUpdate 376.00 ns/op 160.00 ns/op 2.35
mainnet_e81889 - altair processParticipationFlagUpdates 697.00 ns/op 470.00 ns/op 1.48
mainnet_e81889 - altair processSyncCommitteeUpdates 350.00 ns/op 128.00 ns/op 2.73
mainnet_e81889 - altair afterProcessEpoch 39.835 ms/op 41.880 ms/op 0.95
capella processEpoch - mainnet_e217614 777.11 ms/op 850.18 ms/op 0.91
mainnet_e217614 - capella beforeProcessEpoch 62.842 ms/op 59.378 ms/op 1.06
mainnet_e217614 - capella processJustificationAndFinalization 5.5880 us/op 6.9000 us/op 0.81
mainnet_e217614 - capella processInactivityUpdates 13.925 ms/op 17.032 ms/op 0.82
mainnet_e217614 - capella processRewardsAndPenalties 86.544 ms/op 94.900 ms/op 0.91
mainnet_e217614 - capella processRegistryUpdates 4.7330 us/op 4.5210 us/op 1.05
mainnet_e217614 - capella processSlashings 386.00 ns/op 154.00 ns/op 2.51
mainnet_e217614 - capella processEth1DataReset 385.00 ns/op 145.00 ns/op 2.66
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.4609 ms/op 17.828 ms/op 0.31
mainnet_e217614 - capella processSlashingsReset 925.00 ns/op 756.00 ns/op 1.22
mainnet_e217614 - capella processRandaoMixesReset 1.5100 us/op 1.4470 us/op 1.04
mainnet_e217614 - capella processHistoricalRootsUpdate 384.00 ns/op 146.00 ns/op 2.63
mainnet_e217614 - capella processParticipationFlagUpdates 697.00 ns/op 460.00 ns/op 1.52
mainnet_e217614 - capella afterProcessEpoch 105.57 ms/op 110.89 ms/op 0.95
phase0 processEpoch - mainnet_e58758 280.19 ms/op 341.76 ms/op 0.82
mainnet_e58758 - phase0 beforeProcessEpoch 62.041 ms/op 75.434 ms/op 0.82
mainnet_e58758 - phase0 processJustificationAndFinalization 5.5620 us/op 7.0580 us/op 0.79
mainnet_e58758 - phase0 processRewardsAndPenalties 15.034 ms/op 16.809 ms/op 0.89
mainnet_e58758 - phase0 processRegistryUpdates 2.5240 us/op 2.3700 us/op 1.06
mainnet_e58758 - phase0 processSlashings 397.00 ns/op 143.00 ns/op 2.78
mainnet_e58758 - phase0 processEth1DataReset 387.00 ns/op 139.00 ns/op 2.78
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.0165 ms/op 2.8567 ms/op 0.36
mainnet_e58758 - phase0 processSlashingsReset 1.0860 us/op 923.00 ns/op 1.18
mainnet_e58758 - phase0 processRandaoMixesReset 1.3670 us/op 1.6340 us/op 0.84
mainnet_e58758 - phase0 processHistoricalRootsUpdate 387.00 ns/op 145.00 ns/op 2.67
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.3720 us/op 1.3450 us/op 1.02
mainnet_e58758 - phase0 afterProcessEpoch 33.248 ms/op 33.805 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2333 ms/op 1.0362 ms/op 1.19
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6463 ms/op 1.6635 ms/op 0.99
altair processInactivityUpdates - 250000 normalcase 10.459 ms/op 14.502 ms/op 0.72
altair processInactivityUpdates - 250000 worstcase 10.404 ms/op 14.579 ms/op 0.71
phase0 processRegistryUpdates - 250000 normalcase 2.5550 us/op 2.2810 us/op 1.12
phase0 processRegistryUpdates - 250000 badcase_full_deposits 142.86 us/op 152.87 us/op 0.93
phase0 processRegistryUpdates - 250000 worstcase 0.5 53.267 ms/op 70.790 ms/op 0.75
altair processRewardsAndPenalties - 250000 normalcase 12.995 ms/op 17.152 ms/op 0.76
altair processRewardsAndPenalties - 250000 worstcase 12.785 ms/op 16.517 ms/op 0.77
phase0 getAttestationDeltas - 250000 normalcase 5.2633 ms/op 6.4090 ms/op 0.82
phase0 getAttestationDeltas - 250000 worstcase 5.2872 ms/op 5.6295 ms/op 0.94
phase0 processSlashings - 250000 worstcase 65.023 us/op 61.712 us/op 1.05
altair processSyncCommitteeUpdates - 250000 9.8776 ms/op 12.811 ms/op 0.77
BeaconState.hashTreeRoot - No change 419.00 ns/op 181.00 ns/op 2.31
BeaconState.hashTreeRoot - 1 full validator 56.607 us/op 85.863 us/op 0.66
BeaconState.hashTreeRoot - 32 full validator 630.73 us/op 968.17 us/op 0.65
BeaconState.hashTreeRoot - 512 full validator 6.1571 ms/op 8.7891 ms/op 0.70
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 70.214 us/op 116.73 us/op 0.60
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2248 ms/op 1.6153 ms/op 0.76
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.530 ms/op 21.700 ms/op 0.62
BeaconState.hashTreeRoot - 1 balances 57.643 us/op 90.071 us/op 0.64
BeaconState.hashTreeRoot - 32 balances 556.00 us/op 841.86 us/op 0.66
BeaconState.hashTreeRoot - 512 balances 4.7096 ms/op 6.6242 ms/op 0.71
BeaconState.hashTreeRoot - 250000 balances 157.56 ms/op 150.94 ms/op 1.04
aggregationBits - 2048 els - zipIndexesInBitList 20.866 us/op 20.321 us/op 1.03
regular array get 100000 times 22.657 us/op 23.370 us/op 0.97
wrappedArray get 100000 times 22.658 us/op 23.369 us/op 0.97
arrayWithProxy get 100000 times 10.569 ms/op 9.9909 ms/op 1.06
ssz.Root.equals 21.323 ns/op 21.877 ns/op 0.97
byteArrayEquals 21.156 ns/op 21.756 ns/op 0.97
Buffer.compare 9.9450 ns/op 8.9580 ns/op 1.11
processSlot - 1 slots 9.9250 us/op 11.006 us/op 0.90
processSlot - 32 slots 1.6209 ms/op 2.2505 ms/op 0.72
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.9059 ms/op 4.3446 ms/op 0.67
getCommitteeAssignments - req 1 vs - 250000 vc 1.7162 ms/op 1.6966 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 3.4154 ms/op 3.4428 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6690 ms/op 3.7183 ms/op 0.99
findModifiedValidators - 10000 modified validators 669.76 ms/op 667.59 ms/op 1.00
findModifiedValidators - 1000 modified validators 429.74 ms/op 570.68 ms/op 0.75
findModifiedValidators - 100 modified validators 347.69 ms/op 358.37 ms/op 0.97
findModifiedValidators - 10 modified validators 262.42 ms/op 231.50 ms/op 1.13
findModifiedValidators - 1 modified validators 156.59 ms/op 275.85 ms/op 0.57
findModifiedValidators - no difference 206.55 ms/op 226.59 ms/op 0.91
migrate state 1500000 validators, 3400 modified, 2000 new 2.8541 s/op 3.3615 s/op 0.85
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.9000 ns/op 3.5800 ns/op 1.65
state getBlockRootAtSlot - 250000 vs - 7PWei 391.68 ns/op 433.06 ns/op 0.90
computeProposerIndex 100000 validators 1.3623 ms/op 1.4011 ms/op 0.97
getNextSyncCommitteeIndices 1000 validators 2.9011 ms/op 2.9530 ms/op 0.98
getNextSyncCommitteeIndices 10000 validators 25.433 ms/op 26.556 ms/op 0.96
getNextSyncCommitteeIndices 100000 validators 85.256 ms/op 93.935 ms/op 0.91
computeProposers - vc 250000 555.88 us/op 576.33 us/op 0.96
computeEpochShuffling - vc 250000 40.332 ms/op 41.570 ms/op 0.97
getNextSyncCommittee - vc 250000 9.5350 ms/op 11.180 ms/op 0.85
nodejs block root to RootHex using toHex 102.89 ns/op 103.60 ns/op 0.99
nodejs block root to RootHex using toRootHex 68.363 ns/op 66.544 ns/op 1.03
nodejs fromHex(blob) 926.31 us/op 852.07 us/op 1.09
nodejs fromHexInto(blob) 669.14 us/op 646.23 us/op 1.04
nodejs block root to RootHex using the deprecated toHexString 488.81 ns/op 490.02 ns/op 1.00
nodejs byteArrayEquals 32 bytes (block root) 26.304 ns/op 26.518 ns/op 0.99
nodejs byteArrayEquals 48 bytes (pubkey) 37.891 ns/op 38.539 ns/op 0.98
nodejs byteArrayEquals 96 bytes (signature) 40.378 ns/op 35.466 ns/op 1.14
nodejs byteArrayEquals 1024 bytes 45.909 ns/op 43.067 ns/op 1.07
nodejs byteArrayEquals 131072 bytes (blob) 1.7747 us/op 1.8007 us/op 0.99
browser block root to RootHex using toHex 149.31 ns/op 147.80 ns/op 1.01
browser block root to RootHex using toRootHex 133.87 ns/op 132.60 ns/op 1.01
browser fromHex(blob) 1.7337 ms/op 1.6470 ms/op 1.05
browser fromHexInto(blob) 661.44 us/op 651.48 us/op 1.02
browser block root to RootHex using the deprecated toHexString 343.08 ns/op 349.32 ns/op 0.98
browser byteArrayEquals 32 bytes (block root) 27.875 ns/op 28.751 ns/op 0.97
browser byteArrayEquals 48 bytes (pubkey) 39.332 ns/op 40.736 ns/op 0.97
browser byteArrayEquals 96 bytes (signature) 72.991 ns/op 76.227 ns/op 0.96
browser byteArrayEquals 1024 bytes 750.64 ns/op 773.10 ns/op 0.97
browser byteArrayEquals 131072 bytes (blob) 94.418 us/op 98.544 us/op 0.96

by benchmarkbot/action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant