Merged
Conversation
10e290d to
598680e
Compare
nflaig
approved these changes
Apr 21, 2026
Contributor
Author
|
🤖 Created releases: 🌻 |
Contributor
Author
|
| Benchmark suite | Current: 3bfb038 | Previous: 36d8c67 | Ratio |
|---|---|---|---|
| BeaconState.historicalRoots vc 300000 - deserialize tree | 3.6800 us/op | 935.00 ns/op | 3.94 |
Full benchmark results
| Benchmark suite | Current: 3bfb038 | Previous: 36d8c67 | Ratio |
|---|---|---|---|
| digestTwoHashObjects 50023 times | 47.823 ms/op | 48.088 ms/op | 0.99 |
| digest2Bytes32 50023 times | 54.856 ms/op | 55.566 ms/op | 0.99 |
| digest 50023 times | 53.410 ms/op | 54.904 ms/op | 0.97 |
| input length 32 | 1.2230 us/op | 1.2160 us/op | 1.01 |
| input length 64 | 1.3840 us/op | 1.4220 us/op | 0.97 |
| input length 128 | 2.3500 us/op | 2.3190 us/op | 1.01 |
| input length 256 | 3.5190 us/op | 3.5000 us/op | 1.01 |
| input length 512 | 5.6460 us/op | 5.6580 us/op | 1.00 |
| input length 1024 | 10.999 us/op | 10.870 us/op | 1.01 |
| digest 1000000 times | 871.18 ms/op | 875.24 ms/op | 1.00 |
| hashObjectToByteArray 50023 times | 935.52 us/op | 938.16 us/op | 1.00 |
| byteArrayToHashObject 50023 times | 1.3087 ms/op | 1.3420 ms/op | 0.98 |
| digest64 200092 times | 215.52 ms/op | 218.88 ms/op | 0.98 |
| hash 200092 times using batchHash4UintArray64s | 230.60 ms/op | 236.21 ms/op | 0.98 |
| digest64HashObjects 200092 times | 191.95 ms/op | 191.90 ms/op | 1.00 |
| hash 200092 times using batchHash4HashObjectInputs | 203.53 ms/op | 193.66 ms/op | 1.05 |
| getGindicesAtDepth | 3.5260 us/op | 3.6780 us/op | 0.96 |
| iterateAtDepth | 6.3550 us/op | 6.5700 us/op | 0.97 |
| getGindexBits | 456.00 ns/op | 482.00 ns/op | 0.95 |
| gindexIterator | 914.00 ns/op | 929.00 ns/op | 0.98 |
| HashComputationLevel.push then loop | 25.593 ms/op | 27.105 ms/op | 0.94 |
| HashComputation[] push then loop | 48.693 ms/op | 47.256 ms/op | 1.03 |
| hash 2 32 bytes Uint8Array 500000 times - hashtree | 152.69 ms/op | 146.63 ms/op | 1.04 |
| batch hash 16 x 64 Uint8Array 31250 times - hashtree | 24.617 ms/op | 24.390 ms/op | 1.01 |
| hashTwoObjects 500000 times - hashtree | 173.66 ms/op | 172.52 ms/op | 1.01 |
| executeHashComputations - hashtree | 8.9044 ms/op | 9.2893 ms/op | 0.96 |
| hash 2 32 bytes Uint8Array 500000 times - as-sha256 | 490.01 ms/op | 495.77 ms/op | 0.99 |
| batch hash 16 x 64 Uint8Array 31250 times - as-sha256 | 518.92 ms/op | 515.54 ms/op | 1.01 |
| hashTwoObjects 500000 times - as-sha256 | 501.47 ms/op | 506.07 ms/op | 0.99 |
| executeHashComputations - as-sha256 | 45.887 ms/op | 46.740 ms/op | 0.98 |
| hash 2 32 bytes Uint8Array 500000 times - noble | 1.2432 s/op | 1.2716 s/op | 0.98 |
| batch hash 16 x 64 Uint8Array 31250 times - noble | 1.2051 s/op | 1.2263 s/op | 0.98 |
| hashTwoObjects 500000 times - noble | 1.5686 s/op | 1.6138 s/op | 0.97 |
| executeHashComputations - noble | 35.939 ms/op | 36.524 ms/op | 0.98 |
| getHashComputations | 2.3776 ms/op | 2.1606 ms/op | 1.10 |
| executeHashComputations | 10.304 ms/op | 9.4928 ms/op | 1.09 |
| get root | 12.990 ms/op | 12.762 ms/op | 1.02 |
| getNodeH() x7812.5 avg hindex | 12.201 us/op | 12.245 us/op | 1.00 |
| getNodeH() x7812.5 index 0 | 7.6030 us/op | 7.4830 us/op | 1.02 |
| getNodeH() x7812.5 index 7 | 7.5710 us/op | 7.5570 us/op | 1.00 |
| getNodeH() x7812.5 index 7 with key array | 6.5960 us/op | 6.3360 us/op | 1.04 |
| new LeafNode() x7812.5 | 348.32 us/op | 310.05 us/op | 1.12 |
| getHashComputations 250000 nodes | 14.832 ms/op | 15.972 ms/op | 0.93 |
| batchHash 250000 nodes | 85.719 ms/op | 81.426 ms/op | 1.05 |
| get root 250000 nodes | 96.538 ms/op | 96.185 ms/op | 1.00 |
| getHashComputations 500000 nodes | 28.723 ms/op | 28.765 ms/op | 1.00 |
| batchHash 500000 nodes | 149.53 ms/op | 147.09 ms/op | 1.02 |
| get root 500000 nodes | 199.32 ms/op | 193.63 ms/op | 1.03 |
| getHashComputations 1000000 nodes | 62.017 ms/op | 63.073 ms/op | 0.98 |
| batchHash 1000000 nodes | 343.55 ms/op | 296.11 ms/op | 1.16 |
| get root 1000000 nodes | 386.21 ms/op | 382.65 ms/op | 1.01 |
| multiproof - depth 15, 1 requested leaves | 9.0140 us/op | 7.1870 us/op | 1.25 |
| tree offset multiproof - depth 15, 1 requested leaves | 19.142 us/op | 16.384 us/op | 1.17 |
| compact multiproof - depth 15, 1 requested leaves | 4.3000 us/op | 3.0660 us/op | 1.40 |
| multiproof - depth 15, 2 requested leaves | 12.215 us/op | 10.391 us/op | 1.18 |
| tree offset multiproof - depth 15, 2 requested leaves | 22.615 us/op | 19.749 us/op | 1.15 |
| compact multiproof - depth 15, 2 requested leaves | 4.2950 us/op | 3.1180 us/op | 1.38 |
| multiproof - depth 15, 3 requested leaves | 17.160 us/op | 14.865 us/op | 1.15 |
| tree offset multiproof - depth 15, 3 requested leaves | 29.712 us/op | 25.475 us/op | 1.17 |
| compact multiproof - depth 15, 3 requested leaves | 5.3810 us/op | 3.5990 us/op | 1.50 |
| multiproof - depth 15, 4 requested leaves | 22.518 us/op | 19.770 us/op | 1.14 |
| tree offset multiproof - depth 15, 4 requested leaves | 36.037 us/op | 32.210 us/op | 1.12 |
| compact multiproof - depth 15, 4 requested leaves | 5.1550 us/op | 3.9410 us/op | 1.31 |
| packedRootsBytesToLeafNodes bytes 4000 offset 0 | 6.4320 us/op | 5.5620 us/op | 1.16 |
| packedRootsBytesToLeafNodes bytes 4000 offset 1 | 6.7670 us/op | 5.5080 us/op | 1.23 |
| packedRootsBytesToLeafNodes bytes 4000 offset 2 | 6.7200 us/op | 5.5440 us/op | 1.21 |
| packedRootsBytesToLeafNodes bytes 4000 offset 3 | 6.8640 us/op | 5.6960 us/op | 1.21 |
| subtreeFillToContents depth 40 count 250000 | 48.716 ms/op | 45.642 ms/op | 1.07 |
| setRoot - gindexBitstring | 27.323 ms/op | 20.942 ms/op | 1.30 |
| setRoot - gindex | 28.475 ms/op | 21.937 ms/op | 1.30 |
| getRoot - gindexBitstring | 2.8850 ms/op | 2.5163 ms/op | 1.15 |
| getRoot - gindex | 3.5142 ms/op | 3.0995 ms/op | 1.13 |
| getHashObject then setHashObject | 28.645 ms/op | 22.234 ms/op | 1.29 |
| setNodeWithFn | 25.895 ms/op | 19.753 ms/op | 1.31 |
| getNodeAtDepth depth 0 x100000 | 280.48 us/op | 280.60 us/op | 1.00 |
| setNodeAtDepth depth 0 x100000 | 2.7493 ms/op | 2.5932 ms/op | 1.06 |
| getNodesAtDepth depth 0 x100000 | 312.55 us/op | 312.93 us/op | 1.00 |
| setNodesAtDepth depth 0 x100000 | 757.21 us/op | 762.85 us/op | 0.99 |
| getNodeAtDepth depth 1 x100000 | 345.22 us/op | 344.61 us/op | 1.00 |
| setNodeAtDepth depth 1 x100000 | 12.430 ms/op | 8.2710 ms/op | 1.50 |
| getNodesAtDepth depth 1 x100000 | 436.60 us/op | 436.59 us/op | 1.00 |
| setNodesAtDepth depth 1 x100000 | 10.309 ms/op | 8.0657 ms/op | 1.28 |
| getNodeAtDepth depth 2 x100000 | 794.39 us/op | 749.66 us/op | 1.06 |
| setNodeAtDepth depth 2 x100000 | 20.031 ms/op | 16.460 ms/op | 1.22 |
| getNodesAtDepth depth 2 x100000 | 21.047 ms/op | 17.644 ms/op | 1.19 |
| setNodesAtDepth depth 2 x100000 | 31.128 ms/op | 24.762 ms/op | 1.26 |
| tree.getNodesAtDepth - gindexes | 11.280 ms/op | 8.8768 ms/op | 1.27 |
| tree.getNodesAtDepth - push all nodes | 2.7884 ms/op | 2.3978 ms/op | 1.16 |
| tree.getNodesAtDepth - navigation | 314.42 us/op | 312.69 us/op | 1.01 |
| tree.setNodesAtDepth - indexes | 818.66 us/op | 691.74 us/op | 1.18 |
| set at depth 8 | 1.0730 us/op | 842.00 ns/op | 1.27 |
| set at depth 16 | 1.4150 us/op | 1.0580 us/op | 1.34 |
| set at depth 32 | 2.6730 us/op | 2.1410 us/op | 1.25 |
| iterateNodesAtDepth 8 256 | 16.707 us/op | 14.234 us/op | 1.17 |
| getNodesAtDepth 8 256 | 4.0200 us/op | 3.8480 us/op | 1.04 |
| iterateNodesAtDepth 16 65536 | 4.8901 ms/op | 4.6017 ms/op | 1.06 |
| getNodesAtDepth 16 65536 | 1.2295 ms/op | 1.1886 ms/op | 1.03 |
| iterateNodesAtDepth 32 250000 | 17.602 ms/op | 16.554 ms/op | 1.06 |
| getNodesAtDepth 32 250000 | 6.0788 ms/op | 6.6520 ms/op | 0.91 |
| iterateNodesAtDepth 40 250000 | 18.270 ms/op | 15.910 ms/op | 1.15 |
| getNodesAtDepth 40 250000 | 5.2920 ms/op | 4.5409 ms/op | 1.17 |
| 250000 validators root getter | 97.686 ms/op | 99.036 ms/op | 0.99 |
| 250000 validators batchHash() | 89.801 ms/op | 87.884 ms/op | 1.02 |
| 250000 validators hashComputations | 14.711 ms/op | 15.969 ms/op | 0.92 |
| bitlist bytes to struct (120,90) | 561.00 ns/op | 507.00 ns/op | 1.11 |
| bitlist bytes to tree (120,90) | 2.6780 us/op | 2.4350 us/op | 1.10 |
| bitlist bytes to struct (2048,2048) | 1.0790 us/op | 901.00 ns/op | 1.20 |
| bitlist bytes to tree (2048,2048) | 4.4370 us/op | 3.6920 us/op | 1.20 |
| ByteListType - deserialize | 9.4908 ms/op | 8.5525 ms/op | 1.11 |
| BasicListType - deserialize | 12.377 ms/op | 10.074 ms/op | 1.23 |
| ByteListType - serialize | 8.8363 ms/op | 8.6428 ms/op | 1.02 |
| BasicListType - serialize | 12.433 ms/op | 10.750 ms/op | 1.16 |
| BasicListType - tree_convertToStruct | 26.122 ms/op | 22.683 ms/op | 1.15 |
| List[uint8, 68719476736] len 300000 ViewDU.getAll() + iterate | 6.4426 ms/op | 4.9909 ms/op | 1.29 |
| List[uint8, 68719476736] len 300000 ViewDU.get(i) | 4.3898 ms/op | 4.3846 ms/op | 1.00 |
| Array.push len 300000 empty Array - number | 7.8759 ms/op | 6.9840 ms/op | 1.13 |
| Array.set len 300000 from new Array - number | 2.2627 ms/op | 2.2000 ms/op | 1.03 |
| Array.set len 300000 - number | 7.4276 ms/op | 6.5119 ms/op | 1.14 |
| Uint8Array.set len 300000 | 410.05 us/op | 399.81 us/op | 1.03 |
| Uint32Array.set len 300000 | 548.91 us/op | 525.26 us/op | 1.05 |
| Container({a: uint8, b: uint8}) getViewDU x300000 | 34.687 ms/op | 34.292 ms/op | 1.01 |
| ContainerNodeStruct({a: uint8, b: uint8}) getViewDU x300000 | 12.956 ms/op | 11.833 ms/op | 1.09 |
| List(Container) len 300000 ViewDU.getAllReadonly() + iterate | 192.68 ms/op | 207.99 ms/op | 0.93 |
| List(Container) len 300000 ViewDU.getAllReadonlyValues() + iterate | 252.78 ms/op | 245.56 ms/op | 1.03 |
| List(Container) len 300000 ViewDU.get(i) | 6.6799 ms/op | 6.5635 ms/op | 1.02 |
| List(Container) len 300000 ViewDU.getReadonly(i) | 6.6178 ms/op | 6.6814 ms/op | 0.99 |
| List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonly() + iterate | 37.469 ms/op | 37.838 ms/op | 0.99 |
| List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonlyValues() + iterate | 5.3515 ms/op | 5.1845 ms/op | 1.03 |
| List(ContainerNodeStruct) len 300000 ViewDU.get(i) | 6.8109 ms/op | 6.4862 ms/op | 1.05 |
| List(ContainerNodeStruct) len 300000 ViewDU.getReadonly(i) | 6.7275 ms/op | 6.4178 ms/op | 1.05 |
| Array.push len 300000 empty Array - object | 6.9558 ms/op | 6.6665 ms/op | 1.04 |
| Array.set len 300000 from new Array - object | 2.2218 ms/op | 1.9787 ms/op | 1.12 |
| Array.set len 300000 - object | 6.7435 ms/op | 6.5076 ms/op | 1.04 |
| cachePermanentRootStruct no cache | 3.4020 us/op | 3.2020 us/op | 1.06 |
| cachePermanentRootStruct with cache | 185.00 ns/op | 186.00 ns/op | 0.99 |
| epochParticipation len 250000 rws 7813 | 2.3998 ms/op | 2.2670 ms/op | 1.06 |
| Deneb BeaconBlock.hashTreeRoot(), numTransaction=200 | 4.8183 ms/op | 4.7187 ms/op | 1.02 |
| BeaconState ViewDU batchHashTreeRoot vc=200000 mod=100000 | 211.51 ms/op | 209.42 ms/op | 1.01 |
| BeaconState ViewDU batchHashTreeRoot - commit step vc=200000 mod=100000 | 177.48 ms/op | 182.01 ms/op | 0.98 |
| BeaconState ViewDU batchHashTreeRoot - hash step vc=200000 mod=100000 | 48.543 ms/op | 46.188 ms/op | 1.05 |
| BeaconState ViewDU hashTreeRoot() vc=200000 mod=100000 | 696.26 ms/op | 715.57 ms/op | 0.97 |
| BeaconState ViewDU hashTreeRoot - commit step vc=200000 mod=100000 | 63.594 ms/op | 69.030 ms/op | 0.92 |
| BeaconState ViewDU hashTreeRoot - validator tree creation vc=100000 mod=100000 | 258.67 ms/op | 259.51 ms/op | 1.00 |
| deserialize Attestation - tree | 3.5280 us/op | 3.7520 us/op | 0.94 |
| deserialize Attestation - struct | 1.8670 us/op | 1.8830 us/op | 0.99 |
| deserialize Attestation - struct (reuse bytes) | 1.4010 us/op | 1.5570 us/op | 0.90 |
| deserialize SignedAggregateAndProof - tree | 4.6760 us/op | 4.9650 us/op | 0.94 |
| deserialize SignedAggregateAndProof - struct | 2.9250 us/op | 3.1770 us/op | 0.92 |
| deserialize SignedAggregateAndProof - struct (reuse bytes) | 1.8590 us/op | 1.9410 us/op | 0.96 |
| deserialize SyncCommitteeMessage - tree | 1.3850 us/op | 1.5350 us/op | 0.90 |
| deserialize SyncCommitteeMessage - struct | 1.0630 us/op | 1.2800 us/op | 0.83 |
| deserialize SyncCommitteeMessage - struct (reuse bytes) | 733.00 ns/op | 719.00 ns/op | 1.02 |
| deserialize SignedContributionAndProof - tree | 2.7750 us/op | 2.7570 us/op | 1.01 |
| deserialize SignedContributionAndProof - struct | 2.2340 us/op | 2.2860 us/op | 0.98 |
| deserialize SignedContributionAndProof - struct (reuse bytes) | 1.2050 us/op | 1.2570 us/op | 0.96 |
| deserialize SignedBeaconBlock - tree | 270.15 us/op | 265.21 us/op | 1.02 |
| deserialize SignedBeaconBlock - struct | 118.64 us/op | 122.98 us/op | 0.96 |
| deserialize SignedBeaconBlock - struct (reuse bytes) | 75.649 us/op | 79.644 us/op | 0.95 |
| BeaconState vc 300000 - deserialize tree | 615.41 ms/op | 663.56 ms/op | 0.93 |
| BeaconState vc 300000 - serialize tree | 97.023 ms/op | 78.268 ms/op | 1.24 |
| BeaconState.historicalRoots vc 300000 - deserialize tree | 3.6800 us/op | 935.00 ns/op | 3.94 |
| BeaconState.historicalRoots vc 300000 - serialize tree | 731.00 ns/op | 679.00 ns/op | 1.08 |
| BeaconState.validators vc 300000 - deserialize tree | 576.25 ms/op | 607.69 ms/op | 0.95 |
| BeaconState.validators vc 300000 - serialize tree | 33.479 ms/op | 31.558 ms/op | 1.06 |
| BeaconState.balances vc 300000 - deserialize tree | 26.417 ms/op | 26.984 ms/op | 0.98 |
| BeaconState.balances vc 300000 - serialize tree | 3.5227 ms/op | 4.1462 ms/op | 0.85 |
| BeaconState.previousEpochParticipation vc 300000 - deserialize tree | 850.08 us/op | 1.0450 ms/op | 0.81 |
| BeaconState.previousEpochParticipation vc 300000 - serialize tree | 322.77 us/op | 326.95 us/op | 0.99 |
| BeaconState.currentEpochParticipation vc 300000 - deserialize tree | 865.00 us/op | 904.88 us/op | 0.96 |
| BeaconState.currentEpochParticipation vc 300000 - serialize tree | 322.15 us/op | 326.10 us/op | 0.99 |
| BeaconState.inactivityScores vc 300000 - deserialize tree | 26.836 ms/op | 27.233 ms/op | 0.99 |
| BeaconState.inactivityScores vc 300000 - serialize tree | 3.4691 ms/op | 3.7656 ms/op | 0.92 |
| hashTreeRoot Attestation - struct | 9.4010 us/op | 9.4770 us/op | 0.99 |
| hashTreeRoot Attestation - tree | 7.3950 us/op | 7.4430 us/op | 0.99 |
| hashTreeRoot SignedAggregateAndProof - struct | 12.254 us/op | 12.673 us/op | 0.97 |
| hashTreeRoot SignedAggregateAndProof - tree | 11.056 us/op | 11.157 us/op | 0.99 |
| hashTreeRoot SyncCommitteeMessage - struct | 3.0400 us/op | 3.0480 us/op | 1.00 |
| hashTreeRoot SyncCommitteeMessage - tree | 2.7860 us/op | 2.8680 us/op | 0.97 |
| hashTreeRoot SignedContributionAndProof - struct | 7.5000 us/op | 7.7430 us/op | 0.97 |
| hashTreeRoot SignedContributionAndProof - tree | 7.6410 us/op | 7.7080 us/op | 0.99 |
| hashTreeRoot SignedBeaconBlock - struct | 738.57 us/op | 769.26 us/op | 0.96 |
| hashTreeRoot SignedBeaconBlock - tree | 660.65 us/op | 667.75 us/op | 0.99 |
| hashTreeRoot Validator - struct | 4.3230 us/op | 4.4490 us/op | 0.97 |
| hashTreeRoot Validator - tree | 5.7190 us/op | 5.7130 us/op | 1.00 |
| BeaconState vc 300000 - hashTreeRoot tree | 1.9433 s/op | 1.9887 s/op | 0.98 |
| BeaconState vc 300000 - batchHashTreeRoot tree | 3.7646 s/op | 3.9133 s/op | 0.96 |
| BeaconState.historicalRoots vc 300000 - hashTreeRoot tree | 848.00 ns/op | 846.00 ns/op | 1.00 |
| BeaconState.validators vc 300000 - hashTreeRoot tree | 2.0774 s/op | 2.2238 s/op | 0.93 |
| BeaconState.balances vc 300000 - hashTreeRoot tree | 28.235 ms/op | 32.896 ms/op | 0.86 |
| BeaconState.previousEpochParticipation vc 300000 - hashTreeRoot tree | 3.5072 ms/op | 3.5301 ms/op | 0.99 |
| BeaconState.currentEpochParticipation vc 300000 - hashTreeRoot tree | 3.5184 ms/op | 3.5304 ms/op | 1.00 |
| BeaconState.inactivityScores vc 300000 - hashTreeRoot tree | 33.549 ms/op | 30.882 ms/op | 1.09 |
| hash64 x18 | 7.2460 us/op | 8.0850 us/op | 0.90 |
| hashTwoObjects x18 | 6.7920 us/op | 6.6340 us/op | 1.02 |
| hash64 x1740 | 631.73 us/op | 660.48 us/op | 0.96 |
| hashTwoObjects x1740 | 625.82 us/op | 612.95 us/op | 1.02 |
| hash64 x2700000 | 981.45 ms/op | 991.68 ms/op | 0.99 |
| hashTwoObjects x2700000 | 973.31 ms/op | 948.76 ms/op | 1.03 |
| get_exitEpoch - ContainerType | 232.00 ns/op | 252.00 ns/op | 0.92 |
| get_exitEpoch - ContainerNodeStructType | 243.00 ns/op | 276.00 ns/op | 0.88 |
| set_exitEpoch - ContainerType | 250.00 ns/op | 307.00 ns/op | 0.81 |
| set_exitEpoch - ContainerNodeStructType | 249.00 ns/op | 288.00 ns/op | 0.86 |
| get_pubkey - ContainerType | 896.00 ns/op | 984.00 ns/op | 0.91 |
| get_pubkey - ContainerNodeStructType | 217.00 ns/op | 250.00 ns/op | 0.87 |
| hashTreeRoot - ContainerType | 443.00 ns/op | 551.00 ns/op | 0.80 |
| hashTreeRoot - ContainerNodeStructType | 434.00 ns/op | 452.00 ns/op | 0.96 |
| createProof - ContainerType | 3.6370 us/op | 3.6270 us/op | 1.00 |
| createProof - ContainerNodeStructType | 19.726 us/op | 19.526 us/op | 1.01 |
| serialize - ContainerType | 1.6180 us/op | 1.7760 us/op | 0.91 |
| serialize - ContainerNodeStructType | 1.0990 us/op | 1.2040 us/op | 0.91 |
| set_exitEpoch_and_hashTreeRoot - ContainerType | 2.5510 us/op | 2.7140 us/op | 0.94 |
| set_exitEpoch_and_hashTreeRoot - ContainerNodeStructType | 6.4210 us/op | 7.0530 us/op | 0.91 |
| doBatchHashTreeRootValidators | 3.6450 us/op | 3.6820 us/op | 0.99 |
| ContainerNodeStructViewDU hashTreeRoot | 21.771 us/op | 23.419 us/op | 0.93 |
| Array - for of | 8.3010 us/op | 5.8770 us/op | 1.41 |
| Array - for(;;) | 6.7560 us/op | 5.7440 us/op | 1.18 |
| basicListValue.readonlyValuesArray() | 4.1974 ms/op | 6.4111 ms/op | 0.65 |
| basicListValue.readonlyValuesArray() + loop all | 4.2927 ms/op | 7.7334 ms/op | 0.56 |
| compositeListValue.readonlyValuesArray() | 29.622 ms/op | 34.295 ms/op | 0.86 |
| compositeListValue.readonlyValuesArray() + loop all | 31.023 ms/op | 25.304 ms/op | 1.23 |
| Number64UintType - get balances list | 4.6048 ms/op | 5.0148 ms/op | 0.92 |
| Number64UintType - set balances list | 10.087 ms/op | 10.287 ms/op | 0.98 |
| Number64UintType - get and increase 10 then set | 40.106 ms/op | 36.190 ms/op | 1.11 |
| Number64UintType - increase 10 using applyDelta | 16.042 ms/op | 14.629 ms/op | 1.10 |
| Number64UintType - increase 10 using applyDeltaInBatch | 16.348 ms/op | 14.741 ms/op | 1.11 |
| tree_newTreeFromUint64Deltas | 19.480 ms/op | 22.463 ms/op | 0.87 |
| unsafeUint8ArrayToTree | 37.166 ms/op | 32.893 ms/op | 1.13 |
| bitLength(50) | 236.00 ns/op | 257.00 ns/op | 0.92 |
| bitLengthStr(50) | 246.00 ns/op | 225.00 ns/op | 1.09 |
| bitLength(8000) | 232.00 ns/op | 252.00 ns/op | 0.92 |
| bitLengthStr(8000) | 274.00 ns/op | 278.00 ns/op | 0.99 |
| bitLength(250000) | 236.00 ns/op | 259.00 ns/op | 0.91 |
| bitLengthStr(250000) | 299.00 ns/op | 312.00 ns/op | 0.96 |
| merkleize 32 chunks | 12.807 us/op | 14.493 us/op | 0.88 |
| merkleizeBlocksBytes 32 chunks | 3.0980 us/op | 3.0030 us/op | 1.03 |
| merkleizeBlockArray 32 chunks | 5.9610 us/op | 6.2270 us/op | 0.96 |
| merkleize 128 chunks | 49.612 us/op | 51.597 us/op | 0.96 |
| merkleizeBlocksBytes 128 chunks | 7.2990 us/op | 7.2880 us/op | 1.00 |
| merkleizeBlockArray 128 chunks | 16.851 us/op | 17.457 us/op | 0.97 |
| merkleize 512 chunks | 198.07 us/op | 206.33 us/op | 0.96 |
| merkleizeBlocksBytes 512 chunks | 22.566 us/op | 22.522 us/op | 1.00 |
| merkleizeBlockArray 512 chunks | 58.430 us/op | 61.944 us/op | 0.94 |
| merkleize 1024 chunks | 398.88 us/op | 427.58 us/op | 0.93 |
| merkleizeBlocksBytes 1024 chunks | 42.453 us/op | 42.531 us/op | 1.00 |
| merkleizeBlockArray 1024 chunks | 112.69 us/op | 118.37 us/op | 0.95 |
| floor - Math.floor (53) | 1.2457 ns/op | 1.2451 ns/op | 1.00 |
| floor - << 0 (53) | 1.2464 ns/op | 1.2459 ns/op | 1.00 |
| floor - Math.floor (512) | 1.2463 ns/op | 1.2487 ns/op | 1.00 |
| floor - << 0 (512) | 1.2457 ns/op | 1.2449 ns/op | 1.00 |
| fnIf(0) | 1.5629 ns/op | 1.5560 ns/op | 1.00 |
| fnSwitch(0) | 2.1818 ns/op | 2.1811 ns/op | 1.00 |
| fnObj(0) | 1.5586 ns/op | 1.5628 ns/op | 1.00 |
| fnArr(0) | 1.5572 ns/op | 1.5549 ns/op | 1.00 |
| fnIf(4) | 2.1812 ns/op | 2.1825 ns/op | 1.00 |
| fnSwitch(4) | 2.1790 ns/op | 2.1782 ns/op | 1.00 |
| fnObj(4) | 1.5564 ns/op | 1.5671 ns/op | 0.99 |
| fnArr(4) | 1.5580 ns/op | 1.5570 ns/op | 1.00 |
| fnIf(9) | 3.1139 ns/op | 3.1206 ns/op | 1.00 |
| fnSwitch(9) | 2.1793 ns/op | 2.1899 ns/op | 1.00 |
| fnObj(9) | 1.5696 ns/op | 1.5620 ns/op | 1.00 |
| fnArr(9) | 1.5578 ns/op | 1.5572 ns/op | 1.00 |
| Container {a,b,vec} - as struct x100000 | 124.79 us/op | 125.18 us/op | 1.00 |
| Container {a,b,vec} - as tree x100000 | 561.74 us/op | 560.69 us/op | 1.00 |
| Container {a,vec,b} - as struct x100000 | 155.88 us/op | 155.85 us/op | 1.00 |
| Container {a,vec,b} - as tree x100000 | 560.90 us/op | 560.33 us/op | 1.00 |
| get 2 props x1000000 - rawObject | 312.05 us/op | 312.03 us/op | 1.00 |
| get 2 props x1000000 - proxy | 72.549 ms/op | 72.615 ms/op | 1.00 |
| get 2 props x1000000 - customObj | 314.02 us/op | 312.41 us/op | 1.01 |
| Simple object binary -> struct | 630.00 ns/op | 639.00 ns/op | 0.99 |
| Simple object binary -> tree_backed | 1.5900 us/op | 1.6970 us/op | 0.94 |
| Simple object struct -> tree_backed | 2.1190 us/op | 2.2240 us/op | 0.95 |
| Simple object tree_backed -> struct | 1.4840 us/op | 1.5230 us/op | 0.97 |
| Simple object struct -> binary | 849.00 ns/op | 874.00 ns/op | 0.97 |
| Simple object tree_backed -> binary | 1.2070 us/op | 1.2290 us/op | 0.98 |
| aggregationBits binary -> struct | 486.00 ns/op | 481.00 ns/op | 1.01 |
| aggregationBits binary -> tree_backed | 1.9930 us/op | 2.2360 us/op | 0.89 |
| aggregationBits struct -> tree_backed | 2.3520 us/op | 2.6710 us/op | 0.88 |
| aggregationBits tree_backed -> struct | 924.00 ns/op | 975.00 ns/op | 0.95 |
| aggregationBits struct -> binary | 687.00 ns/op | 716.00 ns/op | 0.96 |
| aggregationBits tree_backed -> binary | 803.00 ns/op | 827.00 ns/op | 0.97 |
| List(uint8) 100000 binary -> struct | 1.0083 ms/op | 919.72 us/op | 1.10 |
| List(uint8) 100000 binary -> tree_backed | 255.74 us/op | 283.33 us/op | 0.90 |
| List(uint8) 100000 struct -> tree_backed | 1.3003 ms/op | 1.3936 ms/op | 0.93 |
| List(uint8) 100000 tree_backed -> struct | 1.0066 ms/op | 971.83 us/op | 1.04 |
| List(uint8) 100000 struct -> binary | 1.0664 ms/op | 1.0616 ms/op | 1.00 |
| List(uint8) 100000 tree_backed -> binary | 103.86 us/op | 108.28 us/op | 0.96 |
| List(uint64Number) 100000 binary -> struct | 1.2381 ms/op | 1.3411 ms/op | 0.92 |
| List(uint64Number) 100000 binary -> tree_backed | 4.0481 ms/op | 4.5103 ms/op | 0.90 |
| List(uint64Number) 100000 struct -> tree_backed | 6.0210 ms/op | 7.1436 ms/op | 0.84 |
| List(uint64Number) 100000 tree_backed -> struct | 2.3045 ms/op | 2.5979 ms/op | 0.89 |
| List(uint64Number) 100000 struct -> binary | 1.4116 ms/op | 1.4332 ms/op | 0.98 |
| List(uint64Number) 100000 tree_backed -> binary | 1.0218 ms/op | 1.0756 ms/op | 0.95 |
| List(Uint64Bigint) 100000 binary -> struct | 3.6049 ms/op | 3.9069 ms/op | 0.92 |
| List(Uint64Bigint) 100000 binary -> tree_backed | 4.9114 ms/op | 4.9646 ms/op | 0.99 |
| List(Uint64Bigint) 100000 struct -> tree_backed | 6.9878 ms/op | 6.6034 ms/op | 1.06 |
| List(Uint64Bigint) 100000 tree_backed -> struct | 4.6085 ms/op | 4.9696 ms/op | 0.93 |
| List(Uint64Bigint) 100000 struct -> binary | 2.0944 ms/op | 2.0900 ms/op | 1.00 |
| List(Uint64Bigint) 100000 tree_backed -> binary | 1.0317 ms/op | 1.0931 ms/op | 0.94 |
| Vector(Root) 100000 binary -> struct | 33.974 ms/op | 34.202 ms/op | 0.99 |
| Vector(Root) 100000 binary -> tree_backed | 32.642 ms/op | 33.912 ms/op | 0.96 |
| Vector(Root) 100000 struct -> tree_backed | 49.278 ms/op | 49.456 ms/op | 1.00 |
| Vector(Root) 100000 tree_backed -> struct | 50.003 ms/op | 48.494 ms/op | 1.03 |
| Vector(Root) 100000 struct -> binary | 3.0354 ms/op | 3.0840 ms/op | 0.98 |
| Vector(Root) 100000 tree_backed -> binary | 6.1558 ms/op | 7.0168 ms/op | 0.88 |
| List(Validator) 100000 binary -> struct | 111.07 ms/op | 106.28 ms/op | 1.05 |
| List(Validator) 100000 binary -> tree_backed | 327.51 ms/op | 323.26 ms/op | 1.01 |
| List(Validator) 100000 struct -> tree_backed | 372.44 ms/op | 373.70 ms/op | 1.00 |
| List(Validator) 100000 tree_backed -> struct | 212.32 ms/op | 207.42 ms/op | 1.02 |
| List(Validator) 100000 struct -> binary | 29.223 ms/op | 30.059 ms/op | 0.97 |
| List(Validator) 100000 tree_backed -> binary | 108.21 ms/op | 105.13 ms/op | 1.03 |
| List(Validator-NS) 100000 binary -> struct | 110.34 ms/op | 110.45 ms/op | 1.00 |
| List(Validator-NS) 100000 binary -> tree_backed | 160.89 ms/op | 158.04 ms/op | 1.02 |
| List(Validator-NS) 100000 struct -> tree_backed | 184.35 ms/op | 185.17 ms/op | 1.00 |
| List(Validator-NS) 100000 tree_backed -> struct | 150.12 ms/op | 149.38 ms/op | 1.00 |
| List(Validator-NS) 100000 struct -> binary | 7.6235 ms/op | 7.5555 ms/op | 1.01 |
| List(Validator-NS) 100000 tree_backed -> binary | 12.996 ms/op | 13.129 ms/op | 0.99 |
| get epochStatuses - MutableVector | 103.36 us/op | 105.49 us/op | 0.98 |
| get epochStatuses - ViewDU | 210.72 us/op | 174.43 us/op | 1.21 |
| set epochStatuses - ListTreeView | 2.1944 ms/op | 2.1719 ms/op | 1.01 |
| set epochStatuses - ListTreeView - set() | 440.49 us/op | 469.31 us/op | 0.94 |
| set epochStatuses - ListTreeView - commit() | 797.05 us/op | 769.40 us/op | 1.04 |
| bitstring | 516.47 ns/op | 516.16 ns/op | 1.00 |
| bit mask | 13.389 ns/op | 13.683 ns/op | 0.98 |
| struct - increase slot to 1000000 | 937.44 us/op | 934.67 us/op | 1.00 |
| UintNumberType - increase slot to 1000000 | 27.793 ms/op | 29.302 ms/op | 0.95 |
| UintBigintType - increase slot to 1000000 | 171.44 ms/op | 179.06 ms/op | 0.96 |
| UintBigint8 x 100000 tree_deserialize | 5.6775 ms/op | 5.7310 ms/op | 0.99 |
| UintBigint8 x 100000 tree_serialize | 1.1440 ms/op | 1.1295 ms/op | 1.01 |
| UintBigint16 x 100000 tree_deserialize | 5.8020 ms/op | 6.3842 ms/op | 0.91 |
| UintBigint16 x 100000 tree_serialize | 1.3988 ms/op | 1.3928 ms/op | 1.00 |
| UintBigint32 x 100000 tree_deserialize | 6.0432 ms/op | 5.8390 ms/op | 1.03 |
| UintBigint32 x 100000 tree_serialize | 1.8959 ms/op | 1.7317 ms/op | 1.09 |
| UintBigint64 x 100000 tree_deserialize | 6.1921 ms/op | 6.1226 ms/op | 1.01 |
| UintBigint64 x 100000 tree_serialize | 2.7776 ms/op | 1.7219 ms/op | 1.61 |
| UintBigint8 x 100000 value_deserialize | 405.46 us/op | 409.30 us/op | 0.99 |
| UintBigint8 x 100000 value_serialize | 780.59 us/op | 783.51 us/op | 1.00 |
| UintBigint16 x 100000 value_deserialize | 467.45 us/op | 467.42 us/op | 1.00 |
| UintBigint16 x 100000 value_serialize | 826.25 us/op | 817.74 us/op | 1.01 |
| UintBigint32 x 100000 value_deserialize | 498.59 us/op | 498.77 us/op | 1.00 |
| UintBigint32 x 100000 value_serialize | 875.65 us/op | 861.83 us/op | 1.02 |
| UintBigint64 x 100000 value_deserialize | 531.79 us/op | 532.11 us/op | 1.00 |
| UintBigint64 x 100000 value_serialize | 1.0138 ms/op | 1.0390 ms/op | 0.98 |
| UintBigint8 x 100000 deserialize | 3.5864 ms/op | 3.3833 ms/op | 1.06 |
| UintBigint8 x 100000 serialize | 1.5638 ms/op | 1.7067 ms/op | 0.92 |
| UintBigint16 x 100000 deserialize | 3.3039 ms/op | 3.6037 ms/op | 0.92 |
| UintBigint16 x 100000 serialize | 1.6244 ms/op | 1.5416 ms/op | 1.05 |
| UintBigint32 x 100000 deserialize | 3.7234 ms/op | 3.6894 ms/op | 1.01 |
| UintBigint32 x 100000 serialize | 3.0301 ms/op | 2.9007 ms/op | 1.04 |
| UintBigint64 x 100000 deserialize | 4.2171 ms/op | 4.6865 ms/op | 0.90 |
| UintBigint64 x 100000 serialize | 1.6715 ms/op | 1.6695 ms/op | 1.00 |
| UintBigint128 x 100000 deserialize | 6.2857 ms/op | 6.0558 ms/op | 1.04 |
| UintBigint128 x 100000 serialize | 16.230 ms/op | 15.467 ms/op | 1.05 |
| UintBigint256 x 100000 deserialize | 9.5459 ms/op | 9.2868 ms/op | 1.03 |
| UintBigint256 x 100000 serialize | 47.755 ms/op | 46.347 ms/op | 1.03 |
| Slice from Uint8Array x25000 | 1.8179 ms/op | 1.3829 ms/op | 1.31 |
| Slice from ArrayBuffer x25000 | 16.965 ms/op | 16.435 ms/op | 1.03 |
| Slice from ArrayBuffer x25000 + new Uint8Array | 18.601 ms/op | 18.363 ms/op | 1.01 |
| Copy Uint8Array 100000 iterate | 1.6801 ms/op | 1.6719 ms/op | 1.00 |
| Copy Uint8Array 100000 slice | 113.20 us/op | 113.91 us/op | 0.99 |
| Copy Uint8Array 100000 Uint8Array.prototype.slice.call | 110.43 us/op | 105.76 us/op | 1.04 |
| Copy Buffer 100000 Uint8Array.prototype.slice.call | 107.28 us/op | 110.18 us/op | 0.97 |
| Copy Uint8Array 100000 slice + set | 203.23 us/op | 223.85 us/op | 0.91 |
| Copy Uint8Array 100000 subarray + set | 104.07 us/op | 107.58 us/op | 0.97 |
| Copy Uint8Array 100000 slice arrayBuffer | 103.58 us/op | 102.28 us/op | 1.01 |
| Uint64 deserialize 100000 - iterate Uint8Array | 2.0078 ms/op | 1.9803 ms/op | 1.01 |
| Uint64 deserialize 100000 - by Uint32A | 1.9517 ms/op | 1.8703 ms/op | 1.04 |
| Uint64 deserialize 100000 - by DataView.getUint32 x2 | 2.0596 ms/op | 1.8418 ms/op | 1.12 |
| Uint64 deserialize 100000 - by DataView.getBigUint64 | 4.9296 ms/op | 5.1221 ms/op | 0.96 |
| Uint64 deserialize 100000 - by byte | 40.252 ms/op | 40.657 ms/op | 0.99 |
by benchmarkbot/action
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 I have created a release beep boop
as-sha256: 1.2.4
1.2.4 (2026-04-21)
Bug Fixes
persistent-merkle-tree: 1.2.5
1.2.5 (2026-04-21)
Bug Fixes
Dependencies
persistent-ts: 1.0.3
1.0.3 (2026-04-21)
Bug Fixes
ssz: 1.3.4
1.3.4 (2026-04-21)
Bug Fixes
Miscellaneous
Dependencies
This PR was generated with Release Please. See documentation.