ChainSafe / ssz

Typescript implementation of Simple Serialize (SSZ)
https://simpleserialize.com/
Other
44 stars 17 forks source link

fix: handle setBitOr in ListBasicTreeViewDU.sliceTo() #338

Closed twoeths closed 9 months ago

twoeths commented 10 months ago

Motivation

The implementation in #336 does not work with element type as UintNumberType setBitWise true because we cannot set to 0 with tree_setToPackedNode api

Description

Steps to test or reproduce

Run unit tests

github-actions[bot] commented 10 months ago

Performance Report

✔️ no performance regression detected

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: dd2b3e59bbab1f8b67b6e6c370c9ae0b7a7874c8 Previous: e84686b2192fee9e5d9413d55a57cf40af6fd3ef Ratio
Uint32Array.set len 300000 282.08 us/op 855.64 us/op 0.33
Container({a: uint8, b: uint8}) getViewDU x300000 27.713 ms/op 90.326 ms/op 0.31
Full benchmark results | Benchmark suite | Current: dd2b3e59bbab1f8b67b6e6c370c9ae0b7a7874c8 | Previous: e84686b2192fee9e5d9413d55a57cf40af6fd3ef | Ratio | |-|-|-|-| | digestTwoHashObjects 50023 times | 68.679 ms/op | 69.640 ms/op | 0.99 | | digest64 50023 times | 70.626 ms/op | 71.442 ms/op | 0.99 | | digest 50023 times | 70.214 ms/op | 71.279 ms/op | 0.99 | | input length 32 | 1.5650 us/op | 1.6200 us/op | 0.97 | | input length 64 | 1.7960 us/op | 1.8480 us/op | 0.97 | | input length 128 | 3.1230 us/op | 3.1610 us/op | 0.99 | | input length 256 | 4.7880 us/op | 4.7760 us/op | 1.00 | | input length 512 | 7.9630 us/op | 8.0080 us/op | 0.99 | | input length 1024 | 15.675 us/op | 15.714 us/op | 1.00 | | digest 1000000 times | 1.1308 s/op | 1.1396 s/op | 0.99 | | hashObjectToByteArray 50023 times | 1.9023 ms/op | 1.9773 ms/op | 0.96 | | byteArrayToHashObject 50023 times | 2.0429 ms/op | 2.5535 ms/op | 0.80 | | getGindicesAtDepth | 5.0820 us/op | 5.6100 us/op | 0.91 | | iterateAtDepth | 10.947 us/op | 11.813 us/op | 0.93 | | getGindexBits | 536.00 ns/op | 591.00 ns/op | 0.91 | | gindexIterator | 1.2660 us/op | 1.4300 us/op | 0.89 | | hash 2 Uint8Array 2250026 times - as-sha256 | 3.2036 s/op | 3.3163 s/op | 0.97 | | hashTwoObjects 2250026 times - as-sha256 | 3.1201 s/op | 3.1522 s/op | 0.99 | | hash 2 Uint8Array 2250026 times - noble | 8.5559 s/op | 11.713 s/op | 0.73 | | hashTwoObjects 2250026 times - noble | 10.996 s/op | 13.850 s/op | 0.79 | | getNodeH() x7812.5 avg hindex | 20.939 us/op | 21.392 us/op | 0.98 | | getNodeH() x7812.5 index 0 | 6.8160 us/op | 7.2730 us/op | 0.94 | | getNodeH() x7812.5 index 7 | 6.8550 us/op | 7.3710 us/op | 0.93 | | getNodeH() x7812.5 index 7 with key array | 6.8750 us/op | 7.2650 us/op | 0.95 | | new LeafNode() x7812.5 | 529.08 us/op | 340.86 us/op | 1.55 | | multiproof - depth 15, 1 requested leaves | 15.106 us/op | 19.122 us/op | 0.79 | | tree offset multiproof - depth 15, 1 requested leaves | 28.698 us/op | 44.235 us/op | 0.65 | | compact multiproof - depth 15, 1 requested leaves | 7.6980 us/op | 12.387 us/op | 0.62 | | multiproof - depth 15, 2 requested leaves | 18.686 us/op | 24.270 us/op | 0.77 | | tree offset multiproof - depth 15, 2 requested leaves | 33.703 us/op | 44.701 us/op | 0.75 | | compact multiproof - depth 15, 2 requested leaves | 4.5400 us/op | 4.9290 us/op | 0.92 | | multiproof - depth 15, 3 requested leaves | 25.526 us/op | 32.789 us/op | 0.78 | | tree offset multiproof - depth 15, 3 requested leaves | 43.390 us/op | 56.288 us/op | 0.77 | | compact multiproof - depth 15, 3 requested leaves | 7.7820 us/op | 12.942 us/op | 0.60 | | multiproof - depth 15, 4 requested leaves | 33.599 us/op | 42.076 us/op | 0.80 | | tree offset multiproof - depth 15, 4 requested leaves | 54.670 us/op | 68.926 us/op | 0.79 | | compact multiproof - depth 15, 4 requested leaves | 8.6780 us/op | 14.147 us/op | 0.61 | | packedRootsBytesToLeafNodes bytes 4000 offset 0 | 2.7590 us/op | 4.1540 us/op | 0.66 | | packedRootsBytesToLeafNodes bytes 4000 offset 1 | 2.7450 us/op | 4.3710 us/op | 0.63 | | packedRootsBytesToLeafNodes bytes 4000 offset 2 | 2.7100 us/op | 4.5130 us/op | 0.60 | | packedRootsBytesToLeafNodes bytes 4000 offset 3 | 2.7380 us/op | 4.2880 us/op | 0.64 | | subtreeFillToContents depth 40 count 250000 | 70.411 ms/op | 77.619 ms/op | 0.91 | | setRoot - gindexBitstring | 10.979 ms/op | 17.320 ms/op | 0.63 | | setRoot - gindex | 12.301 ms/op | 18.932 ms/op | 0.65 | | getRoot - gindexBitstring | 2.9323 ms/op | 3.2683 ms/op | 0.90 | | getRoot - gindex | 4.2227 ms/op | 4.4088 ms/op | 0.96 | | getHashObject then setHashObject | 14.844 ms/op | 20.609 ms/op | 0.72 | | setNodeWithFn | 12.355 ms/op | 19.001 ms/op | 0.65 | | getNodeAtDepth depth 0 x100000 | 1.6139 ms/op | 1.6208 ms/op | 1.00 | | setNodeAtDepth depth 0 x100000 | 3.3722 ms/op | 4.7174 ms/op | 0.71 | | getNodesAtDepth depth 0 x100000 | 1.4191 ms/op | 1.4180 ms/op | 1.00 | | setNodesAtDepth depth 0 x100000 | 1.9779 ms/op | 1.9757 ms/op | 1.00 | | getNodeAtDepth depth 1 x100000 | 1.7394 ms/op | 1.7420 ms/op | 1.00 | | setNodeAtDepth depth 1 x100000 | 7.2221 ms/op | 10.341 ms/op | 0.70 | | getNodesAtDepth depth 1 x100000 | 1.5914 ms/op | 1.5900 ms/op | 1.00 | | setNodesAtDepth depth 1 x100000 | 5.9922 ms/op | 7.8267 ms/op | 0.77 | | getNodeAtDepth depth 2 x100000 | 2.1803 ms/op | 2.2008 ms/op | 0.99 | | setNodeAtDepth depth 2 x100000 | 12.097 ms/op | 16.633 ms/op | 0.73 | | getNodesAtDepth depth 2 x100000 | 25.683 ms/op | 27.029 ms/op | 0.95 | | setNodesAtDepth depth 2 x100000 | 20.243 ms/op | 22.592 ms/op | 0.90 | | tree.getNodesAtDepth - gindexes | 6.4085 ms/op | 9.2697 ms/op | 0.69 | | tree.getNodesAtDepth - push all nodes | 2.5121 ms/op | 3.9816 ms/op | 0.63 | | tree.getNodesAtDepth - navigation | 201.44 us/op | 201.60 us/op | 1.00 | | tree.setNodesAtDepth - indexes | 525.64 us/op | 595.56 us/op | 0.88 | | set at depth 8 | 713.00 ns/op | 837.00 ns/op | 0.85 | | set at depth 16 | 830.00 ns/op | 1.2230 us/op | 0.68 | | set at depth 32 | 1.3950 us/op | 1.9870 us/op | 0.70 | | iterateNodesAtDepth 8 256 | 17.624 us/op | 19.431 us/op | 0.91 | | getNodesAtDepth 8 256 | 4.3640 us/op | 4.7080 us/op | 0.93 | | iterateNodesAtDepth 16 65536 | 5.3559 ms/op | 5.6873 ms/op | 0.94 | | getNodesAtDepth 16 65536 | 2.2551 ms/op | 3.3143 ms/op | 0.68 | | iterateNodesAtDepth 32 250000 | 20.486 ms/op | 21.282 ms/op | 0.96 | | getNodesAtDepth 32 250000 | 5.7430 ms/op | 7.6401 ms/op | 0.75 | | iterateNodesAtDepth 40 250000 | 20.368 ms/op | 21.180 ms/op | 0.96 | | getNodesAtDepth 40 250000 | 5.7360 ms/op | 7.6130 ms/op | 0.75 | | 250k validators | 11.390 s/op | 14.895 s/op | 0.76 | | bitlist bytes to struct (120,90) | 1.1030 us/op | 1.2270 us/op | 0.90 | | bitlist bytes to tree (120,90) | 3.8690 us/op | 4.5530 us/op | 0.85 | | bitlist bytes to struct (2048,2048) | 1.7870 us/op | 2.4060 us/op | 0.74 | | bitlist bytes to tree (2048,2048) | 6.4850 us/op | 9.1870 us/op | 0.71 | | ByteListType - deserialize | 14.244 ms/op | 18.304 ms/op | 0.78 | | BasicListType - deserialize | 12.754 ms/op | 24.643 ms/op | 0.52 | | ByteListType - serialize | 14.989 ms/op | 17.970 ms/op | 0.83 | | BasicListType - serialize | 17.760 ms/op | 23.425 ms/op | 0.76 | | BasicListType - tree_convertToStruct | 31.253 ms/op | 46.087 ms/op | 0.68 | | List[uint8, 68719476736] len 300000 ViewDU.getAll() + iterate | 4.4208 ms/op | 5.8787 ms/op | 0.75 | | List[uint8, 68719476736] len 300000 ViewDU.get(i) | 4.6269 ms/op | 3.9596 ms/op | 1.17 | | Array.push len 300000 empty Array - number | 7.8626 ms/op | 8.9562 ms/op | 0.88 | | Array.set len 300000 from new Array - number | 2.1572 ms/op | 2.8931 ms/op | 0.75 | | Array.set len 300000 - number | 7.3738 ms/op | 8.5705 ms/op | 0.86 | | Uint8Array.set len 300000 | 234.70 us/op | 244.99 us/op | 0.96 | | Uint32Array.set len 300000 | 282.08 us/op | 855.64 us/op | 0.33 | | Container({a: uint8, b: uint8}) getViewDU x300000 | 27.713 ms/op | 90.326 ms/op | 0.31 | | ContainerNodeStruct({a: uint8, b: uint8}) getViewDU x300000 | 12.307 ms/op | 19.500 ms/op | 0.63 | | List(Container) len 300000 ViewDU.getAllReadonly() + iterate | 474.82 ms/op | 516.28 ms/op | 0.92 | | List(Container) len 300000 ViewDU.getAllReadonlyValues() + iterate | 404.00 ms/op | 512.58 ms/op | 0.79 | | List(Container) len 300000 ViewDU.get(i) | 9.6173 ms/op | 12.859 ms/op | 0.75 | | List(Container) len 300000 ViewDU.getReadonly(i) | 8.3714 ms/op | 12.478 ms/op | 0.67 | | List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonly() + iterate | 48.865 ms/op | 52.480 ms/op | 0.93 | | List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonlyValues() + iterate | 6.7975 ms/op | 9.2981 ms/op | 0.73 | | List(ContainerNodeStruct) len 300000 ViewDU.get(i) | 8.4928 ms/op | 11.831 ms/op | 0.72 | | List(ContainerNodeStruct) len 300000 ViewDU.getReadonly(i) | 8.3594 ms/op | 11.868 ms/op | 0.70 | | Array.push len 300000 empty Array - object | 7.2574 ms/op | 9.0278 ms/op | 0.80 | | Array.set len 300000 from new Array - object | 2.7275 ms/op | 4.4876 ms/op | 0.61 | | Array.set len 300000 - object | 6.6914 ms/op | 8.6700 ms/op | 0.77 | | cachePermanentRootStruct no cache | 13.169 us/op | 14.158 us/op | 0.93 | | cachePermanentRootStruct with cache | 284.00 ns/op | 331.00 ns/op | 0.86 | | epochParticipation len 250000 rws 7813 | 3.1306 ms/op | 3.2972 ms/op | 0.95 | | deserialize Attestation - tree | 4.3080 us/op | 5.0580 us/op | 0.85 | | deserialize Attestation - struct | 2.9640 us/op | 3.3920 us/op | 0.87 | | deserialize SignedAggregateAndProof - tree | 5.5080 us/op | 6.6690 us/op | 0.83 | | deserialize SignedAggregateAndProof - struct | 4.5920 us/op | 5.2780 us/op | 0.87 | | deserialize SyncCommitteeMessage - tree | 1.6170 us/op | 1.8650 us/op | 0.87 | | deserialize SyncCommitteeMessage - struct | 1.8150 us/op | 2.2270 us/op | 0.81 | | deserialize SignedContributionAndProof - tree | 2.7700 us/op | 3.2250 us/op | 0.86 | | deserialize SignedContributionAndProof - struct | 3.9360 us/op | 4.8430 us/op | 0.81 | | deserialize SignedBeaconBlock - tree | 302.92 us/op | 373.80 us/op | 0.81 | | deserialize SignedBeaconBlock - struct | 196.50 us/op | 237.65 us/op | 0.83 | | BeaconState vc 300000 - deserialize tree | 807.97 ms/op | 887.00 ms/op | 0.91 | | BeaconState vc 300000 - serialize tree | 267.81 ms/op | 171.89 ms/op | 1.56 | | BeaconState.historicalRoots vc 300000 - deserialize tree | 1.1780 us/op | 1.2700 us/op | 0.93 | | BeaconState.historicalRoots vc 300000 - serialize tree | 1.2600 us/op | 1.4860 us/op | 0.85 | | BeaconState.validators vc 300000 - deserialize tree | 829.65 ms/op | 909.78 ms/op | 0.91 | | BeaconState.validators vc 300000 - serialize tree | 198.59 ms/op | 231.37 ms/op | 0.86 | | BeaconState.balances vc 300000 - deserialize tree | 32.737 ms/op | 36.016 ms/op | 0.91 | | BeaconState.balances vc 300000 - serialize tree | 3.4728 ms/op | 6.6848 ms/op | 0.52 | | BeaconState.previousEpochParticipation vc 300000 - deserialize tree | 455.39 us/op | 843.05 us/op | 0.54 | | BeaconState.previousEpochParticipation vc 300000 - serialize tree | 339.20 us/op | 367.13 us/op | 0.92 | | BeaconState.currentEpochParticipation vc 300000 - deserialize tree | 462.37 us/op | 845.53 us/op | 0.55 | | BeaconState.currentEpochParticipation vc 300000 - serialize tree | 331.12 us/op | 368.00 us/op | 0.90 | | BeaconState.inactivityScores vc 300000 - deserialize tree | 35.034 ms/op | 39.482 ms/op | 0.89 | | BeaconState.inactivityScores vc 300000 - serialize tree | 3.7421 ms/op | 6.2821 ms/op | 0.60 | | hashTreeRoot Attestation - struct | 41.467 us/op | 62.534 us/op | 0.66 | | hashTreeRoot Attestation - tree | 29.196 us/op | 36.662 us/op | 0.80 | | hashTreeRoot SignedAggregateAndProof - struct | 58.457 us/op | 80.505 us/op | 0.73 | | hashTreeRoot SignedAggregateAndProof - tree | 40.588 us/op | 42.173 us/op | 0.96 | | hashTreeRoot SyncCommitteeMessage - struct | 13.759 us/op | 19.243 us/op | 0.72 | | hashTreeRoot SyncCommitteeMessage - tree | 9.0100 us/op | 9.2080 us/op | 0.98 | | hashTreeRoot SignedContributionAndProof - struct | 38.960 us/op | 52.834 us/op | 0.74 | | hashTreeRoot SignedContributionAndProof - tree | 28.454 us/op | 32.714 us/op | 0.87 | | hashTreeRoot SignedBeaconBlock - struct | 3.3557 ms/op | 4.0247 ms/op | 0.83 | | hashTreeRoot SignedBeaconBlock - tree | 2.4189 ms/op | 2.4251 ms/op | 1.00 | | hashTreeRoot Validator - struct | 18.108 us/op | 20.929 us/op | 0.87 | | hashTreeRoot Validator - tree | 15.360 us/op | 16.553 us/op | 0.93 | | BeaconState vc 300000 - hashTreeRoot tree | 5.0789 s/op | 5.2684 s/op | 0.96 | | BeaconState.historicalRoots vc 300000 - hashTreeRoot tree | 2.0180 us/op | 2.1450 us/op | 0.94 | | BeaconState.validators vc 300000 - hashTreeRoot tree | 4.8482 s/op | 5.0272 s/op | 0.96 | | BeaconState.balances vc 300000 - hashTreeRoot tree | 126.78 ms/op | 128.95 ms/op | 0.98 | | BeaconState.previousEpochParticipation vc 300000 - hashTreeRoot tree | 13.160 ms/op | 13.223 ms/op | 1.00 | | BeaconState.currentEpochParticipation vc 300000 - hashTreeRoot tree | 13.164 ms/op | 13.217 ms/op | 1.00 | | BeaconState.inactivityScores vc 300000 - hashTreeRoot tree | 130.03 ms/op | 132.71 ms/op | 0.98 | | hash64 x18 | 27.823 us/op | 28.626 us/op | 0.97 | | hashTwoObjects x18 | 25.851 us/op | 27.366 us/op | 0.94 | | hash64 x1740 | 2.6415 ms/op | 2.7316 ms/op | 0.97 | | hashTwoObjects x1740 | 2.4475 ms/op | 2.5517 ms/op | 0.96 | | hash64 x2700000 | 4.0814 s/op | 4.2206 s/op | 0.97 | | hashTwoObjects x2700000 | 3.7813 s/op | 4.0114 s/op | 0.94 | | get_exitEpoch - ContainerType | 465.00 ns/op | 499.00 ns/op | 0.93 | | get_exitEpoch - ContainerNodeStructType | 402.00 ns/op | 431.00 ns/op | 0.93 | | set_exitEpoch - ContainerType | 447.00 ns/op | 492.00 ns/op | 0.91 | | set_exitEpoch - ContainerNodeStructType | 418.00 ns/op | 436.00 ns/op | 0.96 | | get_pubkey - ContainerType | 1.6990 us/op | 2.1220 us/op | 0.80 | | get_pubkey - ContainerNodeStructType | 297.00 ns/op | 332.00 ns/op | 0.89 | | hashTreeRoot - ContainerType | 495.00 ns/op | 549.00 ns/op | 0.90 | | hashTreeRoot - ContainerNodeStructType | 560.00 ns/op | 641.00 ns/op | 0.87 | | createProof - ContainerType | 6.6540 us/op | 7.4480 us/op | 0.89 | | createProof - ContainerNodeStructType | 33.364 us/op | 38.563 us/op | 0.87 | | serialize - ContainerType | 2.8820 us/op | 3.3850 us/op | 0.85 | | serialize - ContainerNodeStructType | 2.3890 us/op | 2.8770 us/op | 0.83 | | set_exitEpoch_and_hashTreeRoot - ContainerType | 5.9400 us/op | 6.8070 us/op | 0.87 | | set_exitEpoch_and_hashTreeRoot - ContainerNodeStructType | 16.663 us/op | 18.551 us/op | 0.90 | | Array - for of | 11.388 us/op | 11.363 us/op | 1.00 | | Array - for(;;) | 10.287 us/op | 10.086 us/op | 1.02 | | basicListValue.readonlyValuesArray() | 4.2997 ms/op | 5.7984 ms/op | 0.74 | | basicListValue.readonlyValuesArray() + loop all | 4.4041 ms/op | 5.8478 ms/op | 0.75 | | compositeListValue.readonlyValuesArray() | 31.883 ms/op | 35.673 ms/op | 0.89 | | compositeListValue.readonlyValuesArray() + loop all | 28.153 ms/op | 34.679 ms/op | 0.81 | | Number64UintType - get balances list | 1.5280 ms/op | 1.5278 ms/op | 1.00 | | Number64UintType - set balances list | 12.873 ms/op | 14.280 ms/op | 0.90 | | Number64UintType - get and increase 10 then set | 44.521 ms/op | 47.910 ms/op | 0.93 | | Number64UintType - increase 10 using applyDelta | 16.954 ms/op | 17.831 ms/op | 0.95 | | Number64UintType - increase 10 using applyDeltaInBatch | 16.969 ms/op | 17.980 ms/op | 0.94 | | tree_newTreeFromUint64Deltas | 21.970 ms/op | 25.369 ms/op | 0.87 | | unsafeUint8ArrayToTree | 40.079 ms/op | 43.844 ms/op | 0.91 | | bitLength(50) | 289.00 ns/op | 307.00 ns/op | 0.94 | | bitLengthStr(50) | 314.00 ns/op | 344.00 ns/op | 0.91 | | bitLength(8000) | 281.00 ns/op | 296.00 ns/op | 0.95 | | bitLengthStr(8000) | 365.00 ns/op | 405.00 ns/op | 0.90 | | bitLength(250000) | 280.00 ns/op | 292.00 ns/op | 0.96 | | bitLengthStr(250000) | 419.00 ns/op | 461.00 ns/op | 0.91 | | floor - Math.floor (53) | 0.60253 ns/op | 0.60311 ns/op | 1.00 | | floor - << 0 (53) | 0.60253 ns/op | 0.60311 ns/op | 1.00 | | floor - Math.floor (512) | 0.60261 ns/op | 0.60313 ns/op | 1.00 | | floor - << 0 (512) | 0.60260 ns/op | 0.60293 ns/op | 1.00 | | fnIf(0) | 2.0078 ns/op | 2.0091 ns/op | 1.00 | | fnSwitch(0) | 3.3141 ns/op | 3.3247 ns/op | 1.00 | | fnObj(0) | 0.60312 ns/op | 0.60305 ns/op | 1.00 | | fnArr(0) | 0.60256 ns/op | 0.60303 ns/op | 1.00 | | fnIf(4) | 3.1127 ns/op | 3.1700 ns/op | 0.98 | | fnSwitch(4) | 3.3481 ns/op | 3.3097 ns/op | 1.01 | | fnObj(4) | 0.60261 ns/op | 0.60355 ns/op | 1.00 | | fnArr(4) | 0.60250 ns/op | 0.60322 ns/op | 1.00 | | fnIf(9) | 5.2299 ns/op | 5.2277 ns/op | 1.00 | | fnSwitch(9) | 3.3864 ns/op | 3.3230 ns/op | 1.02 | | fnObj(9) | 0.60251 ns/op | 0.60304 ns/op | 1.00 | | fnArr(9) | 0.60258 ns/op | 0.60316 ns/op | 1.00 | | Container {a,b,vec} - as struct x100000 | 60.518 us/op | 60.557 us/op | 1.00 | | Container {a,b,vec} - as tree x100000 | 511.40 us/op | 501.76 us/op | 1.02 | | Container {a,vec,b} - as struct x100000 | 120.74 us/op | 120.85 us/op | 1.00 | | Container {a,vec,b} - as tree x100000 | 554.83 us/op | 549.33 us/op | 1.01 | | get 2 props x1000000 - rawObject | 401.88 us/op | 402.17 us/op | 1.00 | | get 2 props x1000000 - proxy | 89.548 ms/op | 93.786 ms/op | 0.95 | | get 2 props x1000000 - customObj | 401.79 us/op | 402.13 us/op | 1.00 | | Simple object binary -> struct | 780.00 ns/op | 812.00 ns/op | 0.96 | | Simple object binary -> tree_backed | 2.2410 us/op | 2.5560 us/op | 0.88 | | Simple object struct -> tree_backed | 3.1530 us/op | 3.3900 us/op | 0.93 | | Simple object tree_backed -> struct | 2.6690 us/op | 2.8730 us/op | 0.93 | | Simple object struct -> binary | 1.4220 us/op | 1.6810 us/op | 0.85 | | Simple object tree_backed -> binary | 2.4410 us/op | 2.6940 us/op | 0.91 | | aggregationBits binary -> struct | 649.00 ns/op | 764.00 ns/op | 0.85 | | aggregationBits binary -> tree_backed | 3.2410 us/op | 3.7540 us/op | 0.86 | | aggregationBits struct -> tree_backed | 3.8540 us/op | 4.7720 us/op | 0.81 | | aggregationBits tree_backed -> struct | 1.6540 us/op | 2.0000 us/op | 0.83 | | aggregationBits struct -> binary | 1.1170 us/op | 1.4700 us/op | 0.76 | | aggregationBits tree_backed -> binary | 1.5000 us/op | 1.7870 us/op | 0.84 | | List(uint8) 100000 binary -> struct | 1.8564 ms/op | 2.3199 ms/op | 0.80 | | List(uint8) 100000 binary -> tree_backed | 136.78 us/op | 199.17 us/op | 0.69 | | List(uint8) 100000 struct -> tree_backed | 1.6768 ms/op | 1.8762 ms/op | 0.89 | | List(uint8) 100000 tree_backed -> struct | 1.1963 ms/op | 1.2985 ms/op | 0.92 | | List(uint8) 100000 struct -> binary | 1.5270 ms/op | 1.6699 ms/op | 0.91 | | List(uint8) 100000 tree_backed -> binary | 95.861 us/op | 95.004 us/op | 1.01 | | List(uint64Number) 100000 binary -> struct | 1.4735 ms/op | 1.5554 ms/op | 0.95 | | List(uint64Number) 100000 binary -> tree_backed | 4.3351 ms/op | 4.9065 ms/op | 0.88 | | List(uint64Number) 100000 struct -> tree_backed | 6.2113 ms/op | 6.7767 ms/op | 0.92 | | List(uint64Number) 100000 tree_backed -> struct | 2.6246 ms/op | 2.9888 ms/op | 0.88 | | List(uint64Number) 100000 struct -> binary | 1.8665 ms/op | 1.9983 ms/op | 0.93 | | List(uint64Number) 100000 tree_backed -> binary | 1.2030 ms/op | 1.5214 ms/op | 0.79 | | List(Uint64Bigint) 100000 binary -> struct | 4.7658 ms/op | 4.7295 ms/op | 1.01 | | List(Uint64Bigint) 100000 binary -> tree_backed | 4.3535 ms/op | 5.8863 ms/op | 0.74 | | List(Uint64Bigint) 100000 struct -> tree_backed | 7.5757 ms/op | 8.5808 ms/op | 0.88 | | List(Uint64Bigint) 100000 tree_backed -> struct | 5.4646 ms/op | 6.0092 ms/op | 0.91 | | List(Uint64Bigint) 100000 struct -> binary | 2.6016 ms/op | 2.6454 ms/op | 0.98 | | List(Uint64Bigint) 100000 tree_backed -> binary | 1.1277 ms/op | 1.5102 ms/op | 0.75 | | Vector(Root) 100000 binary -> struct | 46.543 ms/op | 45.877 ms/op | 1.01 | | Vector(Root) 100000 binary -> tree_backed | 45.219 ms/op | 46.044 ms/op | 0.98 | | Vector(Root) 100000 struct -> tree_backed | 56.411 ms/op | 60.586 ms/op | 0.93 | | Vector(Root) 100000 tree_backed -> struct | 64.292 ms/op | 67.568 ms/op | 0.95 | | Vector(Root) 100000 struct -> binary | 2.4392 ms/op | 2.6919 ms/op | 0.91 | | Vector(Root) 100000 tree_backed -> binary | 10.933 ms/op | 12.121 ms/op | 0.90 | | List(Validator) 100000 binary -> struct | 159.49 ms/op | 182.60 ms/op | 0.87 | | List(Validator) 100000 binary -> tree_backed | 422.20 ms/op | 481.34 ms/op | 0.88 | | List(Validator) 100000 struct -> tree_backed | 469.49 ms/op | 518.40 ms/op | 0.91 | | List(Validator) 100000 tree_backed -> struct | 269.58 ms/op | 282.74 ms/op | 0.95 | | List(Validator) 100000 struct -> binary | 39.803 ms/op | 41.056 ms/op | 0.97 | | List(Validator) 100000 tree_backed -> binary | 111.67 ms/op | 116.43 ms/op | 0.96 | | List(Validator-NS) 100000 binary -> struct | 171.17 ms/op | 170.53 ms/op | 1.00 | | List(Validator-NS) 100000 binary -> tree_backed | 235.20 ms/op | 249.82 ms/op | 0.94 | | List(Validator-NS) 100000 struct -> tree_backed | 286.25 ms/op | 305.25 ms/op | 0.94 | | List(Validator-NS) 100000 tree_backed -> struct | 238.53 ms/op | 251.05 ms/op | 0.95 | | List(Validator-NS) 100000 struct -> binary | 40.800 ms/op | 40.810 ms/op | 1.00 | | List(Validator-NS) 100000 tree_backed -> binary | 48.058 ms/op | 48.117 ms/op | 1.00 | | get epochStatuses - MutableVector | 100.25 us/op | 102.50 us/op | 0.98 | | get epochStatuses - ViewDU | 237.97 us/op | 249.10 us/op | 0.96 | | set epochStatuses - ListTreeView | 1.9122 ms/op | 1.9878 ms/op | 0.96 | | set epochStatuses - ListTreeView - set() | 603.95 us/op | 607.96 us/op | 0.99 | | set epochStatuses - ListTreeView - commit() | 552.82 us/op | 606.13 us/op | 0.91 | | bitstring | 922.30 ns/op | 924.80 ns/op | 1.00 | | bit mask | 14.489 ns/op | 14.505 ns/op | 1.00 | | struct - increase slot to 1000000 | 1.9779 ms/op | 1.7149 ms/op | 1.15 | | UintNumberType - increase slot to 1000000 | 37.508 ms/op | 36.459 ms/op | 1.03 | | UintBigintType - increase slot to 1000000 | 551.47 ms/op | 573.75 ms/op | 0.96 | | UintBigint8 x 100000 tree_deserialize | 6.5765 ms/op | 5.6404 ms/op | 1.17 | | UintBigint8 x 100000 tree_serialize | 1.4572 ms/op | 741.42 us/op | 1.97 | | UintBigint16 x 100000 tree_deserialize | 6.3994 ms/op | 5.4073 ms/op | 1.18 | | UintBigint16 x 100000 tree_serialize | 1.5137 ms/op | 1.7411 ms/op | 0.87 | | UintBigint32 x 100000 tree_deserialize | 6.7085 ms/op | 7.1271 ms/op | 0.94 | | UintBigint32 x 100000 tree_serialize | 1.5232 ms/op | 2.3093 ms/op | 0.66 | | UintBigint64 x 100000 tree_deserialize | 7.4022 ms/op | 7.8230 ms/op | 0.95 | | UintBigint64 x 100000 tree_serialize | 2.0400 ms/op | 2.2974 ms/op | 0.89 | | UintBigint8 x 100000 value_deserialize | 635.04 us/op | 538.58 us/op | 1.18 | | UintBigint8 x 100000 value_serialize | 968.34 us/op | 1.1142 ms/op | 0.87 | | UintBigint16 x 100000 value_deserialize | 596.37 us/op | 584.66 us/op | 1.02 | | UintBigint16 x 100000 value_serialize | 942.16 us/op | 1.1745 ms/op | 0.80 | | UintBigint32 x 100000 value_deserialize | 542.12 us/op | 544.10 us/op | 1.00 | | UintBigint32 x 100000 value_serialize | 947.11 us/op | 1.1859 ms/op | 0.80 | | UintBigint64 x 100000 value_deserialize | 608.03 us/op | 610.01 us/op | 1.00 | | UintBigint64 x 100000 value_serialize | 1.1630 ms/op | 1.4237 ms/op | 0.82 | | UintBigint8 x 100000 deserialize | 6.1436 ms/op | 6.3625 ms/op | 0.97 | | UintBigint8 x 100000 serialize | 1.9583 ms/op | 2.0128 ms/op | 0.97 | | UintBigint16 x 100000 deserialize | 5.9405 ms/op | 5.7809 ms/op | 1.03 | | UintBigint16 x 100000 serialize | 1.9471 ms/op | 2.0700 ms/op | 0.94 | | UintBigint32 x 100000 deserialize | 6.9929 ms/op | 7.3565 ms/op | 0.95 | | UintBigint32 x 100000 serialize | 3.6029 ms/op | 3.7060 ms/op | 0.97 | | UintBigint64 x 100000 deserialize | 4.8851 ms/op | 5.0727 ms/op | 0.96 | | UintBigint64 x 100000 serialize | 1.9205 ms/op | 1.9048 ms/op | 1.01 | | UintBigint128 x 100000 deserialize | 7.0696 ms/op | 7.4742 ms/op | 0.95 | | UintBigint128 x 100000 serialize | 21.533 ms/op | 22.855 ms/op | 0.94 | | UintBigint256 x 100000 deserialize | 13.154 ms/op | 14.489 ms/op | 0.91 | | UintBigint256 x 100000 serialize | 67.334 ms/op | 66.575 ms/op | 1.01 | | Slice from Uint8Array x25000 | 1.2547 ms/op | 1.5749 ms/op | 0.80 | | Slice from ArrayBuffer x25000 | 25.824 ms/op | 28.754 ms/op | 0.90 | | Slice from ArrayBuffer x25000 + new Uint8Array | 25.385 ms/op | 32.209 ms/op | 0.79 | | Copy Uint8Array 100000 iterate | 1.0231 ms/op | 1.0772 ms/op | 0.95 | | Copy Uint8Array 100000 slice | 84.295 us/op | 133.88 us/op | 0.63 | | Copy Uint8Array 100000 Uint8Array.prototype.slice.call | 85.096 us/op | 133.25 us/op | 0.64 | | Copy Buffer 100000 Uint8Array.prototype.slice.call | 84.986 us/op | 132.24 us/op | 0.64 | | Copy Uint8Array 100000 slice + set | 181.90 us/op | 280.22 us/op | 0.65 | | Copy Uint8Array 100000 subarray + set | 85.918 us/op | 132.77 us/op | 0.65 | | Copy Uint8Array 100000 slice arrayBuffer | 85.347 us/op | 135.50 us/op | 0.63 | | Uint64 deserialize 100000 - iterate Uint8Array | 2.0929 ms/op | 2.2426 ms/op | 0.93 | | Uint64 deserialize 100000 - by Uint32A | 1.8640 ms/op | 2.1752 ms/op | 0.86 | | Uint64 deserialize 100000 - by DataView.getUint32 x2 | 1.8767 ms/op | 2.1691 ms/op | 0.87 | | Uint64 deserialize 100000 - by DataView.getBigUint64 | 5.6787 ms/op | 6.0728 ms/op | 0.94 | | Uint64 deserialize 100000 - by byte | 72.496 ms/op | 72.904 ms/op | 0.99 |

by benchmarkbot/action