diff --git a/README.md b/README.md index 2b68d12..a380685 100644 --- a/README.md +++ b/README.md @@ -91,19 +91,16 @@ The API is identical for all implementations. - `herumi`: [src/herumi](src/herumi) - `noble`: [noble-bls12-381](https://github.com/paulmillr/noble-bls12-381) -``` -blst verify: 502.72 ops/sec (100 runs) -blst verifyAgg: 489.60 ops/sec (100 runs) -blst aggPubkey: 8326.6 ops/sec (100 runs) -blst aggSigs: 6968.3 ops/sec (100 runs) -herumi verify: 53.792 ops/sec (100 runs) -herumi verifyAgg: 52.897 ops/sec (100 runs) -herumi aggPubkey: 3020.1 ops/sec (100 runs) -herumi aggSigs: 1151.2 ops/sec (100 runs) -noble verify: 13.868 ops/sec (10 runs) -noble verifyAgg: 11.241 ops/sec (10 runs) -noble aggPubkey: 47.309 ops/sec (10 runs) -``` +Results are in `ops/sec`. `blst` and `herumi` performed 100 runs each, `noble` 10 runs. + +| Function - `ops/sec` | `blst` | `herumi` | `noble`\* | +| ------------------------- | :----: | :------: | :-------: | +| `verify` | 502.72 | 53.792 | 13.868 | +| `verifyAggregate` (30) | 489.60 | 52.897 | 11.241 | +| `aggregate` (pubkeys, 30) | 8326.6 | 3020.1 | 47.309 | +| `aggregate` (sigs, 30) | 6968.3 | 1151.2 | - | + +\*`noble` methods include serialization and deserialization to bytes, which may impact the `aggregate` benchmark Results from CI run https://github.com/ChainSafe/bls/runs/1478915060 diff --git a/benchmark/index.ts b/benchmark/index.ts index 72b523d..6696642 100644 --- a/benchmark/index.ts +++ b/benchmark/index.ts @@ -2,8 +2,7 @@ import {runBenchmark} from "./runner"; import {runForAllImplementations} from "../test/switch"; import {PublicKey, Signature} from "../src/interface"; import {range, randomMessage} from "../test/util"; - -const aggCount = 30; +import {aggCount, runs} from "./params"; (async function () { await runForAllImplementations(async (bls, implementation) => { @@ -25,12 +24,13 @@ const aggCount = 30; testRunner: ({pk, msg, sig}) => { return sig.verify(pk, msg); }, + runs, }); // Fast aggregate await runBenchmark<{pks: PublicKey[]; msg: Uint8Array; sig: Signature}, boolean>({ - id: `${implementation} verifyAggregate`, + id: `${implementation} verifyAggregate (${aggCount})`, prepareTest: () => { const msg = randomMessage(); @@ -52,6 +52,7 @@ const aggCount = 30; testRunner: ({pks, msg, sig}) => { return sig.verifyAggregate(pks, msg); }, + runs, }); // Aggregate pubkeys @@ -67,6 +68,7 @@ const aggCount = 30; testRunner: (pks) => { bls.PublicKey.aggregate(pks); }, + runs, }); // Aggregate sigs @@ -87,6 +89,7 @@ const aggCount = 30; testRunner: (sigs) => { bls.Signature.aggregate(sigs); }, + runs, }); }); })(); diff --git a/benchmark/noble.ts b/benchmark/noble.ts index 23f598f..9980ae7 100644 --- a/benchmark/noble.ts +++ b/benchmark/noble.ts @@ -2,9 +2,7 @@ import {runBenchmark} from "./runner"; import {range, randomMessage} from "../test/util"; import {generateRandomSecretKey} from "@chainsafe/bls-keygen"; import * as noble from "noble-bls12-381"; - -const aggCount = 30; -const nobleRuns = 10; +import {aggCount, runsNoble} from "./params"; (async function () { // verify @@ -26,13 +24,13 @@ const nobleRuns = 10; testRunner: async ({pk, msg, sig}) => { return await noble.verify(sig, msg, pk); }, - runs: nobleRuns, + runs: runsNoble, }); // Fast aggregate await runBenchmark<{pks: Uint8Array[]; msg: Uint8Array; sig: Uint8Array}, boolean>({ - id: `noble verifyAggregate`, + id: `noble verifyAggregate (${aggCount})`, prepareTest: async () => { const msg = randomMessage(); @@ -57,7 +55,7 @@ const nobleRuns = 10; const pk = noble.aggregatePublicKeys(pks); return await noble.verify(sig, msg, pk); }, - runs: nobleRuns, + runs: runsNoble, }); // Aggregate pubkeys @@ -73,6 +71,6 @@ const nobleRuns = 10; testRunner: async (pks) => { noble.aggregatePublicKeys(pks); }, - runs: nobleRuns, + runs: runsNoble, }); })(); diff --git a/benchmark/params.ts b/benchmark/params.ts new file mode 100644 index 0000000..fa78e69 --- /dev/null +++ b/benchmark/params.ts @@ -0,0 +1,3 @@ +export const aggCount = 30; +export const runs = 100; +export const runsNoble = 10;