ChainSafe / ssz

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

feat: support full uint64 range on simpleserialize.com #327

Closed nflaig closed 1 year ago

nflaig commented 1 year ago

Motivation

Closes https://github.com/ChainSafe/ssz/issues/326

Description

Patch SSZ types to support full uint64 range on simpleserialize.com

Based on approach used to pass the ssz_static spec tests, see replaceUintTypeWithUintBigintType

github-actions[bot] commented 1 year ago

Performance Report

✔️ no performance regression detected

Full benchmark results | Benchmark suite | Current: fc6941cf06e24a87ad4f49395fd4f6adc47d6958 | Previous: 424b4267e2fa2c89c655b43da39b7f3a62d0a5b8 | Ratio | |-|-|-|-| | digestTwoHashObjects 50023 times | 57.882 ms/op | 71.954 ms/op | 0.80 | | digest64 50023 times | 60.331 ms/op | 76.204 ms/op | 0.79 | | digest 50023 times | 60.224 ms/op | 76.420 ms/op | 0.79 | | input length 32 | 1.4610 us/op | 1.8190 us/op | 0.80 | | input length 64 | 1.5860 us/op | 1.9570 us/op | 0.81 | | input length 128 | 2.7660 us/op | 3.3660 us/op | 0.82 | | input length 256 | 4.1430 us/op | 4.9690 us/op | 0.83 | | input length 512 | 6.8540 us/op | 8.2010 us/op | 0.84 | | input length 1024 | 13.496 us/op | 16.485 us/op | 0.82 | | digest 1000000 times | 1.0389 s/op | 1.3400 s/op | 0.78 | | hashObjectToByteArray 50023 times | 2.3868 ms/op | 2.9160 ms/op | 0.82 | | byteArrayToHashObject 50023 times | 2.7603 ms/op | 3.5609 ms/op | 0.78 | | getGindicesAtDepth | 6.0320 us/op | 7.5680 us/op | 0.80 | | iterateAtDepth | 12.747 us/op | 15.301 us/op | 0.83 | | getGindexBits | 556.00 ns/op | 712.00 ns/op | 0.78 | | gindexIterator | 1.2140 us/op | 1.5930 us/op | 0.76 | | hash 2 Uint8Array 2250026 times - as-sha256 | 2.7455 s/op | 3.3396 s/op | 0.82 | | hashTwoObjects 2250026 times - as-sha256 | 2.6221 s/op | 3.1476 s/op | 0.83 | | hash 2 Uint8Array 2250026 times - noble | 7.0037 s/op | 11.176 s/op | 0.63 | | hashTwoObjects 2250026 times - noble | 10.482 s/op | 14.279 s/op | 0.73 | | getNodeH() x7812.5 avg hindex | 20.814 us/op | 29.523 us/op | 0.71 | | getNodeH() x7812.5 index 0 | 8.3710 us/op | 10.535 us/op | 0.79 | | getNodeH() x7812.5 index 7 | 8.2390 us/op | 10.493 us/op | 0.79 | | getNodeH() x7812.5 index 7 with key array | 8.2830 us/op | 10.620 us/op | 0.78 | | new LeafNode() x7812.5 | 198.39 us/op | 375.93 us/op | 0.53 | | multiproof - depth 15, 1 requested leaves | 13.040 us/op | 18.273 us/op | 0.71 | | tree offset multiproof - depth 15, 1 requested leaves | 29.255 us/op | 40.358 us/op | 0.72 | | compact multiproof - depth 15, 1 requested leaves | 8.1640 us/op | 10.022 us/op | 0.81 | | multiproof - depth 15, 2 requested leaves | 20.387 us/op | 23.869 us/op | 0.85 | | tree offset multiproof - depth 15, 2 requested leaves | 36.758 us/op | 42.270 us/op | 0.87 | | compact multiproof - depth 15, 2 requested leaves | 4.8950 us/op | 5.7290 us/op | 0.85 | | multiproof - depth 15, 3 requested leaves | 27.755 us/op | 34.297 us/op | 0.81 | | tree offset multiproof - depth 15, 3 requested leaves | 47.409 us/op | 55.751 us/op | 0.85 | | compact multiproof - depth 15, 3 requested leaves | 9.0020 us/op | 11.642 us/op | 0.77 | | multiproof - depth 15, 4 requested leaves | 34.385 us/op | 43.812 us/op | 0.78 | | tree offset multiproof - depth 15, 4 requested leaves | 55.553 us/op | 72.380 us/op | 0.77 | | compact multiproof - depth 15, 4 requested leaves | 8.5020 us/op | 10.945 us/op | 0.78 | | packedRootsBytesToLeafNodes bytes 4000 offset 0 | 3.6230 us/op | 4.3620 us/op | 0.83 | | packedRootsBytesToLeafNodes bytes 4000 offset 1 | 3.6280 us/op | 4.3030 us/op | 0.84 | | packedRootsBytesToLeafNodes bytes 4000 offset 2 | 3.6960 us/op | 4.1200 us/op | 0.90 | | packedRootsBytesToLeafNodes bytes 4000 offset 3 | 3.6240 us/op | 4.1850 us/op | 0.87 | | subtreeFillToContents depth 40 count 250000 | 80.721 ms/op | 99.087 ms/op | 0.81 | | setRoot - gindexBitstring | 14.028 ms/op | 16.396 ms/op | 0.86 | | setRoot - gindex | 14.776 ms/op | 17.176 ms/op | 0.86 | | getRoot - gindexBitstring | 3.6748 ms/op | 4.3627 ms/op | 0.84 | | getRoot - gindex | 4.4451 ms/op | 5.2439 ms/op | 0.85 | | getHashObject then setHashObject | 16.727 ms/op | 19.660 ms/op | 0.85 | | setNodeWithFn | 13.671 ms/op | 16.319 ms/op | 0.84 | | getNodeAtDepth depth 0 x100000 | 2.2887 ms/op | 2.7441 ms/op | 0.83 | | setNodeAtDepth depth 0 x100000 | 4.1415 ms/op | 5.5937 ms/op | 0.74 | | getNodesAtDepth depth 0 x100000 | 1.8213 ms/op | 2.2724 ms/op | 0.80 | | setNodesAtDepth depth 0 x100000 | 2.5200 ms/op | 2.9080 ms/op | 0.87 | | getNodeAtDepth depth 1 x100000 | 2.2271 ms/op | 2.7632 ms/op | 0.81 | | setNodeAtDepth depth 1 x100000 | 10.001 ms/op | 11.635 ms/op | 0.86 | | getNodesAtDepth depth 1 x100000 | 1.9961 ms/op | 2.4039 ms/op | 0.83 | | setNodesAtDepth depth 1 x100000 | 8.2496 ms/op | 9.2668 ms/op | 0.89 | | getNodeAtDepth depth 2 x100000 | 2.8261 ms/op | 3.3596 ms/op | 0.84 | | setNodeAtDepth depth 2 x100000 | 16.489 ms/op | 19.549 ms/op | 0.84 | | getNodesAtDepth depth 2 x100000 | 28.229 ms/op | 34.341 ms/op | 0.82 | | setNodesAtDepth depth 2 x100000 | 22.526 ms/op | 28.957 ms/op | 0.78 | | tree.getNodesAtDepth - gindexes | 9.4156 ms/op | 11.643 ms/op | 0.81 | | tree.getNodesAtDepth - push all nodes | 2.8533 ms/op | 3.7390 ms/op | 0.76 | | tree.getNodesAtDepth - navigation | 169.22 us/op | 204.65 us/op | 0.83 | | tree.setNodesAtDepth - indexes | 591.40 us/op | 757.39 us/op | 0.78 | | set at depth 8 | 788.00 ns/op | 932.00 ns/op | 0.85 | | set at depth 16 | 1.0040 us/op | 1.2410 us/op | 0.81 | | set at depth 32 | 1.5600 us/op | 1.8840 us/op | 0.83 | | iterateNodesAtDepth 8 256 | 23.247 us/op | 28.085 us/op | 0.83 | | getNodesAtDepth 8 256 | 5.8630 us/op | 7.0530 us/op | 0.83 | | iterateNodesAtDepth 16 65536 | 6.6916 ms/op | 7.8866 ms/op | 0.85 | | getNodesAtDepth 16 65536 | 2.6645 ms/op | 3.1553 ms/op | 0.84 | | iterateNodesAtDepth 32 250000 | 24.676 ms/op | 29.455 ms/op | 0.84 | | getNodesAtDepth 32 250000 | 7.4524 ms/op | 8.7048 ms/op | 0.86 | | iterateNodesAtDepth 40 250000 | 24.885 ms/op | 29.518 ms/op | 0.84 | | getNodesAtDepth 40 250000 | 7.5941 ms/op | 9.1829 ms/op | 0.83 | | 250k validators | 11.564 s/op | 15.091 s/op | 0.77 | | bitlist bytes to struct (120,90) | 1.1530 us/op | 1.2680 us/op | 0.91 | | bitlist bytes to tree (120,90) | 3.6470 us/op | 4.4700 us/op | 0.82 | | bitlist bytes to struct (2048,2048) | 1.8130 us/op | 2.2890 us/op | 0.79 | | bitlist bytes to tree (2048,2048) | 6.5060 us/op | 7.9700 us/op | 0.82 | | ByteListType - deserialize | 17.298 ms/op | 21.139 ms/op | 0.82 | | BasicListType - deserialize | 15.858 ms/op | 18.531 ms/op | 0.86 | | ByteListType - serialize | 18.082 ms/op | 22.264 ms/op | 0.81 | | BasicListType - serialize | 20.144 ms/op | 27.749 ms/op | 0.73 | | BasicListType - tree_convertToStruct | 41.503 ms/op | 49.192 ms/op | 0.84 | | List[uint8, 68719476736] len 300000 ViewDU.getAll() + iterate | 5.5704 ms/op | 7.3802 ms/op | 0.75 | | List[uint8, 68719476736] len 300000 ViewDU.get(i) | 6.3223 ms/op | 7.5909 ms/op | 0.83 | | Array.push len 300000 empty Array - number | 8.2113 ms/op | 9.3558 ms/op | 0.88 | | Array.set len 300000 from new Array - number | 2.7241 ms/op | 3.1044 ms/op | 0.88 | | Array.set len 300000 - number | 8.8495 ms/op | 10.339 ms/op | 0.86 | | Uint8Array.set len 300000 | 258.94 us/op | 307.73 us/op | 0.84 | | Uint32Array.set len 300000 | 418.61 us/op | 486.46 us/op | 0.86 | | Container({a: uint8, b: uint8}) getViewDU x300000 | 33.774 ms/op | 40.347 ms/op | 0.84 | | ContainerNodeStruct({a: uint8, b: uint8}) getViewDU x300000 | 12.466 ms/op | 15.434 ms/op | 0.81 | | List(Container) len 300000 ViewDU.getAllReadonly() + iterate | 381.52 ms/op | 654.82 ms/op | 0.58 | | List(Container) len 300000 ViewDU.getAllReadonlyValues() + iterate | 466.53 ms/op | 553.78 ms/op | 0.84 | | List(Container) len 300000 ViewDU.get(i) | 11.565 ms/op | 17.891 ms/op | 0.65 | | List(Container) len 300000 ViewDU.getReadonly(i) | 12.213 ms/op | 17.195 ms/op | 0.71 | | List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonly() + iterate | 58.318 ms/op | 68.792 ms/op | 0.85 | | List(ContainerNodeStruct) len 300000 ViewDU.getAllReadonlyValues() + iterate | 8.2299 ms/op | 9.2569 ms/op | 0.89 | | List(ContainerNodeStruct) len 300000 ViewDU.get(i) | 11.102 ms/op | 13.524 ms/op | 0.82 | | List(ContainerNodeStruct) len 300000 ViewDU.getReadonly(i) | 11.274 ms/op | 13.529 ms/op | 0.83 | | Array.push len 300000 empty Array - object | 8.2686 ms/op | 9.9088 ms/op | 0.83 | | Array.set len 300000 from new Array - object | 2.7193 ms/op | 3.9871 ms/op | 0.68 | | Array.set len 300000 - object | 9.6261 ms/op | 10.127 ms/op | 0.95 | | cachePermanentRootStruct no cache | 12.027 us/op | 14.991 us/op | 0.80 | | cachePermanentRootStruct with cache | 300.00 ns/op | 374.00 ns/op | 0.80 | | epochParticipation len 250000 rws 7813 | 3.2620 ms/op | 3.9430 ms/op | 0.83 | | deserialize Attestation - tree | 4.4140 us/op | 5.6710 us/op | 0.78 | | deserialize Attestation - struct | 2.9580 us/op | 3.7620 us/op | 0.79 | | deserialize SignedAggregateAndProof - tree | 5.7510 us/op | 7.3520 us/op | 0.78 | | deserialize SignedAggregateAndProof - struct | 5.0220 us/op | 6.0580 us/op | 0.83 | | deserialize SyncCommitteeMessage - tree | 1.4730 us/op | 1.9190 us/op | 0.77 | | deserialize SyncCommitteeMessage - struct | 1.8920 us/op | 2.2800 us/op | 0.83 | | deserialize SignedContributionAndProof - tree | 2.7870 us/op | 3.9540 us/op | 0.70 | | deserialize SignedContributionAndProof - struct | 3.8420 us/op | 5.3550 us/op | 0.72 | | deserialize SignedBeaconBlock - tree | 337.02 us/op | 432.46 us/op | 0.78 | | deserialize SignedBeaconBlock - struct | 205.80 us/op | 278.17 us/op | 0.74 | | BeaconState vc 300000 - deserialize tree | 1.0113 s/op | 1.1879 s/op | 0.85 | | BeaconState vc 300000 - serialize tree | 303.43 ms/op | 338.56 ms/op | 0.90 | | BeaconState.historicalRoots vc 300000 - deserialize tree | 1.4300 us/op | 1.3620 us/op | 1.05 | | BeaconState.historicalRoots vc 300000 - serialize tree | 1.5540 us/op | 1.5360 us/op | 1.01 | | BeaconState.validators vc 300000 - deserialize tree | 962.76 ms/op | 1.1528 s/op | 0.84 | | BeaconState.validators vc 300000 - serialize tree | 237.64 ms/op | 296.56 ms/op | 0.80 | | BeaconState.balances vc 300000 - deserialize tree | 39.100 ms/op | 43.553 ms/op | 0.90 | | BeaconState.balances vc 300000 - serialize tree | 5.5261 ms/op | 7.3218 ms/op | 0.75 | | BeaconState.previousEpochParticipation vc 300000 - deserialize tree | 726.02 us/op | 952.54 us/op | 0.76 | | BeaconState.previousEpochParticipation vc 300000 - serialize tree | 453.51 us/op | 549.41 us/op | 0.83 | | BeaconState.currentEpochParticipation vc 300000 - deserialize tree | 708.18 us/op | 932.50 us/op | 0.76 | | BeaconState.currentEpochParticipation vc 300000 - serialize tree | 457.80 us/op | 542.25 us/op | 0.84 | | BeaconState.inactivityScores vc 300000 - deserialize tree | 39.642 ms/op | 46.199 ms/op | 0.86 | | BeaconState.inactivityScores vc 300000 - serialize tree | 6.5322 ms/op | 4.8675 ms/op | 1.34 | | hashTreeRoot Attestation - struct | 45.540 us/op | 37.432 us/op | 1.22 | | hashTreeRoot Attestation - tree | 22.700 us/op | 26.725 us/op | 0.85 | | hashTreeRoot SignedAggregateAndProof - struct | 59.050 us/op | 55.654 us/op | 1.06 | | hashTreeRoot SignedAggregateAndProof - tree | 35.659 us/op | 41.980 us/op | 0.85 | | hashTreeRoot SyncCommitteeMessage - struct | 14.922 us/op | 14.162 us/op | 1.05 | | hashTreeRoot SyncCommitteeMessage - tree | 7.6520 us/op | 9.2760 us/op | 0.82 | | hashTreeRoot SignedContributionAndProof - struct | 39.739 us/op | 39.381 us/op | 1.01 | | hashTreeRoot SignedContributionAndProof - tree | 26.192 us/op | 28.188 us/op | 0.93 | | hashTreeRoot SignedBeaconBlock - struct | 3.3676 ms/op | 3.6571 ms/op | 0.92 | | hashTreeRoot SignedBeaconBlock - tree | 2.0336 ms/op | 2.4954 ms/op | 0.81 | | hashTreeRoot Validator - struct | 18.987 us/op | 20.543 us/op | 0.92 | | hashTreeRoot Validator - tree | 14.668 us/op | 16.774 us/op | 0.87 | | BeaconState vc 300000 - hashTreeRoot tree | 4.7214 s/op | 5.5831 s/op | 0.85 | | BeaconState.historicalRoots vc 300000 - hashTreeRoot tree | 1.8820 us/op | 2.2510 us/op | 0.84 | | BeaconState.validators vc 300000 - hashTreeRoot tree | 4.4379 s/op | 5.2485 s/op | 0.85 | | BeaconState.balances vc 300000 - hashTreeRoot tree | 104.70 ms/op | 137.04 ms/op | 0.76 | | BeaconState.previousEpochParticipation vc 300000 - hashTreeRoot tree | 11.036 ms/op | 13.310 ms/op | 0.83 | | BeaconState.currentEpochParticipation vc 300000 - hashTreeRoot tree | 11.044 ms/op | 13.309 ms/op | 0.83 | | BeaconState.inactivityScores vc 300000 - hashTreeRoot tree | 103.38 ms/op | 141.92 ms/op | 0.73 | | hash64 x18 | 24.621 us/op | 29.408 us/op | 0.84 | | hashTwoObjects x18 | 21.927 us/op | 25.685 us/op | 0.85 | | hash64 x1740 | 2.3116 ms/op | 2.7745 ms/op | 0.83 | | hashTwoObjects x1740 | 2.0789 ms/op | 2.4455 ms/op | 0.85 | | hash64 x2700000 | 3.5926 s/op | 4.2829 s/op | 0.84 | | hashTwoObjects x2700000 | 3.2300 s/op | 3.8507 s/op | 0.84 | | get_exitEpoch - ContainerType | 486.00 ns/op | 598.00 ns/op | 0.81 | | get_exitEpoch - ContainerNodeStructType | 412.00 ns/op | 492.00 ns/op | 0.84 | | set_exitEpoch - ContainerType | 448.00 ns/op | 558.00 ns/op | 0.80 | | set_exitEpoch - ContainerNodeStructType | 312.00 ns/op | 525.00 ns/op | 0.59 | | get_pubkey - ContainerType | 1.5820 us/op | 1.9600 us/op | 0.81 | | get_pubkey - ContainerNodeStructType | 301.00 ns/op | 368.00 ns/op | 0.82 | | hashTreeRoot - ContainerType | 514.00 ns/op | 591.00 ns/op | 0.87 | | hashTreeRoot - ContainerNodeStructType | 557.00 ns/op | 701.00 ns/op | 0.79 | | createProof - ContainerType | 6.4000 us/op | 7.5710 us/op | 0.85 | | createProof - ContainerNodeStructType | 34.958 us/op | 41.317 us/op | 0.85 | | serialize - ContainerType | 2.9910 us/op | 3.5400 us/op | 0.84 | | serialize - ContainerNodeStructType | 2.3500 us/op | 2.9130 us/op | 0.81 | | set_exitEpoch_and_hashTreeRoot - ContainerType | 5.3060 us/op | 6.7070 us/op | 0.79 | | set_exitEpoch_and_hashTreeRoot - ContainerNodeStructType | 15.092 us/op | 18.693 us/op | 0.81 | | Array - for of | 10.590 us/op | 12.697 us/op | 0.83 | | Array - for(;;) | 7.2070 us/op | 8.6780 us/op | 0.83 | | basicListValue.readonlyValuesArray() | 5.3953 ms/op | 6.8312 ms/op | 0.79 | | basicListValue.readonlyValuesArray() + loop all | 5.5112 ms/op | 6.9100 ms/op | 0.80 | | compositeListValue.readonlyValuesArray() | 41.695 ms/op | 44.457 ms/op | 0.94 | | compositeListValue.readonlyValuesArray() + loop all | 36.810 ms/op | 45.744 ms/op | 0.80 | | Number64UintType - get balances list | 6.0899 ms/op | 7.2948 ms/op | 0.83 | | Number64UintType - set balances list | 15.281 ms/op | 16.276 ms/op | 0.94 | | Number64UintType - get and increase 10 then set | 58.673 ms/op | 67.958 ms/op | 0.86 | | Number64UintType - increase 10 using applyDelta | 25.473 ms/op | 29.416 ms/op | 0.87 | | Number64UintType - increase 10 using applyDeltaInBatch | 25.532 ms/op | 29.653 ms/op | 0.86 | | tree_newTreeFromUint64Deltas | 26.748 ms/op | 32.880 ms/op | 0.81 | | unsafeUint8ArrayToTree | 46.401 ms/op | 55.172 ms/op | 0.84 | | bitLength(50) | 293.00 ns/op | 352.00 ns/op | 0.83 | | bitLengthStr(50) | 362.00 ns/op | 428.00 ns/op | 0.85 | | bitLength(8000) | 298.00 ns/op | 356.00 ns/op | 0.84 | | bitLengthStr(8000) | 490.00 ns/op | 587.00 ns/op | 0.83 | | bitLength(250000) | 292.00 ns/op | 358.00 ns/op | 0.82 | | bitLengthStr(250000) | 594.00 ns/op | 698.00 ns/op | 0.85 | | floor - Math.floor (53) | 0.66974 ns/op | 0.80454 ns/op | 0.83 | | floor - << 0 (53) | 0.66998 ns/op | 0.80429 ns/op | 0.83 | | floor - Math.floor (512) | 0.66973 ns/op | 0.80409 ns/op | 0.83 | | floor - << 0 (512) | 0.66987 ns/op | 0.80403 ns/op | 0.83 | | fnIf(0) | 2.6784 ns/op | 3.2150 ns/op | 0.83 | | fnSwitch(0) | 5.0212 ns/op | 6.0318 ns/op | 0.83 | | fnObj(0) | 0.66993 ns/op | 0.80424 ns/op | 0.83 | | fnArr(0) | 0.66983 ns/op | 0.80400 ns/op | 0.83 | | fnIf(4) | 4.3525 ns/op | 5.2256 ns/op | 0.83 | | fnSwitch(4) | 5.0220 ns/op | 6.0286 ns/op | 0.83 | | fnObj(4) | 0.66983 ns/op | 0.80404 ns/op | 0.83 | | fnArr(4) | 0.66989 ns/op | 0.80403 ns/op | 0.83 | | fnIf(9) | 6.6955 ns/op | 8.0400 ns/op | 0.83 | | fnSwitch(9) | 5.0215 ns/op | 6.0287 ns/op | 0.83 | | fnObj(9) | 0.66990 ns/op | 0.80409 ns/op | 0.83 | | fnArr(9) | 0.66989 ns/op | 0.80430 ns/op | 0.83 | | Container {a,b,vec} - as struct x100000 | 67.321 us/op | 80.856 us/op | 0.83 | | Container {a,b,vec} - as tree x100000 | 837.56 us/op | 1.0048 ms/op | 0.83 | | Container {a,vec,b} - as struct x100000 | 100.81 us/op | 121.00 us/op | 0.83 | | Container {a,vec,b} - as tree x100000 | 904.14 us/op | 1.0855 ms/op | 0.83 | | get 2 props x1000000 - rawObject | 335.07 us/op | 402.40 us/op | 0.83 | | get 2 props x1000000 - proxy | 133.36 ms/op | 160.52 ms/op | 0.83 | | get 2 props x1000000 - customObj | 335.11 us/op | 402.84 us/op | 0.83 | | Simple object binary -> struct | 843.00 ns/op | 948.00 ns/op | 0.89 | | Simple object binary -> tree_backed | 2.4250 us/op | 2.8130 us/op | 0.86 | | Simple object struct -> tree_backed | 3.1020 us/op | 3.7160 us/op | 0.83 | | Simple object tree_backed -> struct | 2.6200 us/op | 3.2870 us/op | 0.80 | | Simple object struct -> binary | 1.3420 us/op | 1.7230 us/op | 0.78 | | Simple object tree_backed -> binary | 2.3890 us/op | 3.0010 us/op | 0.80 | | aggregationBits binary -> struct | 701.00 ns/op | 808.00 ns/op | 0.87 | | aggregationBits binary -> tree_backed | 3.2020 us/op | 4.0050 us/op | 0.80 | | aggregationBits struct -> tree_backed | 4.1000 us/op | 4.8690 us/op | 0.84 | | aggregationBits tree_backed -> struct | 1.6250 us/op | 2.0240 us/op | 0.80 | | aggregationBits struct -> binary | 1.1480 us/op | 1.5220 us/op | 0.75 | | aggregationBits tree_backed -> binary | 1.4240 us/op | 1.7520 us/op | 0.81 | | List(uint8) 100000 binary -> struct | 1.9664 ms/op | 2.2165 ms/op | 0.89 | | List(uint8) 100000 binary -> tree_backed | 162.06 us/op | 186.19 us/op | 0.87 | | List(uint8) 100000 struct -> tree_backed | 2.1516 ms/op | 2.5125 ms/op | 0.86 | | List(uint8) 100000 tree_backed -> struct | 1.5136 ms/op | 1.7674 ms/op | 0.86 | | List(uint8) 100000 struct -> binary | 1.9307 ms/op | 2.2892 ms/op | 0.84 | | List(uint8) 100000 tree_backed -> binary | 146.82 us/op | 168.82 us/op | 0.87 | | List(uint64Number) 100000 binary -> struct | 1.7117 ms/op | 2.0001 ms/op | 0.86 | | List(uint64Number) 100000 binary -> tree_backed | 5.6611 ms/op | 6.4006 ms/op | 0.88 | | List(uint64Number) 100000 struct -> tree_backed | 8.1562 ms/op | 9.5213 ms/op | 0.86 | | List(uint64Number) 100000 tree_backed -> struct | 3.0981 ms/op | 3.7990 ms/op | 0.82 | | List(uint64Number) 100000 struct -> binary | 2.2716 ms/op | 2.7629 ms/op | 0.82 | | List(uint64Number) 100000 tree_backed -> binary | 1.5863 ms/op | 1.9558 ms/op | 0.81 | | List(Uint64Bigint) 100000 binary -> struct | 5.1232 ms/op | 6.4068 ms/op | 0.80 | | List(Uint64Bigint) 100000 binary -> tree_backed | 5.6860 ms/op | 6.5700 ms/op | 0.87 | | List(Uint64Bigint) 100000 struct -> tree_backed | 9.1307 ms/op | 10.878 ms/op | 0.84 | | List(Uint64Bigint) 100000 tree_backed -> struct | 6.9007 ms/op | 8.6961 ms/op | 0.79 | | List(Uint64Bigint) 100000 struct -> binary | 2.9446 ms/op | 3.4912 ms/op | 0.84 | | List(Uint64Bigint) 100000 tree_backed -> binary | 1.6716 ms/op | 1.9613 ms/op | 0.85 | | Vector(Root) 100000 binary -> struct | 54.153 ms/op | 61.582 ms/op | 0.88 | | Vector(Root) 100000 binary -> tree_backed | 50.096 ms/op | 65.884 ms/op | 0.76 | | Vector(Root) 100000 struct -> tree_backed | 63.709 ms/op | 76.413 ms/op | 0.83 | | Vector(Root) 100000 tree_backed -> struct | 78.874 ms/op | 85.290 ms/op | 0.92 | | Vector(Root) 100000 struct -> binary | 3.2316 ms/op | 3.7747 ms/op | 0.86 | | Vector(Root) 100000 tree_backed -> binary | 19.949 ms/op | 16.025 ms/op | 1.24 | | List(Validator) 100000 binary -> struct | 199.73 ms/op | 217.52 ms/op | 0.92 | | List(Validator) 100000 binary -> tree_backed | 494.74 ms/op | 561.24 ms/op | 0.88 | | List(Validator) 100000 struct -> tree_backed | 544.38 ms/op | 648.60 ms/op | 0.84 | | List(Validator) 100000 tree_backed -> struct | 298.87 ms/op | 362.87 ms/op | 0.82 | | List(Validator) 100000 struct -> binary | 47.214 ms/op | 57.633 ms/op | 0.82 | | List(Validator) 100000 tree_backed -> binary | 132.13 ms/op | 163.55 ms/op | 0.81 | | List(Validator-NS) 100000 binary -> struct | 198.64 ms/op | 240.26 ms/op | 0.83 | | List(Validator-NS) 100000 binary -> tree_backed | 270.76 ms/op | 316.01 ms/op | 0.86 | | List(Validator-NS) 100000 struct -> tree_backed | 331.01 ms/op | 391.67 ms/op | 0.85 | | List(Validator-NS) 100000 tree_backed -> struct | 274.50 ms/op | 329.13 ms/op | 0.83 | | List(Validator-NS) 100000 struct -> binary | 46.874 ms/op | 56.102 ms/op | 0.84 | | List(Validator-NS) 100000 tree_backed -> binary | 54.897 ms/op | 63.975 ms/op | 0.86 | | get epochStatuses - MutableVector | 122.52 us/op | 140.43 us/op | 0.87 | | get epochStatuses - ViewDU | 281.40 us/op | 338.51 us/op | 0.83 | | set epochStatuses - ListTreeView | 2.1488 ms/op | 2.4744 ms/op | 0.87 | | set epochStatuses - ListTreeView - set() | 610.83 us/op | 734.12 us/op | 0.83 | | set epochStatuses - ListTreeView - commit() | 645.20 us/op | 749.42 us/op | 0.86 | | bitstring | 748.48 ns/op | 897.68 ns/op | 0.83 | | bit mask | 12.760 ns/op | 15.360 ns/op | 0.83 | | struct - increase slot to 1000000 | 2.1859 ms/op | 2.6267 ms/op | 0.83 | | UintNumberType - increase slot to 1000000 | 47.844 ms/op | 59.181 ms/op | 0.81 | | UintBigintType - increase slot to 1000000 | 621.16 ms/op | 731.29 ms/op | 0.85 | | UintBigint8 x 100000 tree_deserialize | 6.9739 ms/op | 9.5016 ms/op | 0.73 | | UintBigint8 x 100000 tree_serialize | 2.0420 ms/op | 2.4304 ms/op | 0.84 | | UintBigint16 x 100000 tree_deserialize | 6.5727 ms/op | 9.6428 ms/op | 0.68 | | UintBigint16 x 100000 tree_serialize | 2.1569 ms/op | 1.3983 ms/op | 1.54 | | UintBigint32 x 100000 tree_deserialize | 7.3334 ms/op | 9.5877 ms/op | 0.76 | | UintBigint32 x 100000 tree_serialize | 1.9126 ms/op | 2.5093 ms/op | 0.76 | | UintBigint64 x 100000 tree_deserialize | 8.6405 ms/op | 11.268 ms/op | 0.77 | | UintBigint64 x 100000 tree_serialize | 2.5325 ms/op | 3.2807 ms/op | 0.77 | | UintBigint8 x 100000 value_deserialize | 870.50 us/op | 1.0450 ms/op | 0.83 | | UintBigint8 x 100000 value_serialize | 1.1912 ms/op | 1.5444 ms/op | 0.77 | | UintBigint16 x 100000 value_deserialize | 934.30 us/op | 1.1180 ms/op | 0.84 | | UintBigint16 x 100000 value_serialize | 1.3055 ms/op | 1.7238 ms/op | 0.76 | | UintBigint32 x 100000 value_deserialize | 842.36 us/op | 1.0084 ms/op | 0.84 | | UintBigint32 x 100000 value_serialize | 1.2919 ms/op | 1.6840 ms/op | 0.77 | | UintBigint64 x 100000 value_deserialize | 886.32 us/op | 1.0890 ms/op | 0.81 | | UintBigint64 x 100000 value_serialize | 1.4851 ms/op | 1.8802 ms/op | 0.79 | | UintBigint8 x 100000 deserialize | 6.7565 ms/op | 8.0396 ms/op | 0.84 | | UintBigint8 x 100000 serialize | 2.5414 ms/op | 3.1433 ms/op | 0.81 | | UintBigint16 x 100000 deserialize | 7.0372 ms/op | 8.3254 ms/op | 0.85 | | UintBigint16 x 100000 serialize | 2.5395 ms/op | 3.1827 ms/op | 0.80 | | UintBigint32 x 100000 deserialize | 8.1988 ms/op | 9.7740 ms/op | 0.84 | | UintBigint32 x 100000 serialize | 4.3845 ms/op | 5.2074 ms/op | 0.84 | | UintBigint64 x 100000 deserialize | 5.2728 ms/op | 6.4865 ms/op | 0.81 | | UintBigint64 x 100000 serialize | 2.4194 ms/op | 2.9357 ms/op | 0.82 | | UintBigint128 x 100000 deserialize | 8.4541 ms/op | 10.053 ms/op | 0.84 | | UintBigint128 x 100000 serialize | 26.988 ms/op | 33.558 ms/op | 0.80 | | UintBigint256 x 100000 deserialize | 15.395 ms/op | 18.918 ms/op | 0.81 | | UintBigint256 x 100000 serialize | 82.316 ms/op | 98.422 ms/op | 0.84 | | Slice from Uint8Array x25000 | 1.5836 ms/op | 1.8434 ms/op | 0.86 | | Slice from ArrayBuffer x25000 | 31.021 ms/op | 34.533 ms/op | 0.90 | | Slice from ArrayBuffer x25000 + new Uint8Array | 33.458 ms/op | 37.715 ms/op | 0.89 | | Copy Uint8Array 100000 iterate | 1.4808 ms/op | 1.7642 ms/op | 0.84 | | Copy Uint8Array 100000 slice | 165.25 us/op | 156.92 us/op | 1.05 | | Copy Uint8Array 100000 Uint8Array.prototype.slice.call | 161.83 us/op | 166.57 us/op | 0.97 | | Copy Buffer 100000 Uint8Array.prototype.slice.call | 169.76 us/op | 164.95 us/op | 1.03 | | Copy Uint8Array 100000 slice + set | 356.96 us/op | 392.62 us/op | 0.91 | | Copy Uint8Array 100000 subarray + set | 165.29 us/op | 299.84 us/op | 0.55 | | Copy Uint8Array 100000 slice arrayBuffer | 163.76 us/op | 368.89 us/op | 0.44 | | Uint64 deserialize 100000 - iterate Uint8Array | 2.4274 ms/op | 2.6314 ms/op | 0.92 | | Uint64 deserialize 100000 - by Uint32A | 2.2175 ms/op | 2.4861 ms/op | 0.89 | | Uint64 deserialize 100000 - by DataView.getUint32 x2 | 2.1750 ms/op | 2.5506 ms/op | 0.85 | | Uint64 deserialize 100000 - by DataView.getBigUint64 | 6.9096 ms/op | 7.9087 ms/op | 0.87 | | Uint64 deserialize 100000 - by byte | 69.157 ms/op | 82.760 ms/op | 0.84 |

by benchmarkbot/action