Comparison of performance of various Pedersen hash implementations.
Results are divided into two categories: native and Node.js/WebAssembly. Node.js/WebAssembly benchmark results are only presented for Node.js as it has reasonably good WebAssembly performance with the V8 engine.
| pathfinder 👑 | starknet-rs | starknet-signatures | |
|---|---|---|---|
pedersen_hash |
27.858 µs | 31.990 µs | 143.21 µs |
| Relative | 1.00x | 1.15x | 5.14x |
| starknet-rs 👑 | micro-starknet | |
|---|---|---|
pedersen_hash |
228.67 µs | 1.573 ms |
| Relative | 1.00x | 6.88x |
Here's the list of implementations tested along with their platform availability.
| Implementation | Native | Node.js/WebAssembly |
|---|---|---|
| geometryresearch/starknet-signatures | ✅ | ❌ |
| eqlabs/pathfinder | ✅ | ❌ |
| xJonathanLEI/starknet-rs | ✅ | ✅ |
| paulmillr/micro-starknet | ❌ | ✅ |
-
CPU
AMD Ryzen 9 5950X 16-Core Processor
-
OS
Ubuntu 20.04.5 LTS
-
Runtimes
wasmer-js:wasmer-js 0.4.1- Node.js:
v18.12.1
To run the native benchmarks:
$ cargo benchTo run the WebAssembly benchmarks, make sure you have wasm32-wasi target and cargo-wasi installed. Then build the wasm file:
$ ./scripts/build_bench_wasm.shThen you can run the benchmark with your target runtime. For example, to run the benchmark against wasmer-js (Node.js):
$ ./scripts/run_bench_wasm.sh wasmer-jsFor more information regarding wasm benchmarks with criterion.rs, check out this guide.
To run non-wasm Node.js benchmarks, first build the benchmark script:
$ yarn install
$ yarn buildThen run the script with node:
$ node build/js-bench.js