Skip to content

feat: add progressive list view helpers#530

Merged
wemeetagain merged 2 commits into
masterfrom
eip7688-progressive-list-helpers
May 19, 2026
Merged

feat: add progressive list view helpers#530
wemeetagain merged 2 commits into
masterfrom
eip7688-progressive-list-helpers

Conversation

@wemeetagain
Copy link
Copy Markdown
Member

Motivation

  • eip 7688

Description

  • Add list view helpers needed in eip7688, matches non-progressive list view helpers

@wemeetagain wemeetagain requested a review from a team as a code owner May 18, 2026 20:38
@github-actions github-actions Bot added the ssz label May 18, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5c275932ba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/ssz/src/type/progressiveList.ts Outdated
Comment thread packages/ssz/src/type/progressiveList.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 18, 2026

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 571e8d3 Previous: 8ac39d6 Ratio
digestTwoHashObjects 50023 times 28.974 ms/op 38.787 ms/op 0.75
digest2Bytes32 50023 times 31.678 ms/op 42.751 ms/op 0.74
digest 50023 times 31.357 ms/op 42.259 ms/op 0.74
input length 32 727.00 ns/op 971.00 ns/op 0.75
input length 64 833.00 ns/op 1.1280 us/op 0.74
input length 128 1.4040 us/op 1.8400 us/op 0.76
input length 256 2.0200 us/op 2.7310 us/op 0.74
input length 512 3.3540 us/op 4.5380 us/op 0.74
input length 1024 6.4490 us/op 8.5240 us/op 0.76
digest 1000000 times 470.46 ms/op 672.84 ms/op 0.70
hashObjectToByteArray 50023 times 850.17 us/op 982.30 us/op 0.87
byteArrayToHashObject 50023 times 973.41 us/op 1.1338 ms/op 0.86
digest64 200092 times 125.25 ms/op 168.89 ms/op 0.74
hash 200092 times using batchHash4UintArray64s 125.97 ms/op 174.87 ms/op 0.72
digest64HashObjects 200092 times 115.92 ms/op 154.73 ms/op 0.75
hash 200092 times using batchHash4HashObjectInputs 107.82 ms/op 165.70 ms/op 0.65
getGindicesAtDepth 2.7270 us/op 3.3150 us/op 0.82
iterateAtDepth 4.8790 us/op 5.9710 us/op 0.82
getGindexBits 353.00 ns/op 435.00 ns/op 0.81
gindexIterator 719.00 ns/op 871.00 ns/op 0.83
HashComputationLevel.push then loop 22.010 ms/op 26.330 ms/op 0.84
HashComputation[] push then loop 34.770 ms/op 40.759 ms/op 0.85
hash 2 32 bytes Uint8Array 500000 times - hashtree 112.11 ms/op 141.39 ms/op 0.79
batch hash 16 x 64 Uint8Array 31250 times - hashtree 20.650 ms/op 24.528 ms/op 0.84
hashTwoObjects 500000 times - hashtree 127.04 ms/op 157.37 ms/op 0.81
executeHashComputations - hashtree 7.8438 ms/op 9.3649 ms/op 0.84
hash 2 32 bytes Uint8Array 500000 times - as-sha256 293.92 ms/op 393.18 ms/op 0.75
batch hash 16 x 64 Uint8Array 31250 times - as-sha256 265.21 ms/op 390.31 ms/op 0.68
hashTwoObjects 500000 times - as-sha256 303.03 ms/op 407.32 ms/op 0.74
executeHashComputations - as-sha256 22.310 ms/op 30.471 ms/op 0.73
hash 2 32 bytes Uint8Array 500000 times - noble 772.12 ms/op 1.0418 s/op 0.74
batch hash 16 x 64 Uint8Array 31250 times - noble 722.84 ms/op 1.0054 s/op 0.72
hashTwoObjects 500000 times - noble 1.2776 s/op 1.6005 s/op 0.80
executeHashComputations - noble 21.825 ms/op 29.947 ms/op 0.73
getHashComputations 1.2474 ms/op 1.8333 ms/op 0.68
executeHashComputations 6.4822 ms/op 8.0558 ms/op 0.80
get root 9.3204 ms/op 13.750 ms/op 0.68
getNodeH() x7812.5 avg hindex 10.595 us/op 12.708 us/op 0.83
getNodeH() x7812.5 index 0 3.8920 us/op 4.8080 us/op 0.81
getNodeH() x7812.5 index 7 3.8480 us/op 4.7550 us/op 0.81
getNodeH() x7812.5 index 7 with key array 3.8490 us/op 4.7590 us/op 0.81
new LeafNode() x7812.5 211.06 us/op 267.03 us/op 0.79
getHashComputations 250000 nodes 9.2117 ms/op 11.125 ms/op 0.83
batchHash 250000 nodes 55.815 ms/op 65.369 ms/op 0.85
get root 250000 nodes 69.257 ms/op 95.407 ms/op 0.73
getHashComputations 500000 nodes 18.355 ms/op 21.313 ms/op 0.86
batchHash 500000 nodes 161.38 ms/op 175.22 ms/op 0.92
get root 500000 nodes 141.89 ms/op 187.31 ms/op 0.76
getHashComputations 1000000 nodes 38.439 ms/op 41.497 ms/op 0.93
batchHash 1000000 nodes 251.27 ms/op 287.00 ms/op 0.88
get root 1000000 nodes 277.89 ms/op 375.81 ms/op 0.74
multiproof - depth 15, 1 requested leaves 5.6910 us/op 7.0320 us/op 0.81
tree offset multiproof - depth 15, 1 requested leaves 12.014 us/op 16.078 us/op 0.75
compact multiproof - depth 15, 1 requested leaves 2.4960 us/op 2.6590 us/op 0.94
multiproof - depth 15, 2 requested leaves 8.2440 us/op 10.171 us/op 0.81
tree offset multiproof - depth 15, 2 requested leaves 14.427 us/op 19.344 us/op 0.75
compact multiproof - depth 15, 2 requested leaves 2.5830 us/op 2.7660 us/op 0.93
multiproof - depth 15, 3 requested leaves 11.167 us/op 14.592 us/op 0.77
tree offset multiproof - depth 15, 3 requested leaves 18.584 us/op 25.234 us/op 0.74
compact multiproof - depth 15, 3 requested leaves 2.7720 us/op 2.9980 us/op 0.92
multiproof - depth 15, 4 requested leaves 14.497 us/op 19.063 us/op 0.76
tree offset multiproof - depth 15, 4 requested leaves 22.658 us/op 30.686 us/op 0.74
compact multiproof - depth 15, 4 requested leaves 3.1400 us/op 3.6140 us/op 0.87
packedRootsBytesToLeafNodes bytes 4000 offset 0 4.1850 us/op 4.9650 us/op 0.84
packedRootsBytesToLeafNodes bytes 4000 offset 1 4.0760 us/op 5.0340 us/op 0.81
packedRootsBytesToLeafNodes bytes 4000 offset 2 4.1000 us/op 5.0170 us/op 0.82
packedRootsBytesToLeafNodes bytes 4000 offset 3 4.0820 us/op 4.9980 us/op 0.82
subtreeFillToContents depth 40 count 250000 15.416 ms/op 19.806 ms/op 0.78
setRoot - gindexBitstring 14.399 ms/op 18.637 ms/op 0.77
setRoot - gindex 14.320 ms/op 19.201 ms/op 0.75
getRoot - gindexBitstring 1.5323 ms/op 2.0127 ms/op 0.76
getRoot - gindex 1.8107 ms/op 2.6788 ms/op 0.68
getHashObject then setHashObject 15.127 ms/op 20.243 ms/op 0.75
setNodeWithFn 14.232 ms/op 18.524 ms/op 0.77
getNodeAtDepth depth 0 x100000 184.73 us/op 214.90 us/op 0.86
setNodeAtDepth depth 0 x100000 1.3037 ms/op 2.1387 ms/op 0.61
getNodesAtDepth depth 0 x100000 229.90 us/op 281.20 us/op 0.82
setNodesAtDepth depth 0 x100000 560.02 us/op 693.71 us/op 0.81
getNodeAtDepth depth 1 x100000 247.10 us/op 280.63 us/op 0.88
setNodeAtDepth depth 1 x100000 4.8764 ms/op 6.9855 ms/op 0.70
getNodesAtDepth depth 1 x100000 333.53 us/op 405.88 us/op 0.82
setNodesAtDepth depth 1 x100000 4.8971 ms/op 5.8341 ms/op 0.84
getNodeAtDepth depth 2 x100000 491.99 us/op 747.94 us/op 0.66
setNodeAtDepth depth 2 x100000 10.906 ms/op 13.268 ms/op 0.82
getNodesAtDepth depth 2 x100000 12.025 ms/op 15.553 ms/op 0.77
setNodesAtDepth depth 2 x100000 14.908 ms/op 19.775 ms/op 0.75
tree.getNodesAtDepth - gindexes 9.8229 ms/op 7.8338 ms/op 1.25
tree.getNodesAtDepth - push all nodes 1.1199 ms/op 1.3165 ms/op 0.85
tree.getNodesAtDepth - navigation 136.59 us/op 156.47 us/op 0.87
tree.setNodesAtDepth - indexes 460.76 us/op 671.41 us/op 0.69
set at depth 8 551.00 ns/op 743.00 ns/op 0.74
set at depth 16 871.00 ns/op 1.0550 us/op 0.83
set at depth 32 1.4640 us/op 1.7770 us/op 0.82
iterateNodesAtDepth 8 256 10.107 us/op 12.546 us/op 0.81
getNodesAtDepth 8 256 2.5280 us/op 3.3660 us/op 0.75
iterateNodesAtDepth 16 65536 3.1893 ms/op 4.0731 ms/op 0.78
getNodesAtDepth 16 65536 839.43 us/op 1.0227 ms/op 0.82
iterateNodesAtDepth 32 250000 11.822 ms/op 14.402 ms/op 0.82
getNodesAtDepth 32 250000 3.0962 ms/op 3.8342 ms/op 0.81
iterateNodesAtDepth 40 250000 11.751 ms/op 14.888 ms/op 0.79
getNodesAtDepth 40 250000 3.1226 ms/op 3.7745 ms/op 0.83
250000 validators root getter 74.240 ms/op 97.736 ms/op 0.76
250000 validators batchHash() 59.440 ms/op 67.386 ms/op 0.88
250000 validators hashComputations 10.975 ms/op 12.211 ms/op 0.90
bitlist bytes to struct (120,90) 356.00 ns/op 406.00 ns/op 0.88
bitlist bytes to tree (120,90) 1.7020 us/op 2.0110 us/op 0.85
bitlist bytes to struct (2048,2048) 1.0390 us/op 1.1260 us/op 0.92
bitlist bytes to tree (2048,2048) 3.8880 us/op 4.2490 us/op 0.92
ByteListType - deserialize 8.3780 ms/op 8.3862 ms/op 1.00
BasicListType - deserialize 5.7814 ms/op 7.2125 ms/op 0.80
ByteListType - serialize 8.2523 ms/op 9.3634 ms/op 0.88
BasicListType - serialize 11.812 ms/op 12.156 ms/op 0.97
BasicListType - tree_convertToStruct 17.802 ms/op 21.243 ms/op 0.84
List[uint8, 68719476736] len 300000 ViewDU.getAll() + iterate 3.4185 ms/op 4.1173 ms/op 0.83
List[uint8, 68719476736] len 300000 ViewDU.get(i) 2.9074 ms/op 3.8358 ms/op 0.76
Array.push len 300000 empty Array - number 4.3378 ms/op 4.7256 ms/op 0.92
Array.set len 300000 from new Array - number 1.0436 ms/op 1.1367 ms/op 0.92
Array.set len 300000 - number 4.4302 ms/op 4.8516 ms/op 0.91
Uint8Array.set len 300000 225.77 us/op 287.30 us/op 0.79
Uint32Array.set len 300000 376.23 us/op 480.50 us/op 0.78
Container({a: uint8, b: uint8}) getViewDU x300000 24.201 ms/op 31.236 ms/op 0.77
ContainerNodeStruct({a: uint8, b: uint8}) getViewDU x300000 7.8893 ms/op 9.4606 ms/op 0.83
List(Container) len 300000 ViewDU.getAllReadonly() + iterate 96.939 ms/op 115.28 ms/op 0.84
List(Container) len 300000 ViewDU.getAllReadonlyValues() + iterate 201.72 ms/op 250.25 ms/op 0.81
List(Container) len 300000 ViewDU.get(i) 8.3242 ms/op 9.5159 ms/op 0.87
List(Container) len 300000 ViewDU.getReadonly(i) 7.1539 ms/op 8.3870 ms/op 0.85
List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonly() + iterate 12.157 ms/op 14.884 ms/op 0.82
List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonlyValues() + iterate 4.3407 ms/op 4.5135 ms/op 0.96
List(ContainerNodeStruct) len 300000 ViewDU.get(i) 6.9778 ms/op 9.1080 ms/op 0.77
List(ContainerNodeStruct) len 300000 ViewDU.getReadonly(i) 6.6402 ms/op 9.0451 ms/op 0.73
Array.push len 300000 empty Array - object 4.4868 ms/op 4.9474 ms/op 0.91
Array.set len 300000 from new Array - object 1.0929 ms/op 1.2338 ms/op 0.89
Array.set len 300000 - object 4.7489 ms/op 5.3277 ms/op 0.89
cachePermanentRootStruct no cache 2.1340 us/op 2.7080 us/op 0.79
cachePermanentRootStruct with cache 135.00 ns/op 186.00 ns/op 0.73
epochParticipation len 250000 rws 7813 1.7682 ms/op 2.3388 ms/op 0.76
Deneb BeaconBlock.hashTreeRoot(), numTransaction=200 3.2558 ms/op 4.1419 ms/op 0.79
BeaconState ViewDU batchHashTreeRoot vc=200000 mod=100000 181.29 ms/op 214.55 ms/op 0.84
BeaconState ViewDU batchHashTreeRoot - commit step vc=200000 mod=100000 152.29 ms/op 172.19 ms/op 0.88
BeaconState ViewDU batchHashTreeRoot - hash step vc=200000 mod=100000 30.140 ms/op 35.480 ms/op 0.85
BeaconState ViewDU hashTreeRoot() vc=200000 mod=100000 544.23 ms/op 665.50 ms/op 0.82
BeaconState ViewDU hashTreeRoot - commit step vc=200000 mod=100000 64.317 ms/op 56.269 ms/op 1.14
BeaconState ViewDU hashTreeRoot - validator tree creation vc=100000 mod=100000 210.60 ms/op 252.96 ms/op 0.83
deserialize Attestation - tree 2.6820 us/op 3.5720 us/op 0.75
deserialize Attestation - struct 1.5030 us/op 1.8860 us/op 0.80
deserialize Attestation - struct (reuse bytes) 1.0060 us/op 1.2820 us/op 0.78
deserialize SignedAggregateAndProof - tree 3.5860 us/op 4.5170 us/op 0.79
deserialize SignedAggregateAndProof - struct 2.7600 us/op 3.2710 us/op 0.84
deserialize SignedAggregateAndProof - struct (reuse bytes) 1.3800 us/op 1.6630 us/op 0.83
deserialize SyncCommitteeMessage - tree 1.1150 us/op 1.3020 us/op 0.86
deserialize SyncCommitteeMessage - struct 1.0170 us/op 1.0840 us/op 0.94
deserialize SyncCommitteeMessage - struct (reuse bytes) 493.00 ns/op 667.00 ns/op 0.74
deserialize SignedContributionAndProof - tree 2.0500 us/op 2.7010 us/op 0.76
deserialize SignedContributionAndProof - struct 2.4460 us/op 2.7870 us/op 0.88
deserialize SignedContributionAndProof - struct (reuse bytes) 864.00 ns/op 1.0750 us/op 0.80
deserialize SignedBeaconBlock - tree 211.43 us/op 270.18 us/op 0.78
deserialize SignedBeaconBlock - struct 102.25 us/op 129.32 us/op 0.79
deserialize SignedBeaconBlock - struct (reuse bytes) 52.617 us/op 68.213 us/op 0.77
BeaconState vc 300000 - deserialize tree 393.53 ms/op 454.28 ms/op 0.87
BeaconState vc 300000 - serialize tree 77.799 ms/op 92.998 ms/op 0.84
BeaconState.historicalRoots vc 300000 - deserialize tree 788.00 ns/op 764.00 ns/op 1.03
BeaconState.historicalRoots vc 300000 - serialize tree 769.00 ns/op 726.00 ns/op 1.06
BeaconState.validators vc 300000 - deserialize tree 338.81 ms/op 391.14 ms/op 0.87
BeaconState.validators vc 300000 - serialize tree 36.259 ms/op 44.634 ms/op 0.81
BeaconState.balances vc 300000 - deserialize tree 8.0855 ms/op 9.8697 ms/op 0.82
BeaconState.balances vc 300000 - serialize tree 9.7814 ms/op 8.5859 ms/op 1.14
BeaconState.previousEpochParticipation vc 300000 - deserialize tree 596.97 us/op 735.20 us/op 0.81
BeaconState.previousEpochParticipation vc 300000 - serialize tree 593.76 us/op 1.1257 ms/op 0.53
BeaconState.currentEpochParticipation vc 300000 - deserialize tree 594.87 us/op 728.44 us/op 0.82
BeaconState.currentEpochParticipation vc 300000 - serialize tree 636.42 us/op 1.1346 ms/op 0.56
BeaconState.inactivityScores vc 300000 - deserialize tree 8.2618 ms/op 9.7794 ms/op 0.84
BeaconState.inactivityScores vc 300000 - serialize tree 5.1216 ms/op 8.6264 ms/op 0.59
hashTreeRoot Attestation - struct 6.6430 us/op 7.9620 us/op 0.83
hashTreeRoot Attestation - tree 5.5740 us/op 7.0350 us/op 0.79
hashTreeRoot SignedAggregateAndProof - struct 8.9530 us/op 11.452 us/op 0.78
hashTreeRoot SignedAggregateAndProof - tree 8.3300 us/op 10.617 us/op 0.78
hashTreeRoot SyncCommitteeMessage - struct 2.2650 us/op 2.7760 us/op 0.82
hashTreeRoot SyncCommitteeMessage - tree 2.2350 us/op 2.7610 us/op 0.81
hashTreeRoot SignedContributionAndProof - struct 5.5650 us/op 6.9040 us/op 0.81
hashTreeRoot SignedContributionAndProof - tree 5.7590 us/op 7.3190 us/op 0.79
hashTreeRoot SignedBeaconBlock - struct 525.20 us/op 679.47 us/op 0.77
hashTreeRoot SignedBeaconBlock - tree 485.99 us/op 631.37 us/op 0.77
hashTreeRoot Validator - struct 2.8750 us/op 3.6440 us/op 0.79
hashTreeRoot Validator - tree 4.5780 us/op 5.6380 us/op 0.81
BeaconState vc 300000 - hashTreeRoot tree 1.4676 s/op 1.7776 s/op 0.83
BeaconState vc 300000 - batchHashTreeRoot tree 3.0913 s/op 3.4549 s/op 0.89
BeaconState.historicalRoots vc 300000 - hashTreeRoot tree 720.00 ns/op 804.00 ns/op 0.90
BeaconState.validators vc 300000 - hashTreeRoot tree 1.4661 s/op 1.7638 s/op 0.83
BeaconState.balances vc 300000 - hashTreeRoot tree 20.516 ms/op 26.783 ms/op 0.77
BeaconState.previousEpochParticipation vc 300000 - hashTreeRoot tree 2.5648 ms/op 3.3623 ms/op 0.76
BeaconState.currentEpochParticipation vc 300000 - hashTreeRoot tree 2.5634 ms/op 3.3629 ms/op 0.76
BeaconState.inactivityScores vc 300000 - hashTreeRoot tree 20.526 ms/op 26.704 ms/op 0.77
hash64 x18 5.1230 us/op 6.8380 us/op 0.75
hashTwoObjects x18 4.8900 us/op 6.2640 us/op 0.78
hash64 x1740 452.00 us/op 613.95 us/op 0.74
hashTwoObjects x1740 454.42 us/op 575.25 us/op 0.79
hash64 x2700000 698.89 ms/op 949.23 ms/op 0.74
hashTwoObjects x2700000 697.04 ms/op 900.28 ms/op 0.77
get_exitEpoch - ContainerType 179.00 ns/op 205.00 ns/op 0.87
get_exitEpoch - ContainerNodeStructType 172.00 ns/op 227.00 ns/op 0.76
set_exitEpoch - ContainerType 177.00 ns/op 255.00 ns/op 0.69
set_exitEpoch - ContainerNodeStructType 169.00 ns/op 214.00 ns/op 0.79
get_pubkey - ContainerType 877.00 ns/op 1.0280 us/op 0.85
get_pubkey - ContainerNodeStructType 161.00 ns/op 205.00 ns/op 0.79
hashTreeRoot - ContainerType 287.00 ns/op 328.00 ns/op 0.88
hashTreeRoot - ContainerNodeStructType 283.00 ns/op 321.00 ns/op 0.88
createProof - ContainerType 2.7330 us/op 3.3110 us/op 0.83
createProof - ContainerNodeStructType 14.369 us/op 18.854 us/op 0.76
serialize - ContainerType 1.5530 us/op 1.7660 us/op 0.88
serialize - ContainerNodeStructType 1.2590 us/op 1.2690 us/op 0.99
set_exitEpoch_and_hashTreeRoot - ContainerType 1.9370 us/op 2.3650 us/op 0.82
set_exitEpoch_and_hashTreeRoot - ContainerNodeStructType 5.0880 us/op 6.0730 us/op 0.84
doBatchHashTreeRootValidators 2.7580 us/op 3.3360 us/op 0.83
ContainerNodeStructViewDU hashTreeRoot 17.382 us/op 21.427 us/op 0.81
Array - for of 3.1870 us/op 4.2810 us/op 0.74
Array - for(;;) 2.6040 us/op 3.7920 us/op 0.69
basicListValue.readonlyValuesArray() 3.3011 ms/op 4.3881 ms/op 0.75
basicListValue.readonlyValuesArray() + loop all 3.0210 ms/op 3.4896 ms/op 0.87
compositeListValue.readonlyValuesArray() 11.825 ms/op 15.207 ms/op 0.78
compositeListValue.readonlyValuesArray() + loop all 10.094 ms/op 12.917 ms/op 0.78
Number64UintType - get balances list 2.2033 ms/op 2.7039 ms/op 0.81
Number64UintType - set balances list 7.4552 ms/op 10.621 ms/op 0.70
Number64UintType - get and increase 10 then set 24.523 ms/op 31.863 ms/op 0.77
Number64UintType - increase 10 using applyDelta 12.075 ms/op 16.470 ms/op 0.73
Number64UintType - increase 10 using applyDeltaInBatch 11.584 ms/op 16.608 ms/op 0.70
tree_newTreeFromUint64Deltas 11.136 ms/op 14.353 ms/op 0.78
unsafeUint8ArrayToTree 16.333 ms/op 21.603 ms/op 0.76
bitLength(50) 179.00 ns/op 218.00 ns/op 0.82
bitLengthStr(50) 183.00 ns/op 224.00 ns/op 0.82
bitLength(8000) 170.00 ns/op 212.00 ns/op 0.80
bitLengthStr(8000) 210.00 ns/op 255.00 ns/op 0.82
bitLength(250000) 173.00 ns/op 212.00 ns/op 0.82
bitLengthStr(250000) 241.00 ns/op 305.00 ns/op 0.79
merkleize 32 chunks 8.8050 us/op 11.636 us/op 0.76
merkleizeBlocksBytes 32 chunks 2.2480 us/op 2.7390 us/op 0.82
merkleizeBlockArray 32 chunks 4.0930 us/op 5.1810 us/op 0.79
merkleize 128 chunks 34.317 us/op 45.604 us/op 0.75
merkleizeBlocksBytes 128 chunks 5.7290 us/op 6.7800 us/op 0.84
merkleizeBlockArray 128 chunks 11.886 us/op 14.600 us/op 0.81
merkleize 512 chunks 137.09 us/op 181.29 us/op 0.76
merkleizeBlocksBytes 512 chunks 18.634 us/op 21.697 us/op 0.86
merkleizeBlockArray 512 chunks 40.787 us/op 50.403 us/op 0.81
merkleize 1024 chunks 280.46 us/op 362.57 us/op 0.77
merkleizeBlocksBytes 1024 chunks 35.014 us/op 41.255 us/op 0.85
merkleizeBlockArray 1024 chunks 78.614 us/op 97.892 us/op 0.80
floor - Math.floor (53) 0.30728 ns/op 0.35081 ns/op 0.88
floor - << 0 (53) 0.30730 ns/op 0.35054 ns/op 0.88
floor - Math.floor (512) 0.30875 ns/op 0.35091 ns/op 0.88
floor - << 0 (512) 0.30710 ns/op 0.35051 ns/op 0.88
fnIf(0) 1.2455 ns/op 1.4279 ns/op 0.87
fnSwitch(0) 1.9794 ns/op 2.4916 ns/op 0.79
fnObj(0) 0.30725 ns/op 0.35047 ns/op 0.88
fnArr(0) 0.30722 ns/op 0.35045 ns/op 0.88
fnIf(4) 1.9099 ns/op 2.1839 ns/op 0.87
fnSwitch(4) 1.9023 ns/op 2.2227 ns/op 0.86
fnObj(4) 0.30724 ns/op 0.35050 ns/op 0.88
fnArr(4) 0.30705 ns/op 0.35109 ns/op 0.87
fnIf(9) 2.5921 ns/op 3.1197 ns/op 0.83
fnSwitch(9) 1.9034 ns/op 2.1807 ns/op 0.87
fnObj(9) 0.30704 ns/op 0.35055 ns/op 0.88
fnArr(9) 0.30713 ns/op 0.35083 ns/op 0.88
Container {a,b,vec} - as struct x100000 30.815 us/op 35.211 us/op 0.88
Container {a,b,vec} - as tree x100000 492.61 us/op 1.2191 ms/op 0.40
Container {a,vec,b} - as struct x100000 68.594 us/op 78.225 us/op 0.88
Container {a,vec,b} - as tree x100000 768.72 us/op 1.2794 ms/op 0.60
get 2 props x1000000 - rawObject 272.94 us/op 311.50 us/op 0.88
get 2 props x1000000 - proxy 62.662 ms/op 78.445 ms/op 0.80
get 2 props x1000000 - customObj 272.88 us/op 311.52 us/op 0.88
Simple object binary -> struct 339.00 ns/op 474.00 ns/op 0.72
Simple object binary -> tree_backed 859.00 ns/op 1.0440 us/op 0.82
Simple object struct -> tree_backed 1.3280 us/op 1.7430 us/op 0.76
Simple object tree_backed -> struct 1.0880 us/op 1.5100 us/op 0.72
Simple object struct -> binary 705.00 ns/op 962.00 ns/op 0.73
Simple object tree_backed -> binary 966.00 ns/op 1.2340 us/op 0.78
aggregationBits binary -> struct 326.00 ns/op 418.00 ns/op 0.78
aggregationBits binary -> tree_backed 1.7430 us/op 2.1740 us/op 0.80
aggregationBits struct -> tree_backed 2.0710 us/op 2.6790 us/op 0.77
aggregationBits tree_backed -> struct 784.00 ns/op 1.0380 us/op 0.76
aggregationBits struct -> binary 614.00 ns/op 805.00 ns/op 0.76
aggregationBits tree_backed -> binary 663.00 ns/op 960.00 ns/op 0.69
List(uint8) 100000 binary -> struct 684.51 us/op 779.93 us/op 0.88
List(uint8) 100000 binary -> tree_backed 197.47 us/op 242.86 us/op 0.81
List(uint8) 100000 struct -> tree_backed 1.2236 ms/op 1.5711 ms/op 0.78
List(uint8) 100000 tree_backed -> struct 763.69 us/op 889.86 us/op 0.86
List(uint8) 100000 struct -> binary 1.2647 ms/op 1.3601 ms/op 0.93
List(uint8) 100000 tree_backed -> binary 190.82 us/op 269.34 us/op 0.71
List(uint64Number) 100000 binary -> struct 910.19 us/op 1.1321 ms/op 0.80
List(uint64Number) 100000 binary -> tree_backed 1.9696 ms/op 2.4321 ms/op 0.81
List(uint64Number) 100000 struct -> tree_backed 3.1580 ms/op 3.9226 ms/op 0.81
List(uint64Number) 100000 tree_backed -> struct 1.7990 ms/op 2.2733 ms/op 0.79
List(uint64Number) 100000 struct -> binary 2.2441 ms/op 2.7812 ms/op 0.81
List(uint64Number) 100000 tree_backed -> binary 764.49 us/op 1.0368 ms/op 0.74
List(Uint64Bigint) 100000 binary -> struct 1.7510 ms/op 2.2034 ms/op 0.79
List(Uint64Bigint) 100000 binary -> tree_backed 1.7997 ms/op 2.2483 ms/op 0.80
List(Uint64Bigint) 100000 struct -> tree_backed 2.9757 ms/op 3.7996 ms/op 0.78
List(Uint64Bigint) 100000 tree_backed -> struct 2.4420 ms/op 3.1218 ms/op 0.78
List(Uint64Bigint) 100000 struct -> binary 2.0103 ms/op 2.7159 ms/op 0.74
List(Uint64Bigint) 100000 tree_backed -> binary 757.26 us/op 1.1421 ms/op 0.66
Vector(Root) 100000 binary -> struct 11.341 ms/op 11.586 ms/op 0.98
Vector(Root) 100000 binary -> tree_backed 13.636 ms/op 16.783 ms/op 0.81
Vector(Root) 100000 struct -> tree_backed 19.024 ms/op 21.711 ms/op 0.88
Vector(Root) 100000 tree_backed -> struct 13.965 ms/op 17.880 ms/op 0.78
Vector(Root) 100000 struct -> binary 3.5045 ms/op 4.5577 ms/op 0.77
Vector(Root) 100000 tree_backed -> binary 4.4042 ms/op 5.5858 ms/op 0.79
List(Validator) 100000 binary -> struct 54.857 ms/op 67.703 ms/op 0.81
List(Validator) 100000 binary -> tree_backed 188.47 ms/op 228.36 ms/op 0.83
List(Validator) 100000 struct -> tree_backed 215.14 ms/op 270.93 ms/op 0.79
List(Validator) 100000 tree_backed -> struct 152.69 ms/op 172.10 ms/op 0.89
List(Validator) 100000 struct -> binary 31.873 ms/op 42.704 ms/op 0.75
List(Validator) 100000 tree_backed -> binary 82.527 ms/op 83.716 ms/op 0.99
List(Validator-NS) 100000 binary -> struct 54.970 ms/op 67.267 ms/op 0.82
List(Validator-NS) 100000 binary -> tree_backed 89.971 ms/op 104.56 ms/op 0.86
List(Validator-NS) 100000 struct -> tree_backed 104.25 ms/op 131.94 ms/op 0.79
List(Validator-NS) 100000 tree_backed -> struct 85.318 ms/op 105.08 ms/op 0.81
List(Validator-NS) 100000 struct -> binary 8.2118 ms/op 12.427 ms/op 0.66
List(Validator-NS) 100000 tree_backed -> binary 12.314 ms/op 15.491 ms/op 0.79
get epochStatuses - MutableVector 85.632 us/op 111.87 us/op 0.77
get epochStatuses - ViewDU 137.13 us/op 208.26 us/op 0.66
set epochStatuses - ListTreeView 1.4946 ms/op 2.1048 ms/op 0.71
set epochStatuses - ListTreeView - set() 370.41 us/op 488.95 us/op 0.76
set epochStatuses - ListTreeView - commit() 596.28 us/op 764.60 us/op 0.78
bitstring 378.02 ns/op 456.91 ns/op 0.83
bit mask 6.3215 ns/op 7.1952 ns/op 0.88
struct - increase slot to 1000000 307.13 us/op 350.86 us/op 0.88
UintNumberType - increase slot to 1000000 19.655 ms/op 27.146 ms/op 0.72
UintBigintType - increase slot to 1000000 122.91 ms/op 163.47 ms/op 0.75
UintBigint8 x 100000 tree_deserialize 4.1969 ms/op 5.3265 ms/op 0.79
UintBigint8 x 100000 tree_serialize 1.0104 ms/op 1.3733 ms/op 0.74
UintBigint16 x 100000 tree_deserialize 4.2497 ms/op 4.2370 ms/op 1.00
UintBigint16 x 100000 tree_serialize 1.0488 ms/op 883.17 us/op 1.19
UintBigint32 x 100000 tree_deserialize 3.9582 ms/op 4.3836 ms/op 0.90
UintBigint32 x 100000 tree_serialize 1.3842 ms/op 1.6686 ms/op 0.83
UintBigint64 x 100000 tree_deserialize 4.3269 ms/op 5.7733 ms/op 0.75
UintBigint64 x 100000 tree_serialize 1.3464 ms/op 1.6929 ms/op 0.80
UintBigint8 x 100000 value_deserialize 328.86 us/op 411.70 us/op 0.80
UintBigint8 x 100000 value_serialize 364.00 us/op 488.21 us/op 0.75
UintBigint16 x 100000 value_deserialize 356.28 us/op 467.82 us/op 0.76
UintBigint16 x 100000 value_serialize 382.43 us/op 403.40 us/op 0.95
UintBigint32 x 100000 value_deserialize 382.89 us/op 468.59 us/op 0.82
UintBigint32 x 100000 value_serialize 431.05 us/op 464.56 us/op 0.93
UintBigint64 x 100000 value_deserialize 412.79 us/op 530.29 us/op 0.78
UintBigint64 x 100000 value_serialize 572.36 us/op 586.59 us/op 0.98
UintBigint8 x 100000 deserialize 2.0500 ms/op 2.3445 ms/op 0.87
UintBigint8 x 100000 serialize 1.2178 ms/op 1.7567 ms/op 0.69
UintBigint16 x 100000 deserialize 2.1013 ms/op 2.2595 ms/op 0.93
UintBigint16 x 100000 serialize 1.5316 ms/op 1.9093 ms/op 0.80
UintBigint32 x 100000 deserialize 2.2147 ms/op 2.2080 ms/op 1.00
UintBigint32 x 100000 serialize 2.3094 ms/op 2.7385 ms/op 0.84
UintBigint64 x 100000 deserialize 2.0625 ms/op 2.1843 ms/op 0.94
UintBigint64 x 100000 serialize 968.45 us/op 1.2461 ms/op 0.78
UintBigint128 x 100000 deserialize 2.1804 ms/op 2.5766 ms/op 0.85
UintBigint128 x 100000 serialize 9.3674 ms/op 12.182 ms/op 0.77
UintBigint256 x 100000 deserialize 2.9241 ms/op 3.4613 ms/op 0.84
UintBigint256 x 100000 serialize 29.731 ms/op 38.696 ms/op 0.77
Slice from Uint8Array x25000 778.55 us/op 986.32 us/op 0.79
Slice from ArrayBuffer x25000 12.368 ms/op 14.032 ms/op 0.88
Slice from ArrayBuffer x25000 + new Uint8Array 14.624 ms/op 19.998 ms/op 0.73
Copy Uint8Array 100000 iterate 723.25 us/op 981.68 us/op 0.74
Copy Uint8Array 100000 slice 127.43 us/op 150.96 us/op 0.84
Copy Uint8Array 100000 Uint8Array.prototype.slice.call 105.43 us/op 159.16 us/op 0.66
Copy Buffer 100000 Uint8Array.prototype.slice.call 88.704 us/op 118.11 us/op 0.75
Copy Uint8Array 100000 slice + set 236.37 us/op 280.01 us/op 0.84
Copy Uint8Array 100000 subarray + set 135.00 us/op 149.12 us/op 0.91
Copy Uint8Array 100000 slice arrayBuffer 99.463 us/op 135.81 us/op 0.73
Uint64 deserialize 100000 - iterate Uint8Array 1.4750 ms/op 1.5377 ms/op 0.96
Uint64 deserialize 100000 - by Uint32A 1.4174 ms/op 1.5545 ms/op 0.91
Uint64 deserialize 100000 - by DataView.getUint32 x2 1.4790 ms/op 1.6939 ms/op 0.87
Uint64 deserialize 100000 - by DataView.getBigUint64 3.3363 ms/op 4.2675 ms/op 0.78
Uint64 deserialize 100000 - by byte 12.200 ms/op 15.979 ms/op 0.76

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 88cd4f6 into master May 19, 2026
9 checks passed
@wemeetagain wemeetagain deleted the eip7688-progressive-list-helpers branch May 19, 2026 13:30
@github-actions github-actions Bot mentioned this pull request May 19, 2026
wemeetagain pushed a commit that referenced this pull request May 19, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>ssz: 1.6.0</summary>

##
[1.6.0](ssz-v1.5.0...ssz-v1.6.0)
(2026-05-19)


### Features

* add progressive list view helpers
([#530](#530))
([88cd4f6](88cd4f6))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant