From c047444f96d4c8565260fae8cc8a2db1931601c4 Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 13:37:43 +0100 Subject: [PATCH 01/13] add benchmark runner and example --- benchmarks/benchmark.ts | 104 +++++++++++++++++++++++++++++++++++++++ benchmarks/ecdsa.ts | 25 ++++++++++ benchmarks/tsconfig.json | 12 +++++ 3 files changed, 141 insertions(+) create mode 100644 benchmarks/benchmark.ts create mode 100644 benchmarks/ecdsa.ts create mode 100644 benchmarks/tsconfig.json diff --git a/benchmarks/benchmark.ts b/benchmarks/benchmark.ts new file mode 100644 index 0000000000..859263a340 --- /dev/null +++ b/benchmarks/benchmark.ts @@ -0,0 +1,104 @@ +/** + * Benchmark runner + */ +export { BenchmarkResult, benchmark, printResults }; + +type BenchmarkResult = { + label: string; + mean: number; + stdDev: number; + full: number[]; +}; + +async function benchmark( + label: string, + run: + | (( + tic: (label?: string) => void, + toc: (label?: string) => void + ) => Promise) + | ((tic: (label?: string) => void, toc: (label?: string) => void) => void), + options?: { + numberOfRuns?: number; + numberOfWarmups?: number; + } +): Promise { + const { numberOfRuns = 5, numberOfWarmups = 0 } = options ?? {}; + + let lastStartKey: string; + let startTime: Record = {}; // key: startTime + let runTimes: Record = {}; // key: [(endTime - startTime)] + + function reset() { + startTime = {}; + } + + function start(key?: string) { + lastStartKey = key ?? ''; + key = getKey(label, key); + if (startTime[key] !== undefined) + throw Error('running `start(label)` with an already started label'); + startTime[key] = performance.now(); + } + + function stop(key?: string) { + let end = performance.now(); + key ??= lastStartKey; + if (key === undefined) { + throw Error('running `stop()` with no start defined'); + } + key = getKey(label, key); + let start_ = startTime[key]; + startTime[key] = undefined; + if (start_ === undefined) + throw Error('running `stop()` with no start defined'); + let times = (runTimes[key] ??= []); + times.push(end - start_); + } + + let noop = () => {}; + for (let i = 0; i < numberOfWarmups; i++) { + reset(); + await run(noop, noop); + } + for (let i = 0; i < numberOfRuns; i++) { + reset(); + await run(start, stop); + } + + const results: BenchmarkResult[] = []; + + for (let key in runTimes) { + let times = runTimes[key]; + results.push({ label: key, ...getStatistics(times) }); + } + return results; +} + +function getKey(label: string, key?: string) { + return key ? `${label} - ${key}` : label; +} + +function getStatistics(numbers: number[]) { + let sum = 0; + let sumSquares = 0; + for (let i of numbers) { + sum += i; + sumSquares += i ** 2; + } + let n = numbers.length; + let mean = sum / n; + let stdDev = Math.sqrt((sumSquares - sum ** 2 / n) / (n - 1)) / mean; + + return { mean, stdDev, full: numbers }; +} + +function printResults(results: BenchmarkResult[]) { + for (let result of results) { + console.log(`${result.label}: ${resultToString(result)}`); + } +} + +function resultToString({ mean, stdDev }: BenchmarkResult) { + return `${mean.toFixed(2)}ms ± ${(stdDev * 100).toFixed(1)}%`; +} diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts new file mode 100644 index 0000000000..4399b0682d --- /dev/null +++ b/benchmarks/ecdsa.ts @@ -0,0 +1,25 @@ +/** + * Benchmark runner example + * + * Run with + * ``` + * ./run benchmarks/ecdsa.ts --bundle + * ``` + */ +import { keccakAndEcdsa } from '../src/examples/crypto/ecdsa/ecdsa.js'; +import { benchmark, printResults } from './benchmark.js'; + +let result = await benchmark( + 'ecdsa', + async (tic, toc) => { + tic('compile (cached)'); + await keccakAndEcdsa.compile(); + toc(); + }, + // two warmups to ensure full caching + { numberOfWarmups: 2, numberOfRuns: 5 } +); + +// just an example for how to log results +console.log(result[0].full); +printResults(result); diff --git a/benchmarks/tsconfig.json b/benchmarks/tsconfig.json new file mode 100644 index 0000000000..3d5c7b6534 --- /dev/null +++ b/benchmarks/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "include": ["."], + "exclude": [], + "compilerOptions": { + "rootDir": "..", + "baseUrl": "..", + "paths": { + "o1js": ["."] + } + } +} From a4f4ff6415522e61a6a6cc43dacf6ab1e520be5c Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 16:36:30 +0100 Subject: [PATCH 02/13] add statistics lib to handle student-t cdf evaluation --- benchmarks/types.d.ts | 1 + package-lock.json | 7 +++++++ package.json | 1 + 3 files changed, 9 insertions(+) create mode 100644 benchmarks/types.d.ts diff --git a/benchmarks/types.d.ts b/benchmarks/types.d.ts new file mode 100644 index 0000000000..3ad10a0219 --- /dev/null +++ b/benchmarks/types.d.ts @@ -0,0 +1 @@ +declare module 'jstat'; diff --git a/package-lock.json b/package-lock.json index 6dca797ee7..585bd562cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "glob": "^8.0.3", "howslow": "^0.1.0", "jest": "^28.1.3", + "jstat": "^1.9.6", "minimist": "^1.2.7", "prettier": "^2.8.4", "replace-in-file": "^6.3.5", @@ -5200,6 +5201,12 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jstat": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/jstat/-/jstat-1.9.6.tgz", + "integrity": "sha512-rPBkJbK2TnA8pzs93QcDDPlKcrtZWuuCo2dVR0TFLOJSxhqfWOVCSp8aV3/oSbn+4uY4yw1URtLpHQedtmXfug==", + "dev": true + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", diff --git a/package.json b/package.json index dcac098f44..0c862c3ff5 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "glob": "^8.0.3", "howslow": "^0.1.0", "jest": "^28.1.3", + "jstat": "^1.9.6", "minimist": "^1.2.7", "prettier": "^2.8.4", "replace-in-file": "^6.3.5", From cb75d6f66e03e9fcb6740c175d58e945f066bcfd Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 16:36:58 +0100 Subject: [PATCH 03/13] add significance testing example --- benchmarks/benchmark.ts | 34 ++++++++++++++++++++++++++++------ benchmarks/ecdsa.ts | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/benchmarks/benchmark.ts b/benchmarks/benchmark.ts index 859263a340..b69b4031ca 100644 --- a/benchmarks/benchmark.ts +++ b/benchmarks/benchmark.ts @@ -1,12 +1,13 @@ /** * Benchmark runner */ -export { BenchmarkResult, benchmark, printResults }; +import jStat from 'jstat'; +export { BenchmarkResult, benchmark, printResults, pValue }; type BenchmarkResult = { label: string; mean: number; - stdDev: number; + variance: number; full: number[]; }; @@ -88,9 +89,9 @@ function getStatistics(numbers: number[]) { } let n = numbers.length; let mean = sum / n; - let stdDev = Math.sqrt((sumSquares - sum ** 2 / n) / (n - 1)) / mean; + let variance = (sumSquares - sum ** 2 / n) / (n - 1); - return { mean, stdDev, full: numbers }; + return { mean, variance, full: numbers }; } function printResults(results: BenchmarkResult[]) { @@ -99,6 +100,27 @@ function printResults(results: BenchmarkResult[]) { } } -function resultToString({ mean, stdDev }: BenchmarkResult) { - return `${mean.toFixed(2)}ms ± ${(stdDev * 100).toFixed(1)}%`; +function resultToString({ mean, variance }: BenchmarkResult) { + return `${mean.toFixed(3)}ms ± ${((Math.sqrt(variance) / mean) * 100).toFixed( + 1 + )}%`; +} + +function pValue(sample1: BenchmarkResult, sample2: BenchmarkResult): number { + const n1 = sample1.full.length; + const n2 = sample2.full.length; + const mean1 = sample1.mean; + const mean2 = sample2.mean; + const var1 = sample1.variance / n1; + const var2 = sample2.variance / n2; + + // calculate the t-statistic + const tStatistic = (mean1 - mean2) / Math.sqrt(var1 + var2); + + // degrees of freedom + const df = (var1 + var2) ** 2 / (var1 ** 2 / (n1 - 1) + var2 ** 2 / (n2 - 1)); + + // calculate the (two-sided) p-value indicating a significant change + const pValue = 2 * (1 - jStat.studentt.cdf(Math.abs(tStatistic), df)); + return pValue; } diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index 4399b0682d..bd546114c3 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -7,19 +7,45 @@ * ``` */ import { keccakAndEcdsa } from '../src/examples/crypto/ecdsa/ecdsa.js'; -import { benchmark, printResults } from './benchmark.js'; +import { benchmark, pValue, printResults } from './benchmark.js'; let result = await benchmark( 'ecdsa', async (tic, toc) => { - tic('compile (cached)'); - await keccakAndEcdsa.compile(); + tic('build constraint system'); + await keccakAndEcdsa.analyzeMethods(); toc(); }, // two warmups to ensure full caching { numberOfWarmups: 2, numberOfRuns: 5 } ); -// just an example for how to log results -console.log(result[0].full); +// example for how to log results + +let previousResult = { + label: 'ecdsa - build constraint system', + mean: 3103.639612600001, + variance: 72678.9751211293, + full: [ + 3560.7922879999987, 2891.445788000001, 2946.1976350000023, + 2996.3062800000007, 3123.456072000001, + ], +}; +printResults([previousResult]); printResults(result); + +// comparing results for significant improvement + +let p = pValue(result[0], previousResult); + +if (p < 0.05) { + if (result[0].mean > previousResult.mean) { + console.log(`Performance has improved. p = ${p.toFixed(3)} < 0.05`); + } else { + console.log(`Performance has degraded. p = ${p.toFixed(3)} < 0.05`); + } +} else { + console.log( + `Performance has not changed significantly. p = ${p.toFixed(3)} > 0.05` + ); +} From e80a6f4c82599a197b68228d273b35e768364698 Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 16:53:49 +0100 Subject: [PATCH 04/13] implement nicer logging --- benchmarks/benchmark.ts | 47 +++++++++++++++++++++++++++++++---------- benchmarks/ecdsa.ts | 45 +++++++++++++++------------------------ 2 files changed, 53 insertions(+), 39 deletions(-) diff --git a/benchmarks/benchmark.ts b/benchmarks/benchmark.ts index b69b4031ca..747f0d9966 100644 --- a/benchmarks/benchmark.ts +++ b/benchmarks/benchmark.ts @@ -2,13 +2,13 @@ * Benchmark runner */ import jStat from 'jstat'; -export { BenchmarkResult, benchmark, printResults, pValue }; +export { BenchmarkResult, benchmark, printResult, pValue }; type BenchmarkResult = { label: string; + size: number; mean: number; variance: number; - full: number[]; }; async function benchmark( @@ -69,9 +69,9 @@ async function benchmark( const results: BenchmarkResult[] = []; - for (let key in runTimes) { - let times = runTimes[key]; - results.push({ label: key, ...getStatistics(times) }); + for (let label in runTimes) { + let times = runTimes[label]; + results.push({ label, ...getStatistics(times) }); } return results; } @@ -91,12 +91,37 @@ function getStatistics(numbers: number[]) { let mean = sum / n; let variance = (sumSquares - sum ** 2 / n) / (n - 1); - return { mean, variance, full: numbers }; + return { mean, variance, size: n }; } -function printResults(results: BenchmarkResult[]) { - for (let result of results) { - console.log(`${result.label}: ${resultToString(result)}`); +function printResult( + result: BenchmarkResult, + previousResult?: BenchmarkResult +) { + console.log(result.label); + console.log(`time: ${resultToString(result)}`); + + if (previousResult === undefined) return; + + let change = (result.mean - previousResult.mean) / previousResult.mean; + let p = pValue(result, previousResult); + + let changePositive = change > 0 ? '+' : ''; + let pGreater = p > 0.05 ? '>' : '<'; + console.log( + `change: ${changePositive}${(change * 100).toFixed(3)}% (p = ${p.toFixed( + 2 + )} ${pGreater} 0.05)` + ); + + if (p < 0.05) { + if (result.mean < previousResult.mean) { + console.log('Performance has improved'); + } else { + console.log('Performance has regressed'); + } + } else { + console.log('Change within noise threshold.'); } } @@ -107,8 +132,8 @@ function resultToString({ mean, variance }: BenchmarkResult) { } function pValue(sample1: BenchmarkResult, sample2: BenchmarkResult): number { - const n1 = sample1.full.length; - const n2 = sample2.full.length; + const n1 = sample1.size; + const n2 = sample2.size; const mean1 = sample1.mean; const mean2 = sample2.mean; const var1 = sample1.variance / n1; diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index bd546114c3..6c6bbbd94f 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -7,9 +7,9 @@ * ``` */ import { keccakAndEcdsa } from '../src/examples/crypto/ecdsa/ecdsa.js'; -import { benchmark, pValue, printResults } from './benchmark.js'; +import { BenchmarkResult, benchmark, printResult } from './benchmark.js'; -let result = await benchmark( +let results = await benchmark( 'ecdsa', async (tic, toc) => { tic('build constraint system'); @@ -20,32 +20,21 @@ let result = await benchmark( { numberOfWarmups: 2, numberOfRuns: 5 } ); -// example for how to log results - -let previousResult = { - label: 'ecdsa - build constraint system', - mean: 3103.639612600001, - variance: 72678.9751211293, - full: [ - 3560.7922879999987, 2891.445788000001, 2946.1976350000023, - 2996.3062800000007, 3123.456072000001, - ], -}; -printResults([previousResult]); -printResults(result); - -// comparing results for significant improvement +// mock: load previous results +let previousResults: BenchmarkResult[] = [ + { + label: 'ecdsa - build constraint system', + size: 5, + mean: 3103.639612600001, + variance: 72678.9751211293, + }, +]; -let p = pValue(result[0], previousResult); +// example for how to log results +// criterion-style comparison of result to previous one, check significant improvement -if (p < 0.05) { - if (result[0].mean > previousResult.mean) { - console.log(`Performance has improved. p = ${p.toFixed(3)} < 0.05`); - } else { - console.log(`Performance has degraded. p = ${p.toFixed(3)} < 0.05`); - } -} else { - console.log( - `Performance has not changed significantly. p = ${p.toFixed(3)} > 0.05` - ); +for (let i = 0; i < results.length; i++) { + let result = results[i]; + let previous = previousResults[i]; + printResult(result, previous); } From 6aad628d9375f70b3ef280d1dae3418b768996a5 Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 18:16:34 +0100 Subject: [PATCH 05/13] add witness generation --- benchmarks/benchmark.ts | 3 ++- benchmarks/ecdsa.ts | 32 +++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/benchmarks/benchmark.ts b/benchmarks/benchmark.ts index 747f0d9966..927cd81fc6 100644 --- a/benchmarks/benchmark.ts +++ b/benchmarks/benchmark.ts @@ -98,7 +98,7 @@ function printResult( result: BenchmarkResult, previousResult?: BenchmarkResult ) { - console.log(result.label); + console.log(result.label + `\n`); console.log(`time: ${resultToString(result)}`); if (previousResult === undefined) return; @@ -123,6 +123,7 @@ function printResult( } else { console.log('Change within noise threshold.'); } + console.log('\n'); } function resultToString({ mean, variance }: BenchmarkResult) { diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index 6c6bbbd94f..1e9cf6489f 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -6,14 +6,34 @@ * ./run benchmarks/ecdsa.ts --bundle * ``` */ -import { keccakAndEcdsa } from '../src/examples/crypto/ecdsa/ecdsa.js'; +import { Provable } from 'o1js'; +import { + keccakAndEcdsa, + Secp256k1, + Ecdsa, + Bytes32, +} from '../src/examples/crypto/ecdsa/ecdsa.js'; import { BenchmarkResult, benchmark, printResult } from './benchmark.js'; +let privateKey = Secp256k1.Scalar.random(); +let publicKey = Secp256k1.generator.scale(privateKey); +let message = Bytes32.fromString("what's up"); +let signature = Ecdsa.sign(message.toBytes(), privateKey.toBigInt()); + let results = await benchmark( 'ecdsa', async (tic, toc) => { tic('build constraint system'); - await keccakAndEcdsa.analyzeMethods(); + keccakAndEcdsa.analyzeMethods(); + toc(); + + tic('ecdsa verify (witness gen / check)'); + Provable.runAndCheck(() => { + let message_ = Provable.witness(Bytes32.provable, () => message); + let signature_ = Provable.witness(Ecdsa.provable, () => signature); + let publicKey_ = Provable.witness(Secp256k1.provable, () => publicKey); + keccakAndEcdsa.rawMethods.verifyEcdsa(message_, signature_, publicKey_); + }); toc(); }, // two warmups to ensure full caching @@ -24,9 +44,15 @@ let results = await benchmark( let previousResults: BenchmarkResult[] = [ { label: 'ecdsa - build constraint system', - size: 5, mean: 3103.639612600001, variance: 72678.9751211293, + size: 5, + }, + { + label: 'ecdsa - ecdsa verify (witness gen / check)', + mean: 2062.8708897999995, + variance: 13973.913943626918, + size: 5, }, ]; From 15341203a388cf06d31cff095b6cc189692e844e Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 18:22:52 +0100 Subject: [PATCH 06/13] separate definition and running of benchmarks --- benchmarks/benchmark.ts | 112 +++++++++++++++++++++------------------- benchmarks/ecdsa.ts | 7 ++- 2 files changed, 65 insertions(+), 54 deletions(-) diff --git a/benchmarks/benchmark.ts b/benchmarks/benchmark.ts index 927cd81fc6..e6d347b744 100644 --- a/benchmarks/benchmark.ts +++ b/benchmarks/benchmark.ts @@ -2,7 +2,7 @@ * Benchmark runner */ import jStat from 'jstat'; -export { BenchmarkResult, benchmark, printResult, pValue }; +export { BenchmarkResult, Benchmark, benchmark, printResult, pValue }; type BenchmarkResult = { label: string; @@ -11,7 +11,9 @@ type BenchmarkResult = { variance: number; }; -async function benchmark( +type Benchmark = { run: () => Promise }; + +function benchmark( label: string, run: | (( @@ -23,57 +25,61 @@ async function benchmark( numberOfRuns?: number; numberOfWarmups?: number; } -): Promise { - const { numberOfRuns = 5, numberOfWarmups = 0 } = options ?? {}; - - let lastStartKey: string; - let startTime: Record = {}; // key: startTime - let runTimes: Record = {}; // key: [(endTime - startTime)] - - function reset() { - startTime = {}; - } - - function start(key?: string) { - lastStartKey = key ?? ''; - key = getKey(label, key); - if (startTime[key] !== undefined) - throw Error('running `start(label)` with an already started label'); - startTime[key] = performance.now(); - } - - function stop(key?: string) { - let end = performance.now(); - key ??= lastStartKey; - if (key === undefined) { - throw Error('running `stop()` with no start defined'); - } - key = getKey(label, key); - let start_ = startTime[key]; - startTime[key] = undefined; - if (start_ === undefined) - throw Error('running `stop()` with no start defined'); - let times = (runTimes[key] ??= []); - times.push(end - start_); - } - - let noop = () => {}; - for (let i = 0; i < numberOfWarmups; i++) { - reset(); - await run(noop, noop); - } - for (let i = 0; i < numberOfRuns; i++) { - reset(); - await run(start, stop); - } - - const results: BenchmarkResult[] = []; - - for (let label in runTimes) { - let times = runTimes[label]; - results.push({ label, ...getStatistics(times) }); - } - return results; +): Benchmark { + return { + async run() { + const { numberOfRuns = 5, numberOfWarmups = 0 } = options ?? {}; + + let lastStartKey: string; + let startTime: Record = {}; // key: startTime + let runTimes: Record = {}; // key: [(endTime - startTime)] + + function reset() { + startTime = {}; + } + + function start(key?: string) { + lastStartKey = key ?? ''; + key = getKey(label, key); + if (startTime[key] !== undefined) + throw Error('running `start(label)` with an already started label'); + startTime[key] = performance.now(); + } + + function stop(key?: string) { + let end = performance.now(); + key ??= lastStartKey; + if (key === undefined) { + throw Error('running `stop()` with no start defined'); + } + key = getKey(label, key); + let start_ = startTime[key]; + startTime[key] = undefined; + if (start_ === undefined) + throw Error('running `stop()` with no start defined'); + let times = (runTimes[key] ??= []); + times.push(end - start_); + } + + let noop = () => {}; + for (let i = 0; i < numberOfWarmups; i++) { + reset(); + await run(noop, noop); + } + for (let i = 0; i < numberOfRuns; i++) { + reset(); + await run(start, stop); + } + + const results: BenchmarkResult[] = []; + + for (let label in runTimes) { + let times = runTimes[label]; + results.push({ label, ...getStatistics(times) }); + } + return results; + }, + }; } function getKey(label: string, key?: string) { diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index 1e9cf6489f..7e034e685c 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -20,7 +20,7 @@ let publicKey = Secp256k1.generator.scale(privateKey); let message = Bytes32.fromString("what's up"); let signature = Ecdsa.sign(message.toBytes(), privateKey.toBigInt()); -let results = await benchmark( +const EcdsaBenchmark = benchmark( 'ecdsa', async (tic, toc) => { tic('build constraint system'); @@ -41,6 +41,7 @@ let results = await benchmark( ); // mock: load previous results + let previousResults: BenchmarkResult[] = [ { label: 'ecdsa - build constraint system', @@ -56,6 +57,10 @@ let previousResults: BenchmarkResult[] = [ }, ]; +// run benchmark + +let results = await EcdsaBenchmark.run(); + // example for how to log results // criterion-style comparison of result to previous one, check significant improvement From eb17e5909b7c1d0f8195366e6395cc5f613e76b8 Mon Sep 17 00:00:00 2001 From: Gregor Date: Wed, 6 Mar 2024 20:29:43 +0100 Subject: [PATCH 07/13] changelog --- CHANGELOG.md | 4 ++++ benchmarks/ecdsa.ts | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94157eba76..607d574c03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [Unreleased](https://github.com/o1-labs/o1js/compare/74948acac...HEAD) +### Added + +- Internal benchmarking tooling to keep track of performance https://github.com/o1-labs/o1js/pull/1481 + ## [0.17.0](https://github.com/o1-labs/o1js/compare/1ad7333e9e...74948acac) - 2024-03-06 ### Breaking changes diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index 7e034e685c..18b8db3666 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -27,7 +27,7 @@ const EcdsaBenchmark = benchmark( keccakAndEcdsa.analyzeMethods(); toc(); - tic('ecdsa verify (witness gen / check)'); + tic('witness generation'); Provable.runAndCheck(() => { let message_ = Provable.witness(Bytes32.provable, () => message); let signature_ = Provable.witness(Ecdsa.provable, () => signature); @@ -50,7 +50,7 @@ let previousResults: BenchmarkResult[] = [ size: 5, }, { - label: 'ecdsa - ecdsa verify (witness gen / check)', + label: 'ecdsa - witness generation', mean: 2062.8708897999995, variance: 13973.913943626918, size: 5, From 365aaf7a68d9489fedba51cf82ecc76ae2e91b0e Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Wed, 6 Mar 2024 13:16:50 -0800 Subject: [PATCH 08/13] feat(group.ts): add static method toInput to convert Group instance --- src/lib/group.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lib/group.ts b/src/lib/group.ts index c1367d2df3..cfb0419009 100644 --- a/src/lib/group.ts +++ b/src/lib/group.ts @@ -422,6 +422,12 @@ class Group { }`; } } + + static toInput(x: Group) { + return { + fields: [[x.x], [x.y]], + }; + } } // internal helpers From 6c67c282d34a1d212a076ff2f810d239a9bb3740 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Wed, 6 Mar 2024 13:18:58 -0800 Subject: [PATCH 09/13] docs(CHANGELOG.md): add entry for new `toInput` method for `Group` instance to keep track of changes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 607d574c03..955c8636c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Added - Internal benchmarking tooling to keep track of performance https://github.com/o1-labs/o1js/pull/1481 +- Add `toInput` method for `Group` instance https://github.com/o1-labs/o1js/pull/1483 ## [0.17.0](https://github.com/o1-labs/o1js/compare/1ad7333e9e...74948acac) - 2024-03-06 From 83acf1296b746ee18a7c46a1584aed895b2d3b65 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Wed, 6 Mar 2024 13:35:37 -0800 Subject: [PATCH 10/13] fix(group.ts): fix fields array structure in toInput --- src/lib/group.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/group.ts b/src/lib/group.ts index cfb0419009..ad9d7efec6 100644 --- a/src/lib/group.ts +++ b/src/lib/group.ts @@ -425,7 +425,7 @@ class Group { static toInput(x: Group) { return { - fields: [[x.x], [x.y]], + fields: [x.x, x.y], }; } } From 68e74425bf963ebdb7bca72b253cee5374b1df87 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Wed, 6 Mar 2024 14:20:04 -0800 Subject: [PATCH 11/13] feat(update-changelog.sh): add current date to new entries in CHANGELOG.md for better tracking of changes over time --- update-changelog.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/update-changelog.sh b/update-changelog.sh index 701a1bc491..2d16b8eeca 100755 --- a/update-changelog.sh +++ b/update-changelog.sh @@ -8,8 +8,9 @@ # 1. Identifies the latest version number in the CHANGELOG (following semantic versioning). # 2. Increments the patch segment of the version number for the new release. # 3. Retrieves the current Git commit hash and truncates it for brevity. -# 4. Updates the CHANGELOG.md file: -# - Adds a new entry for the upcoming release using the incremented version number. +# 4. Captures the current date in YYYY-MM-DD format. +# 5. Updates the CHANGELOG.md file: +# - Adds a new entry for the upcoming release using the incremented version number and the current date. # - Updates the link for the [Unreleased] section to point from the current commit to HEAD. # # Usage: @@ -30,5 +31,9 @@ echo "New version: $new_version" current_commit=$(git rev-parse HEAD | cut -c 1-9) echo "Current commit: $current_commit" -# Step 4: Update the CHANGELOG -sed -i "s/\[Unreleased\](.*\.\.\.HEAD)/\[Unreleased\](https:\/\/github.com\/o1-labs\/o1js\/compare\/$current_commit...HEAD)\n\n## \[$new_version\](https:\/\/github.com\/o1-labs\/o1js\/compare\/1ad7333e9e...$current_commit)/" CHANGELOG.md +# Step 4: Capture the current date in YYYY-MM-DD format +current_date=$(date +%Y-%m-%d) +echo "Current date: $current_date" + +# Step 5: Update the CHANGELOG +sed -i "s/\[Unreleased\](.*\.\.\.HEAD)/\[Unreleased\](https:\/\/github.com\/o1-labs\/o1js\/compare\/$current_commit...HEAD)\n\n## \[$new_version\](https:\/\/github.com\/o1-labs\/o1js\/compare\/1ad7333e9e...$current_commit) - $current_date/" CHANGELOG.md From 147b60721e52ec3f1c077051e62f47a47f5197f7 Mon Sep 17 00:00:00 2001 From: Gregor Date: Thu, 7 Mar 2024 08:04:23 +0100 Subject: [PATCH 12/13] submodules and revert vk regression --- src/bindings | 2 +- src/mina | 2 +- tests/vk-regression/vk-regression.json | 32 +++++++++++++------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/bindings b/src/bindings index dee3b47541..9ef2916c93 160000 --- a/src/bindings +++ b/src/bindings @@ -1 +1 @@ -Subproject commit dee3b47541da2470551854ed9fda81bf855b3f31 +Subproject commit 9ef2916c93ac93c7a64f80934178d6ab542b47b0 diff --git a/src/mina b/src/mina index b031a18ad6..0ddc4b90f5 160000 --- a/src/mina +++ b/src/mina @@ -1 +1 @@ -Subproject commit b031a18ad6ac381712b49e7438747e8d85bf10c5 +Subproject commit 0ddc4b90f54b73bb5279db690e74b4b7a0bd8495 diff --git a/tests/vk-regression/vk-regression.json b/tests/vk-regression/vk-regression.json index 5af4c94df0..b9070412fa 100644 --- a/tests/vk-regression/vk-regression.json +++ b/tests/vk-regression/vk-regression.json @@ -24,8 +24,8 @@ } }, "verificationKey": { - "data": "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", - "hash": "23872947239636506088532550415753750049547129075506316366963308049217376120968" + "data": "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", + "hash": "24656492245991446483604357639740051536117166623025096114760294586080473547383" } }, "Membership_": { @@ -45,8 +45,8 @@ } }, "verificationKey": { - "data": "AACwuS3vTWCwpRIX/QlJQqJcmPO9nPm4+sCfcrqiY1NUMiV9k6Pc8kFkMsbGLst78T8uAnYwc1Ql49kq0I2GizwshS9xkBcfxRTAAMBHXhf8KDkK39AalVocKIrfWMV0MSShinj0bCxPCc10K0cya4Voy8fud4+hktDOuwjaAstpEJSbKRHMIki77xHmJWlFUYdkgPg30MU4Ta3ev/h+mcMWmofyhLSQqUbaV6hM95n3Y0Wcn2LRNxJP8TRwHndIcylleqPsGMh3P+A+N9c32N4kl29nreMJJdcUrCXK90GLPAFOB9mHIjKk9+9o3eZc3cGQ+jppXoN3zwO91DeT/GYvXqCZTAudLxIwuJU11UBThG5CKKABa9ulQ1bYGXj9Eydy0vPxfojDeFrnKMi9GKSjiSMzmOLbIw7Dt+g9ggjsHM5rPrT7dY1VV4ZT9shjlcX3029xnk3Bjz4Q9PiK+A8o6f7L6aVB07I+QY2iDtwSQWuXYPohrk85I1UbPfY+giWqFXBtHaN45PMWCyBx0TKaozETCmv0kA5KGTzesYQCECPQ8F2DM+oXz8xly+z9/Ypt/Zx9NvF7wute/1s6Q/QuAACe0W2Rx7dzoXTJWqUDHeh6BuUlxiFXwWiNqUHy03c8bd/RwaOGiiXWB0i647ZymsBE56mB9NZvJTdBqTcx2xy2vXswFt90jphf6jgLtFJULrvKVg+YCMNM/04QLTGcMmjjzv4LciQ6IVXth7zhVKxfL1/2peC0r/ZrP8k+Ox4LEBXWMCQE5kfK476bQgrLeKJfQ45PZfgB688DGwaYAxWbcxBV822/aAsA55ijFY1Xf7S+DiytY4a/u0bellKMDUQqTOq9VwmbDv868zXscUwKpNVR3wy2En/q9M/HJJc4BZyuuQvlQSR59m0gL4hKHf5Dci/YVvM6ACHmg+5SxCr1pUNKbyy2lsIa5Ma40ZmsTpT4/lQczmGENQSQXA9bFibT0Q+Vj885p9heLOCCXyAujC4DhAdYmT1MQ7v4IxckByChYDVXP1CmLMnVPx8rpMJzHExCQ0PNEv9VypociRinDCloXWF7FXP++Bk/m2Hjia0SckTvjT88ifWOF1dRNBYnL0LrlwnMxfnoJEV0mMbHwdDtf7Z8sjf55euUpj0FT5GNfxmx++YqLrnIIO5OfvOdOJkT28RuZoqk3XjOAzH6l24QrqQAp0ebGEbpXqv21bhlr6dYBsculE2VU9SuGJ2g6yuuKf4+lfJ2V5TkIxFvlgw5cxTXNQ010JYug38++ZDV+MibXPzg+cODE5wfZ3jon5wVNkAiG642DzXzNj67x80zBWLdt3UKnFZs9dpa1fYpTjlJg8T+dnJJiKf2IvmvF8xyi1HAwAFyhDL2dn/w/pDE2Kl9QdpZpQYDEBQgCCkegsZszQ+2mjxU9pLXzz5GSoqz8jABW5Qo3abBAhvYKKaAs6NoRgeAD6SadFDbQmXaftE+Y1MVOtjnaZDUBdwahWiJMlkfZpxW1aubEc/GSX8WzCZ8h9HeakcRc7kcN0CR8kmfER3eiZ2JMbt5cQl/afNjwGGAmeXzTaR34AgFjiw/RlZJkhYm9jyf18M8yP94QGBMxd6Y6wrNvOmJHzEnp8aitJsDlZklm8LKbjumlSbLcbBokpIDhFBBKfwP2qsQX7eHLCZ/3mztoFKoIiYXgrHWG8m2SzIJ/ljn6Rg7AxIsPjzZyEw1eXAOC7A1FCT/757ygMsnk+rLlpDTBYLmhJtQdt61MQFDi5BuCmQ/PY9C/74/k4APl5htiNcCZty/1JElFwjuCQFjvAiMPUMyqp7/ALFapsTZqhSs1g6jd8uhuJoTNEqLDvKUUbs0kMvGy8BOG0YXNxmNccabGwBzxmijv6LF/Xinecl4aD8FCh6opY98TJnOHd3XSYL1DbLqmmc6CXEM+g5iDGnXr/CkI2Jy37OkF8X03jz4AH0Yj0+J63yH4IS+PrNpKZEXKh7PvXNaLGGKsFcKEi63/xKPKH0G4RzvFKbkp+IWqtIYjMiwIJMwzmfS1NLLXqqpFiD364eFcXINR2rrDKcoTUp1JkVZVfXfKwaRUPWSGFYIYMtwPh2w8ZfubAmXZFpyzstORhFyg9rtVAAy0lcDhQwWVlhFFkR2qbdoy0EFLBrfKqUIkd1N6vDQQYL1RGaTAv/ybregrJsFo+VP3ZatlR6LnKYWp1m7vPkGm3I6Pus/mvp1k10QGk8nhFuR31DjsG3lzZ4gXSs1oSv0qbxD2S6g5+Y6cPbITEGX3uQjsunXnQ9PHd22Mk+fqbDakTiCJh6aFqqPNShiAXkGSuC1oXJHX3zqnbn75dWO0UVhBNAbjYkSnQeyka1wnZb12sR+PlRMvWQVcd93t5L/FiE0ORo=", - "hash": "16868963972800736425441072759450205964976360513330470468369343131639911132902" + "data": "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", + "hash": "1783504200634090470775115883157449184948497438713557884110780778068634660997" } }, "HelloWorld": { @@ -58,8 +58,8 @@ } }, "verificationKey": { - "data": "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", - "hash": "23008763500271176260093590948902949903512851062443953107046635216420090246820" + "data": "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", + "hash": "12073693408844675717690269959590209616934536940765116494766700428390466839" } }, "TokenContract": { @@ -79,8 +79,8 @@ } }, "verificationKey": { - "data": "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", - "hash": "28746489416588124021057379110164718862651399658896369619264365039730168400693" + "data": "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", + "hash": "8925803295369202411953053433348085915894172555008342243993322619248448379055" } }, "Dex": { @@ -108,8 +108,8 @@ } }, "verificationKey": { - "data": "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", - "hash": "18671077004572533866328734050385144986204131880023727479641996554106327100538" + "data": "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", + "hash": "25039693596333908117154819221126656892469551802975690923144441585724891963362" } }, "Group Primitive": { @@ -220,8 +220,8 @@ } }, "verificationKey": { - "data": "AAAdmtvKeZvyx7UyPW6rIhb96GnTZEEywf8pGpbkt+QXNIm7oWxIDWYa4EWTiadEqzk8WXg3wiZmbXWcqBQU+uIoTiBnYTRcd7RsaAjbdbIbQJ9EuopFRFewZRx9qeQeEibNeMRcRMP4LdfS3AQRxhFZzN4HFa4MbtGs+Aja820cI9VFULH2/7BvD6JjpVWjVLvvo6zhO3S5axqfDh7QqtkPo3TLpand9OVvMHhTVlz/AV7rus5E/+0cv50MaEJ/wBfUh5XNLAlGgVi7FfWR6p9P72AAymyD3lUdecJyZmCREiVgPrTdFppkp45TefJWNTySkV9c5YzpNxQoXedZDvYP/5s4KBkfIeK+zB2yJC9eZ1ZDYfM88shGDYxmBtur9AkQ49QGquR+kYUI0lpXtuNMG+ZRy0FRJ8ci/TE+PIPIFnSiGcSOA3YM2G171LYf89abU2QUoQRHSP3PmmAOy/8CoRLVro7Nl6z/Ou0oZzX7RjOEo//LBqcSWa2S9X8TQz0R3uivbovTdq0rrba56SbEnK6LWItmBc6CubYWL7UzDbD3RZM6iRz1hqTHDzDz7UIWOzHgLqW9rjnZllQCyfsSALXQHMwdfGvN+3MNWNDCFnoPgFGobzsUTEL9MfnYaHUE1mfgNiKBbIZWuzBW89ubfb6OH07R338Vg6hgbd8bBwkgKzcNZhhPW5VfbcSYDpx5nVaU5pTEFl+2+RlcuhBpG1ksAWbD64AUKDjdyTWIC5Wn68AagPtG65V13eFS5LgkSfVtNXxGodg7SdP4AJmXpBgZfzMg4RW6Qje5ZFfrwRzoHPo0y7nO1hkaNLGV3Wvd3/pYiebXvyo+DdTZmaMbJpJaGSCysnovOrVUIpcn4h1hvA12jztQFQcbNHoVeZgslPxA54y9ynjhN7VZfT8lNXXIrRCpmPaxZW6Bw6Op/g6FGIs8TlruzZJRhz1lOLvl2FPvrUsFtz4yWTPjbT+VGsKuJFPvMuYybxq8pGyWVQN023uObDel47krlcQoH4MA2gpdfJOY4VlyrLOUiBqj0eiyFSPnGHkae8mXMlBGXTAh1aDidxHAtVIpbSkxUD94KWxRC0getD29XpSiPfI4C/DR5DLlenSa0wQ3PXdv/C9LpDvkzJOLZs+/ZePd4YMI0+WuP2+6Xas4aNM+4JkNuHF5uMDcxgWID4TUy7Vdlzm3CVbhX15uBoKhuYWQgLr2rnVJ5SOZoDvlwJtcK2izLMYVAasejw4fvsehYGb88wvDbFxS6sM9gDSgTlavZRs95Qf+c1KpYf/jb8BxYNrwrqy8F++c1APDzfzQ/IbVLiaL28wkEy412qmXSjM+9hErKXFy8JIT/WBOIWMMg/7mMjvxngHnci+aYJZ6J+Lszh5zgo708vzO7fwaxC0wgd8anH3gFrbFnOg1hkmmoUEIgIwXh+ynuoZPOaoKNXNm1jOl8HpdFOG7vpQavC600YgzS2YGtY7K2WQ5GtN5ZTZBHPsUSir2yKSo9Le9CWXbDtn3SBDepWypwDa3YWKtNog+y10VmpL1N+RG3u1DXSuY7y9WZgkQ7tdvyx/Gjr91kjF0s3bt7vHIAZCtzNlRlWDBz3og0cSnEucCEuKR6dL2Mz+RuF1GmLoXZXapUjVG/82BjdAMAOxPlE67lEs+JWgnrVrA5NLJoL4DZ6+fhQKpNfk0uOrEfZIWR9Sau0IBwBxu6IYVm5/XAB19dt8MAuVcRdN/JGGzo0Hr3WVJuKzbAhuFwJZzcd1J1n4xO09ECT5NQdFSFXGsy8kIFjRNEOkLl+bAExePtGCt0w6cYqB0uCeX3lTI7ugIEgdStMtHFiWngJ218l8CuVrkwTJ7ZqHLtuJDiNqlLptkHWChDfw+IgDwz85dZrfBBzQrMRWranxQmisM+wx3vC+pLURRQHZJEasGCAElj0lTColrqQ/cXS7cBaqs1tBsQDGzKYMCMwsqL53fyxGCljVvljBa99+FpYfoUK+Fi0z6uEbem+luXRScr2yPB5I08lnBY23RmBb/pfSyBfbcmnmF5BkRlJTJKY7fQL/t9bFfywoquQe9e7OQvIjppA/FO7HmZS6hoOU+eS8+W94fEF2gvrowpTeqQHM6hLN9Qzl8niwZWUIyRCfyuzQnuSz/VP1K2sMFBKnZZNDcuBh1/xSFymOH6LfNKostvc6qHTIxrTjlH6952bo1bQl+mVvBUaJuRkYh12QbcyIyzcBFUYwaFazzkHXMof0O30oL3Q6wegTvJxTSZD5VCr5D26Myzoa0JBpqL0st9/MNGZe5a/+HW1qan/VtGA5nYkJcUzwKVqqlmZeuOZekFLGxlfp0lv9IQUQWtiU5uvd5HVoolEc/teUnx/IxYe01IDxX9cbmPMJnLYXJGSY=", - "hash": "25271286642747974031983353211461491451908613205953665636468664200927112191702" + "data": "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", + "hash": "16626558875595050675741741208497473516532634598762284173771479275503819571624" } }, "ecdsa": { @@ -233,8 +233,8 @@ } }, "verificationKey": { - "data": "AACzYt9qtBkn6y40KDH0lkzRSMBh3W41urWE6j0PSP2KB9GxsBAHAI3uzay1Vqyc+LMXeANSzNcoYSYnZts9Pk0nFNjCZ84EnGkie609NhFB8tU9k5Vkoqw3jihdsoJEUy6GK0H30dl/7H1rGxsx6Ec05aaFhiPw6t0jLxF1kj4uIeipqOScf8snKuzywk02FqvRxSHlk9pkEsUOvpNIwywxzhvHjWgXEQzROQF8v6q5R/1aJk3swpM1iRct9URLIjdin4GWyDB9279EZ6D6avFW2l7WuMJG++xBqGsNKZUgNM4WkUGNfCd+m42hJgt46eOy89db672su0n24IZG9tAsgQl8vPsVKfsTvTWlMj6/jISm7Dcctr1rZpSb8hRPsQstlfqMw3q6qijtTkFiMsdGRwJ6LNukSFUxOarhVsfREQngJufm4IxFpJJMR5F1DFSDPiOPuylEqXzke+j078Y4vr+QRo07YRlsoEv4a6ChcxMd3uu5Oami+D747/YVaS8kLd/3bO+WFpubID5fv4F7/JO4Fy/O7n1waPpNnzi/PZRlHVlwzNVAs09OmTmgzNM4/jAJBO9lRgCFA1SW0BADAC/RYa/DFzzgI0SJF+gmV5rEMuG1fR/Lckf1HmfylBUHNAS/bvycGfRfVQEJm8AiPA+NsC9586U9y8PnWd7GPwXPFNzYqZw3swyXzQ3nvZqWU2ARuzo1BgMrvnDgW1H+AMbKbNGU7IYXIYaLfTR9S7qrUbHESHac4wo9J9HmRiU1/IQdyr5LldYkzYtZOrjM4SzBkYYVtpSH7Sopij/TTy0U9CXNle7iCnZQS/72C8kwyJ+BGqpULLkSWhHoj+U9GSW9UgDHZ62jRTzvuZz5QaX/hYOmpNChNMFS1zoDYVE7ZIzVQKX03IDkzHAVJCXggwhQO3NK6OGhlP7A/heM6zgiR3/LlOa8uW4fcow50XC3280SDziK0Uczab3zlYXPPH6KqGPJfnftgwuvcHsRgddOWDVfEH3Q9mAj0y1R1FopgU3ylFbGzHOCfLqSHKYUuYd2WibC7w5jZ6B30UlkZCUs4cV/bFusrmAQhAwImq9fkbeXxTHSSnvbMY37QruSMQ2qDXacvJQHRIiBHfPZ3G52Z2lTf6OGg/elBurqGhA2wdDAQrBIWJwiTClONbV+8yR/4Md7aPi44E4XICLpHhE5hzko7ePy9cwh3oXy3btBt0urRwrl4d/jhHvoYt1eE2inNWEOYdlkXFUDlDErwOpFVsyQon0G25zNLAcVaZgdJLWueU1y3G0XkfHRqMZ8eV1iNAegPCCNRCvJ6SVsSwcQ67s45a8VqFxSSW0F65bDCI6Ue3Hwpb1RFKbfSIJbPyUrVSq5K99wUJ01O93Kn8LQlrAbjHWo5Za+tW0a/+Qlbr5E2eSEge+ldnbMbA9rcJwZf4bT457dBXMdlD7mECIDZtD8M/KLeyzMEinDzPfqnwZjU2ifxs6gaJPXOQAWPzbCm/z2vGlRbXDGZF6yTbLTdjzviuPhVtb7bzsZW2AYC+TlZqb4qm9MAVsH5rX3OZmvvmw5oRKeSj+FFD7uSRwfutDGC99i93uptU8syL/8Tr8xU3atxITlSqHqG+rVGWdLO9i3iq38zXgXbvZacrc3CMF5QBIM8yZXNslXH5k39D5SqubSHBWTqAJ1I0heOjaIHQGLROBYLn178tckBxfKQ2UpyfkvMw1Waw+fp5f64Ce+5bmYyZr6Dhmw/xcoAihjUsEqoecrLuGPp6qI4hQt9qOnVrAxHzwwtJGxcqoiCbe1mgz0fxMCt/i0z3ygdqAn20DKPHuBdqgVUFwx2T7Ac9fUCf3RHMq34onrr2nLHc038GYedmlFjoUZStujGwA8tSwLWyuWZTDVV+ZaW92qkhmrACog6NwhR6SEjQgsMRCVBQZzYirZxyulYmcNWH6BUmnLLFsn3GbS40xUr70gujEPnjZUK/ExGRfUPOfrYYb8mAciE9nP8OeK/UI+zjJy6Qp8mMroFw7gVHCfDtKTeQFt4JV3zubGsD7jypquHKCqPewhgn9tZ1UIsKIQB7+hBwDHzhlOZ2FfR4eLwQkO8sz275tpjHDAqX/TBWWRVg/yBDii0CWN4bP8UuX36jZKZboJUxIkM1xThiGZM2/oMbe5cZyjgrBR3P21wiDHAAlsHkaMfJgkVLqvZOw8hflKRIMa2dEYo5voD6aV30sATHQLoV0o+MlV3WA38RA+23Jqt1g+UZ7ReAuDP88jXhqWFcIvWHrJG0oy+rpAPQU/38vhIxbl//lirsirdVK2LrU47CC1f9/pRi07vTnvAm+n02dhwriqpwOmI2o2OU4mO0q96pCueKjAttkXgz+NSIJzcwprvNyE9UtKWswmIQg=", - "hash": "28329813042739019865303373981542714975096121311268477893114462508676857180819" + "data": "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", + "hash": "13907522711254991952405567976395529829664716172124500348498751038796408381729" } }, "sha256": { @@ -246,8 +246,8 @@ } }, "verificationKey": { - "data": "AACa0OPxg0UDEf5DBLZf/TtdB4TzIAMNQC467+/R1yGnL1tRXJnn0BDcLG0fGWdqFcWK1q2zKdAYfORKVOHgvKEwxtxZYv4CjM7SwlG09G52oNZmOgGCilD0ntmby4rzJTaoyCimx5ynQ/oYjslJgSM/1DTAkpW6IIdFjjkmjlOSHqRNRAMtNtl44D9lbhci4blHbDvzQnlYynwRh58jAzoDj3bCkPsByviAyFBoPhUx2M13h0/VPK1ND/69djzZgi9lQKaON74XvbnvJdSAYLQSIBbOE0yo7tS1vGTPqDqJGzc1f0+2QhZttE2UEUV4PPEGB6LUFEuQPXK8lXyXHVQTOU+omjpvKHLLs/dQZLTSvvZ3UFqxUvxjSEG9eTPo3Cyt4wXcPEi1b993ePSSxP6njj1SoPBA4BvLCCcvaxz5DegUu7nZDKkC8tuaoNbqYcayaf/8+oZ+dA+Ek1Xe08og1Hz9gB9cfPvgI9EiL2Na2cgiOF2klHHEAj3fORN8UQVzs0ioqLcQeq2tH2UMMtZS4JNcohHUah1T0jKmS3eZDqe+aMuf5qzKA5oKRF2ejRwmsxI161YlgXXpmHs+kCQGAPItDiewtjjsNF6H3MxJgzwvcw28UYd8GGK3EtTUVvMwyy+8fp0VeDOKSRFRRiVuWwBJKWRDX0ePVinR+yH1IQ34U20AHCGYSahuSFbBO6dDhRCPGRCJJgxktY+CSO+3B9mLtCe2X23FeFsUnaAFlzmsWeKR1tMyPupNsUXPFugubYZYd1EwxUDeBIOLeahcqX78yDDMOdsr0QHNG8XteyXcRXGFUSzTTKNEXdD+BOMY6FfMroKO4y3FffyrZef1PRsu/kVwaZb4UthvhBwet8DBcMa26kISlsI1ItcvsdwST5x1+iLCM4hBcFB0ly3N18uR7+MLHU0AdV13INFo8indyz1XEZCHlm+tKF3LX8Z7G0v68uRmjKRgy/S9NjKPA+M3rbj4pDU+jS4EKN++nKYxXjwdKJXu4XvbUU9ITKM7rigaxnAYC/i+PiWikbwmZj44d63uvdtwoI2dkqwT6hik139BjtL5igXCiRcOVmhSCvzM4tsHPqMYQbYUYB9+Ok0OzQ8/vAiYAdVmcHuS+M1etSdnWerxU4E3vC2odvcjNq2yh/VyODIwPt/UPYT1soPpv6M3XSyvpE1kVb0TmD91v6mXvfq23wSDn7ndgLx52m+CGnEGzA/OwwVQnZaFNq+sZjKjOa8ALFNcjyS8IuYEz4XYMiSy/wCl2n2AHVIc6djnQZySvECly6HHJSpWpWv8zvNfLUiWozg4ActV4QzQsd2nagCedaw1z82uWcKLraPboPGke+1dGOqg8OFiBJUBoW/bROBgw2H8WnPIhcofMwGOCrXpMGvA4LKnn3okzY3hTNfex1t7zCpxQC2YRBN0Ze8qOELHTYvOlSwG1AQqZDhC//VDGFvvQ1ZgzsmpnbyNGTGMaCKRMGI0evgxD6Ziitu5k9ogVW6dGSR9cBM0NryOxQl6JcwUXd0twqsLI0pbH7cjlGzWsylGuufx/m77GPRqnysk6r+ibZ4fDBFDumJFxxbS4AqzXLR+nNg42hJbvuxsyZnCRpkB2N9xH3VX8/Il8BX40HdEE/08l3JmL3jn8Bznqwj8z3TqBFMdRGOOq2/5DjwcjaNh9pYRn6bDl/1qVPrJkUExPECrQRymHQ3JERZjm1G+a3bhAJFeb+Ak4D8PlK2RgPcMCS7bBXWuPRh0z4FKGnhZnecNmuWMSvUFsSZcoaFKfyNanX8qMsu+KWtWEbDwwQ49NrfCmg45/WAOQxX8LKMYgUrDpSVdE/bM+JqYpq0AmOHAhoIdlOC7jVMIPI6LEAVJC1PrFQBS3HbH+u5IMQ684sJehPFtd1pjpfboDrnbgfhnjFf9HqS5bG1sR1Dh2mXGXpQ+ni+O3FvEYCEZY+UU9d9XCGwL2OZIhtMi6M6qcnrn11w2MyaZ8U6aZxVTMFvKQ2JLtwVGVnMDuSkNC+iN711acwssgbTpsgHLdVbtFR1oYcbpJHe6a9SFquG+q9qfzT15IzKpBzxn6BVXfhhFGpJRAbU0bXbjOpeceg7vaV7RykTzBoIzAe5aUVAdKNM6fzGlPw16xx7QeOW+LFlOm6HJyxYAZfbpB/BLza4ZhoqmVx+ALUXHFIztgGQK9rzm+jBwiuwuLqdD2W00cbTZcbgKTo48XD6NJ+8T4J9B3rPzht3qbgpN//TyYkfrzAercAa/HCvFeBNXl1slCj8cF/EO6iX/NnIxBkuqmXfQnGUfcFK0LZPsvd7RInaLEYTeA4ZDfChiuw+5nTmrJFOywwOYdIA+NiMfCh24dPYAAwEGb9KLEP9u7/Rp5uPi0S3tuTw67yg=", - "hash": "16300587121626758287799507210144584597991991079389272313290346700569896683417" + "data": "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", + "hash": "22296391645667701199385692837408020819294441951376164803693884547686842878882" } }, "diverse": { From 3cbc4b57fc268fc691a6f41dd830d40d66d92f11 Mon Sep 17 00:00:00 2001 From: Gregor Date: Thu, 7 Mar 2024 08:18:01 +0100 Subject: [PATCH 13/13] fixup benchmarks and type check them in ci --- benchmarks/ecdsa.ts | 4 ++-- benchmarks/tsconfig.json | 1 + package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/benchmarks/ecdsa.ts b/benchmarks/ecdsa.ts index 18b8db3666..5bc29a9a87 100644 --- a/benchmarks/ecdsa.ts +++ b/benchmarks/ecdsa.ts @@ -24,11 +24,11 @@ const EcdsaBenchmark = benchmark( 'ecdsa', async (tic, toc) => { tic('build constraint system'); - keccakAndEcdsa.analyzeMethods(); + await keccakAndEcdsa.analyzeMethods(); toc(); tic('witness generation'); - Provable.runAndCheck(() => { + await Provable.runAndCheck(() => { let message_ = Provable.witness(Bytes32.provable, () => message); let signature_ = Provable.witness(Ecdsa.provable, () => signature); let publicKey_ = Provable.witness(Secp256k1.provable, () => publicKey); diff --git a/benchmarks/tsconfig.json b/benchmarks/tsconfig.json index 3d5c7b6534..98fbc7dcbe 100644 --- a/benchmarks/tsconfig.json +++ b/benchmarks/tsconfig.json @@ -3,6 +3,7 @@ "include": ["."], "exclude": [], "compilerOptions": { + "noEmit": true, // no build output, we just want type checking "rootDir": "..", "baseUrl": "..", "paths": { diff --git a/package.json b/package.json index 0c862c3ff5..18c56fa056 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "build:update-bindings": "./src/bindings/scripts/update-o1js-bindings.sh", "build:wasm": "./src/bindings/scripts/update-wasm-and-types.sh", "build:web": "rimraf ./dist/web && node src/build/build-web.js", - "build:examples": "npm run build && rimraf ./dist/examples && npx tsc -p tsconfig.examples.json", + "build:examples": "npm run build && rimraf ./dist/examples && npx tsc -p tsconfig.examples.json && npx tsc -p benchmarks/tsconfig.json", "build:docs": "npx typedoc --tsconfig ./tsconfig.web.json", "prepublish:web": "NODE_ENV=production node src/build/build-web.js", "prepublish:node": "node src/build/copy-artifacts.js && rimraf ./dist/node && npx tsc -p tsconfig.node.json && node src/build/copy-to-dist.js && NODE_ENV=production node src/build/build-node.js",