Reduced memory consumption for trade-off with converting points between jacobian and affine for some processes.
Removed TypeTaging because it avoids a round-trip to the isolate for functions when passing deserialized objects.
Also fixes a bug that was found when running on Debug builds of node. There is an internal check for nullptr External variables. Updated how those were being created and passed to the constructors.
Memory results
Swig Build
Swig SecretKey - 76 b / instance - 2025888 allocated by 27000 instances
Swig PublicKey - 76 b / instance - 2065552 allocated by 28000 instances
Swig Signature - 75 b / instance - 2970048 allocated by 40000 instances
mkeil/rebuild
Napi SecretKey - 142 b / instance - 1810304 allocated by 13000 instances
Napi PublicKey - 140 b / instance - 2639992 allocated by 19000 instances
Napi Signature - 138 b / instance - 2613832 allocated by 19000 instances
mkeil/performance-fixes
Napi SecretKey - 109 b / instance - 2807592 allocated by 26000 instances
Napi PublicKey - 108 b / instance - 2890656 allocated by 27000 instances
Napi Signature - 106 b / instance - 2004648 allocated by 19000 instances
Performance Results
mkeil/rebuild
PublicKey
✓ PublicKey serialization- Napi 1315789 ops/s 760.0000 ns/op - 693759 runs 0.606 s
✓ PublicKey deserialize - Napi 75255.87 ops/s 13.28800 us/op - 20395 runs 0.303 s
✓ PublicKey deserialize and validate - Napi - 1 keys 19127.41 ops/s 52.28100 us/op - 4744 runs 0.303 s
✓ PublicKey deserialize and validate - Napi - 100 keys 191.9501 ops/s 5.209687 ms/op - 41 runs 0.755 s
✓ PublicKey deserialize and validate - Napi - 10000 keys 1.914846 ops/s 522.2351 ms/op - 12 runs 6.87 s
SecretKey
✓ SecretKey.fromKeygen - Napi 653594.8 ops/s 1.530000 us/op - 797114 runs 1.31 s
✓ SecretKey serialization- Napi 1196172 ops/s 836.0000 ns/op - 1060453 runs 1.01 s
✓ SecretKey deserialization - Napi 910746.8 ops/s 1.098000 us/op - 570249 runs 1.11 s
✓ SecretKey.toPublicKey - Napi 11613.19 ops/s 86.10900 us/op - 3673 runs 0.404 s
✓ SecretKey.sign - Napi 3171.542 ops/s 315.3040 us/op - 1599 runs 0.819 s
Signature
✓ Signature serialization- Napi 1193317 ops/s 838.0000 ns/op - 635040 runs 0.606 s
✓ Signature deserialize - Napi 38043.06 ops/s 26.28600 us/op - 13774 runs 0.404 s
✓ Signatures deserialize and validate - Napi - 1 sets 14332.81 ops/s 69.77000 us/op - 4728 runs 0.404 s
✓ Signatures deserialize and validate - Napi - 100 sets 141.7467 ops/s 7.054840 ms/op - 76 runs 1.04 s
✓ Signatures deserialize and validate - Napi - 10000 sets 1.412279 ops/s 708.0755 ms/op - 12 runs 9.23 s
functions
aggregatePublicKeys
✓ aggregatePublicKeys - Napi - 1 sets 598802.4 ops/s 1.670000 us/op - 201181 runs 0.404 s
✓ aggregatePublicKeys - Napi - 8 sets 148236.0 ops/s 6.746000 us/op - 69714 runs 0.505 s
✓ aggregatePublicKeys - Napi - 32 sets 42178.08 ops/s 23.70900 us/op - 11258 runs 0.303 s
✓ aggregatePublicKeys - Napi - 128 sets 10596.48 ops/s 94.37100 us/op - 7287 runs 0.808 s
✓ aggregatePublicKeys - Napi - 256 sets 5381.871 ops/s 185.8090 us/op - 1582 runs 0.498 s
aggregateSignatures
✓ aggregateSignatures - Napi - 1 sets 382409.2 ops/s 2.615000 us/op - 102094 runs 0.303 s
✓ aggregateSignatures - Napi - 8 sets 69444.44 ops/s 14.40000 us/op - 33165 runs 0.505 s
✓ aggregateSignatures - Napi - 32 sets 18553.91 ops/s 53.89700 us/op - 4490 runs 0.303 s
✓ aggregateSignatures - Napi - 128 sets 4642.612 ops/s 215.3960 us/op - 1383 runs 0.523 s
✓ aggregateSignatures - Napi - 256 sets 2331.633 ops/s 428.8840 us/op - 697 runs 0.742 s
aggregateVerify
✓ aggregateVerify - Napi - 1 sets 1115.438 ops/s 896.5090 us/op - 225 runs 0.707 s
✓ aggregateVerify - Napi - 8 sets 300.2689 ops/s 3.330348 ms/op - 123 runs 0.918 s
✓ aggregateVerify - Napi - 32 sets 84.85633 ops/s 11.78462 ms/op - 28 runs 0.841 s
✓ aggregateVerify - Napi - 128 sets 21.40434 ops/s 46.71950 ms/op - 16 runs 1.28 s
✓ aggregateVerify - Napi - 256 sets 11.09427 ops/s 90.13662 ms/op - 13 runs 1.74 s
verifyMultipleAggregateSignatures
✓ verifyMultipleAggregateSignatures - Napi - 1 sets 1058.732 ops/s 944.5260 us/op - 749 runs 1.21 s
✓ verifyMultipleAggregateSignatures - Napi - 8 sets 281.2109 ops/s 3.556050 ms/op - 87 runs 0.812 s
✓ verifyMultipleAggregateSignatures - Napi - 32 sets 78.10713 ops/s 12.80293 ms/op - 17 runs 0.722 s
✓ verifyMultipleAggregateSignatures - Napi - 128 sets 19.78863 ops/s 50.53407 ms/op - 18 runs 1.46 s
✓ verifyMultipleAggregateSignatures - Napi - 256 sets 10.12075 ops/s 98.80688 ms/op - 13 runs 1.88 s
verifyMultipleAggregateSignatures same message
✓ Same message - Napi - 1 sets 1003.115 ops/s 996.8950 us/op - 405 runs 0.909 s
✓ Same message - Napi - 8 sets 666.4836 ops/s 1.500412 ms/op - 202 runs 0.810 s
✓ Same message - Napi - 32 sets 309.7171 ops/s 3.228753 ms/op - 95 runs 0.823 s
✓ Same message - Napi - 128 sets 96.95258 ops/s 10.31432 ms/op - 21 runs 0.760 s
✓ Same message - Napi - 256 sets 51.67093 ops/s 19.35324 ms/op - 13 runs 0.815 s
multithreading perf
libuv
✓ libuv multithreading - napi 0.2895522 ops/s 3.453608 s/op - 12 runs 44.9 s
mkeil/performance-fixes
PublicKey
✓ PublicKey serialization- Napi 1254705 ops/s 797.0000 ns/op - 1222293 runs 1.11 s
✓ PublicKey deserialize - Napi 75751.84 ops/s 13.20100 us/op - 27621 runs 0.404 s
✓ PublicKey deserialize and validate - Napi - 1 keys 19244.09 ops/s 51.96400 us/op - 4763 runs 0.303 s
✓ PublicKey deserialize and validate - Napi - 100 keys 193.3445 ops/s 5.172115 ms/op - 41 runs 0.755 s
✓ PublicKey deserialize and validate - Napi - 10000 keys 1.926565 ops/s 519.0585 ms/op - 12 runs 6.83 s
SecretKey
✓ SecretKey.fromKeygen - Napi 769822.9 ops/s 1.299000 us/op - 929787 runs 1.41 s
✓ SecretKey serialization- Napi 1215067 ops/s 823.0000 ns/op - 751407 runs 0.707 s
✓ SecretKey deserialization - Napi 924214.4 ops/s 1.082000 us/op - 556811 runs 1.01 s
✓ SecretKey.toPublicKey - Napi 11728.14 ops/s 85.26500 us/op - 6047 runs 0.606 s
✓ SecretKey.sign - Napi 3314.870 ops/s 301.6710 us/op - 1005 runs 0.607 s
Signature
✓ Signature serialization- Napi 1085776 ops/s 921.0000 ns/op - 587637 runs 0.606 s
✓ Signature deserialize - Napi 38082.18 ops/s 26.25900 us/op - 10158 runs 0.303 s
✓ Signatures deserialize and validate - Napi - 1 sets 14192.65 ops/s 70.45900 us/op - 7525 runs 0.606 s
✓ Signatures deserialize and validate - Napi - 100 sets 142.9535 ops/s 6.995280 ms/op - 46 runs 0.829 s
✓ Signatures deserialize and validate - Napi - 10000 sets 1.429346 ops/s 699.6207 ms/op - 12 runs 9.10 s
functions
aggregatePublicKeys
✓ aggregatePublicKeys - Napi - 1 sets 712758.4 ops/s 1.403000 us/op - 235063 runs 0.404 s
✓ aggregatePublicKeys - Napi - 8 sets 169923.5 ops/s 5.885000 us/op - 46454 runs 0.303 s
✓ aggregatePublicKeys - Napi - 32 sets 47125.35 ops/s 21.22000 us/op - 17228 runs 0.404 s
✓ aggregatePublicKeys - Napi - 128 sets 11837.12 ops/s 84.48000 us/op - 3587 runs 0.404 s
✓ aggregatePublicKeys - Napi - 256 sets 5878.342 ops/s 170.1160 us/op - 1143 runs 0.380 s
aggregateSignatures
✓ aggregateSignatures - Napi - 1 sets 401767.8 ops/s 2.489000 us/op - 146821 runs 0.404 s
✓ aggregateSignatures - Napi - 8 sets 74626.87 ops/s 13.40000 us/op - 35495 runs 0.505 s
✓ aggregateSignatures - Napi - 32 sets 19237.43 ops/s 51.98200 us/op - 4703 runs 0.303 s
✓ aggregateSignatures - Napi - 128 sets 4985.741 ops/s 200.5720 us/op - 993 runs 0.408 s
✓ aggregateSignatures - Napi - 256 sets 2487.383 ops/s 402.0290 us/op - 744 runs 0.712 s
aggregateVerify
✓ aggregateVerify - Napi - 1 sets 1117.747 ops/s 894.6570 us/op - 226 runs 0.705 s
✓ aggregateVerify - Napi - 8 sets 305.7626 ops/s 3.270511 ms/op - 63 runs 0.711 s
✓ aggregateVerify - Napi - 32 sets 86.17898 ops/s 11.60376 ms/op - 19 runs 0.736 s
✓ aggregateVerify - Napi - 128 sets 22.27307 ops/s 44.89726 ms/op - 13 runs 1.14 s
✓ aggregateVerify - Napi - 256 sets 11.14052 ops/s 89.76242 ms/op - 13 runs 1.72 s
verifyMultipleAggregateSignatures
✓ verifyMultipleAggregateSignatures - Napi - 1 sets 1074.413 ops/s 930.7410 us/op - 218 runs 0.703 s
✓ verifyMultipleAggregateSignatures - Napi - 8 sets 283.8887 ops/s 3.522507 ms/op - 88 runs 0.814 s
✓ verifyMultipleAggregateSignatures - Napi - 32 sets 79.37762 ops/s 12.59801 ms/op - 17 runs 0.719 s
✓ verifyMultipleAggregateSignatures - Napi - 128 sets 20.40411 ops/s 49.00973 ms/op - 13 runs 1.18 s
✓ verifyMultipleAggregateSignatures - Napi - 256 sets 10.28655 ops/s 97.21431 ms/op - 13 runs 1.85 s
verifyMultipleAggregateSignatures same message
✓ Same message - Napi - 1 sets 1013.453 ops/s 986.7260 us/op - 307 runs 0.805 s
✓ Same message - Napi - 8 sets 677.9790 ops/s 1.474972 ms/op - 137 runs 0.709 s
✓ Same message - Napi - 32 sets 313.6265 ops/s 3.188506 ms/op - 64 runs 0.720 s
✓ Same message - Napi - 128 sets 99.74903 ops/s 10.02516 ms/op - 21 runs 0.753 s
✓ Same message - Napi - 256 sets 52.30420 ops/s 19.11892 ms/op - 13 runs 0.817 s
multithreading perf
libuv
✓ libuv multithreading - napi 0.2889514 ops/s 3.460789 s/op - 12 runs 45.0 s
Re-wrote how the points are stored and used.
Reduced memory consumption for trade-off with converting points between jacobian and affine for some processes.
Removed
TypeTag
ing because it avoids a round-trip to the isolate for functions when passing deserialized objects.Also fixes a bug that was found when running on Debug builds of node. There is an internal check for nullptr External variables. Updated how those were being created and passed to the constructors.
Memory results
Swig Build
mkeil/rebuild
mkeil/performance-fixes
Performance Results
mkeil/rebuild
mkeil/performance-fixes