diff --git a/.prettierignore b/.prettierignore index 6c1153e767..1053828e20 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,4 +10,7 @@ src/mina/ # These files are generated by proof-systems # no need to run prettier on it src/bindings/crypto/test-vectors/poseidon-kimchi.ts -src/bindings/crypto/test-vectors/poseidon-legacy.ts \ No newline at end of file +src/bindings/crypto/test-vectors/poseidon-legacy.ts +# Files with parser issues +# See https://github.com/trivago/prettier-plugin-sort-imports/issues/287 +src/lib/mina/v1/zkapp.ts diff --git a/.prettierrc.cjs b/.prettierrc.cjs index 58f794c200..a12baec68d 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.cjs @@ -13,4 +13,14 @@ module.exports = { }, }, ], + plugins: ['@trivago/prettier-plugin-sort-imports'], + importOrder: [ + '', // External libraries + '^@/.*', // Absolute aliases (e.g., `@/components`) + '^\\.\\./.*', // Relative parent imports + '^\\./.*', // Relative sibling imports + ], + importOrderSeparation: true, + importOrderSortSpecifiers: true, + importOrderParserPlugins: ['typescript', 'decorators-legacy'], }; diff --git a/npmDepsHash b/npmDepsHash index fea3e2178c..53c1377e5c 100644 --- a/npmDepsHash +++ b/npmDepsHash @@ -1 +1 @@ -sha256-Mw7ibGb8ljvls5AqkPPgvMRcz5LWvuWz2KZv2Sdby3I= +sha256-r0ZjpxOUTTADFnNWhA6sGeibP8rbsJavze+5qf+rWBA= diff --git a/package-lock.json b/package-lock.json index 4b3c5523d5..9dcf0a7a2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@noble/curves": "1.8.1", "@noble/hashes": "^1.3.2", "@playwright/test": "^1.48.0", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/jest": "^27.0.0", "@types/libsodium-wrappers-sumo": "^0.7.8", "@types/node": "^18.14.2", @@ -136,15 +137,17 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -184,27 +187,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -317,13 +305,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -510,39 +498,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", "dev": true, "license": "MIT", "dependencies": { @@ -1855,17 +1832,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1877,26 +1851,19 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2452,6 +2419,41 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz", + "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "javascript-natural-sort": "^0.7.1", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">18.12" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x", + "prettier-plugin-svelte": "3.x", + "svelte": "4.x || 5.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "svelte": { + "optional": true + } + } + }, "node_modules/@types/babel__core": { "version": "7.20.4", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", @@ -3882,6 +3884,13 @@ "node": ">=8" } }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true, + "license": "MIT" + }, "node_modules/jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", @@ -5301,15 +5310,16 @@ "license": "MIT" }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { @@ -5395,6 +5405,13 @@ "uc.micro": "^2.0.0" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", diff --git a/package.json b/package.json index e3779cb0ab..1b855dd1cf 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "@noble/curves": "1.8.1", "@noble/hashes": "^1.3.2", "@playwright/test": "^1.48.0", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/jest": "^27.0.0", "@types/libsodium-wrappers-sumo": "^0.7.8", "@types/node": "^18.14.2", diff --git a/run-in-browser.js b/run-in-browser.js index 5e275b606f..21afb9cb57 100755 --- a/run-in-browser.js +++ b/run-in-browser.js @@ -1,8 +1,9 @@ #!/usr/bin/env node +import minimist from 'minimist'; import fs from 'node:fs/promises'; -import path from 'node:path'; import http from 'node:http'; -import minimist from 'minimist'; +import path from 'node:path'; + import { build } from './src/build/build-example.js'; let { diff --git a/src/bindings.web.js b/src/bindings.web.js index 9092fb2147..7e87a6957d 100644 --- a/src/bindings.web.js +++ b/src/bindings.web.js @@ -1,5 +1,5 @@ import './bindings/crypto/bindings.js'; -import { initializeBindings as init, withThreadPool, wasm } from './bindings/js/web/web-backend.js'; +import { initializeBindings as init, wasm, withThreadPool } from './bindings/js/web/web-backend.js'; let Snarky, Ledger, Pickles, Test_; let isInitialized = false; diff --git a/src/bindings/crypto/benchmarks/inverse.ts b/src/bindings/crypto/benchmarks/inverse.ts index 6c547418ab..2d6192a51a 100644 --- a/src/bindings/crypto/benchmarks/inverse.ts +++ b/src/bindings/crypto/benchmarks/inverse.ts @@ -1,5 +1,5 @@ -import { Fp, p, inverse } from '../finite-field.js'; import { tic, toc } from '../../../lib/util/tic-toc.js'; +import { Fp, inverse, p } from '../finite-field.js'; const N = 10000; diff --git a/src/bindings/crypto/bigint.unit-test.ts b/src/bindings/crypto/bigint.unit-test.ts index fedd06d9a2..a99dfd78a7 100644 --- a/src/bindings/crypto/bigint.unit-test.ts +++ b/src/bindings/crypto/bigint.unit-test.ts @@ -1,13 +1,15 @@ import { expect } from 'expect'; + +import { Random, test } from '../../lib/testing/property.js'; + import { - bytesToBigInt, bigIntToBytes, bigintToBytes32, + bytesToBigInt, bytesToBigint32, parseHexString32, } from './bigint-helpers.js'; import { Fp } from './finite-field.js'; -import { Random, test } from '../../lib/testing/property.js'; function testBigintRoundtrip(x: bigint, size: number) { let bytes = bigIntToBytes(x, size); diff --git a/src/bindings/crypto/bindings.ts b/src/bindings/crypto/bindings.ts index 8e9fcb35ff..9e9a392587 100644 --- a/src/bindings/crypto/bindings.ts +++ b/src/bindings/crypto/bindings.ts @@ -3,19 +3,20 @@ * It is exposed to JSOO by populating a global variable with an object. * It gets imported as the first thing in ../../bindings.js so that the global variable is ready by the time JSOO code gets executed. */ +import type * as wasmNamespace from '../compiled/node_bindings/plonk_wasm.cjs'; import { prefixHashes, prefixHashesLegacy } from '../crypto/constants.js'; + import { Bigint256Bindings } from './bindings/bigint256.js'; -import { PallasBindings, VestaBindings } from './bindings/curve.js'; -import { FpBindings, FqBindings } from './bindings/field.js'; -import { FpVectorBindings, FqVectorBindings } from './bindings/vector.js'; -import type * as wasmNamespace from '../compiled/node_bindings/plonk_wasm.cjs'; import { fieldsFromRustFlat, fieldsToRustFlat } from './bindings/conversion-base.js'; -import { proofConversion } from './bindings/conversion-proof.js'; import { conversionCore } from './bindings/conversion-core.js'; -import { verifierIndexConversion } from './bindings/conversion-verifier-index.js'; import { oraclesConversion } from './bindings/conversion-oracles.js'; +import { proofConversion } from './bindings/conversion-proof.js'; +import { verifierIndexConversion } from './bindings/conversion-verifier-index.js'; +import { PallasBindings, VestaBindings } from './bindings/curve.js'; import { jsEnvironment } from './bindings/env.js'; +import { FpBindings, FqBindings } from './bindings/field.js'; import { srs } from './bindings/srs.js'; +import { FpVectorBindings, FqVectorBindings } from './bindings/vector.js'; export { getRustConversion, RustConversion, Wasm }; diff --git a/src/bindings/crypto/bindings/bigint256.ts b/src/bindings/crypto/bindings/bigint256.ts index e266a06b92..54f5aef4cb 100644 --- a/src/bindings/crypto/bindings/bigint256.ts +++ b/src/bindings/crypto/bindings/bigint256.ts @@ -1,4 +1,5 @@ import { MlBool } from '../../../lib/ml/base.js'; + import { withPrefix } from './util.js'; /** diff --git a/src/bindings/crypto/bindings/bindings.unit-test.ts b/src/bindings/crypto/bindings/bindings.unit-test.ts index 4f39fa5707..fd8fc77aa2 100644 --- a/src/bindings/crypto/bindings/bindings.unit-test.ts +++ b/src/bindings/crypto/bindings/bindings.unit-test.ts @@ -6,6 +6,19 @@ * - They throw errors for the same inputs * - If they don't throw an error, outputs must be the same */ +import { MlBool, MlOption } from '../../../lib/ml/base.js'; +import { FromSpec, Spec, ToSpec, defaultAssertEqual, id } from '../../../lib/testing/equivalent.js'; +import { Random } from '../../../lib/testing/property.js'; +import { + WasmGPallas, + WasmGVesta, + WasmPallasGProjective, + WasmVestaGProjective, +} from '../../compiled/node_bindings/plonk_wasm.cjs'; +import { wasm } from '../../js/node/node-backend.js'; +import { GroupProjective, Pallas, ProjectiveCurve, Vesta } from '../elliptic-curve.js'; +import { FiniteField, Fp, Fq } from '../finite-field.js'; + import { Bigint256, Bigint256Bindings, @@ -15,9 +28,6 @@ import { mlBytesToUint8Array, toMlStringAscii, } from './bigint256.js'; -import { wasm } from '../../js/node/node-backend.js'; -import { Spec, ToSpec, FromSpec, defaultAssertEqual, id } from '../../../lib/testing/equivalent.js'; -import { Random } from '../../../lib/testing/property.js'; import { WasmAffine, WasmProjective, @@ -26,18 +36,9 @@ import { fieldFromRust, fieldToRust, } from './conversion-base.js'; -import { equivalentRecord } from './test-utils.js'; -import { Field, FpBindings, FqBindings } from './field.js'; -import { MlBool, MlOption } from '../../../lib/ml/base.js'; import { OrInfinity, PallasBindings, VestaBindings, toMlOrInfinity } from './curve.js'; -import { GroupProjective, Pallas, ProjectiveCurve, Vesta } from '../elliptic-curve.js'; -import { - WasmGPallas, - WasmGVesta, - WasmPallasGProjective, - WasmVestaGProjective, -} from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { FiniteField, Fp, Fq } from '../finite-field.js'; +import { Field, FpBindings, FqBindings } from './field.js'; +import { equivalentRecord } from './test-utils.js'; let number: ToSpec = { back: id }; let numberLessThan = (max: number): FromSpec => ({ diff --git a/src/bindings/crypto/bindings/conversion-base.ts b/src/bindings/crypto/bindings/conversion-base.ts index 9f67829df3..294482c8ac 100644 --- a/src/bindings/crypto/bindings/conversion-base.ts +++ b/src/bindings/crypto/bindings/conversion-base.ts @@ -1,13 +1,14 @@ -import { Field } from './field.js'; -import { bigintToBytes32, bytesToBigint32 } from '../bigint-helpers.js'; +import type { MlArray } from '../../../lib/ml/base.js'; import type { WasmGPallas, WasmGVesta, WasmPallasGProjective, WasmVestaGProjective, } from '../../compiled/node_bindings/plonk_wasm.cjs'; -import type { MlArray } from '../../../lib/ml/base.js'; -import { OrInfinity, Infinity } from './curve.js'; +import { bigintToBytes32, bytesToBigint32 } from '../bigint-helpers.js'; + +import { Infinity, OrInfinity } from './curve.js'; +import { Field } from './field.js'; export { fieldToRust, diff --git a/src/bindings/crypto/bindings/conversion-core.ts b/src/bindings/crypto/bindings/conversion-core.ts index 1628f3db39..ddab63e300 100644 --- a/src/bindings/crypto/bindings/conversion-core.ts +++ b/src/bindings/crypto/bindings/conversion-core.ts @@ -1,3 +1,4 @@ +import { MlArray } from '../../../lib/ml/base.js'; import type { WasmFpGate, WasmFpPolyComm, @@ -6,10 +7,8 @@ import type { WasmGPallas, WasmGVesta, } from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { OrInfinity, Gate, PolyComm, Wire } from './kimchi-types.js'; import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { MlArray } from '../../../lib/ml/base.js'; -import { mapTuple } from './util.js'; + import { WasmAffine, affineFromRust, @@ -17,6 +16,8 @@ import { fieldsFromRustFlat, fieldsToRustFlat, } from './conversion-base.js'; +import { Gate, OrInfinity, PolyComm, Wire } from './kimchi-types.js'; +import { mapTuple } from './util.js'; export { ConversionCore, diff --git a/src/bindings/crypto/bindings/conversion-oracles.ts b/src/bindings/crypto/bindings/conversion-oracles.ts index 1094c96c28..04310ae024 100644 --- a/src/bindings/crypto/bindings/conversion-oracles.ts +++ b/src/bindings/crypto/bindings/conversion-oracles.ts @@ -1,3 +1,4 @@ +import { MlOption } from '../../../lib/ml/base.js'; import type { WasmFpOracles, WasmFpRandomOracles, @@ -5,8 +6,7 @@ import type { WasmFqRandomOracles, } from '../../compiled/node_bindings/plonk_wasm.cjs'; import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { MlOption } from '../../../lib/ml/base.js'; -import { Field, Oracles, RandomOracles, ScalarChallenge } from './kimchi-types.js'; + import { fieldFromRust, fieldToRust, @@ -14,6 +14,7 @@ import { fieldsToRustFlat, maybeFieldToRust, } from './conversion-base.js'; +import { Field, Oracles, RandomOracles, ScalarChallenge } from './kimchi-types.js'; export { oraclesConversion }; diff --git a/src/bindings/crypto/bindings/conversion-proof.ts b/src/bindings/crypto/bindings/conversion-proof.ts index ee106fb940..5a73a2d0ea 100644 --- a/src/bindings/crypto/bindings/conversion-proof.ts +++ b/src/bindings/crypto/bindings/conversion-proof.ts @@ -1,46 +1,47 @@ +import { MlArray, MlOption, MlTuple } from '../../../lib/ml/base.js'; import type { WasmFpLookupCommitments, - WasmPastaFpLookupTable, WasmFpOpeningProof, WasmFpProverCommitments, WasmFpProverProof, WasmFpRuntimeTable, - WasmPastaFpRuntimeTableCfg, WasmFqLookupCommitments, WasmFqOpeningProof, WasmFqProverCommitments, - WasmPastaFqLookupTable, WasmFqProverProof, WasmFqRuntimeTable, + WasmPastaFpLookupTable, + WasmPastaFpRuntimeTableCfg, + WasmPastaFqLookupTable, WasmPastaFqRuntimeTableCfg, WasmVecVecFp, WasmVecVecFq, } from '../../compiled/node_bindings/plonk_wasm.cjs'; import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs'; + +import { + fieldFromRust, + fieldToRust, + fieldsFromRustFlat, + fieldsToRustFlat, +} from './conversion-base.js'; +import { ConversionCore, ConversionCores, mapToUint32Array, unwrap } from './conversion-core.js'; import type { + Field, + LookupCommitments, + LookupTable, + OpeningProof, OrInfinity, PointEvaluations, PolyComm, - ProverProof, - ProofWithPublic, ProofEvaluations, + ProofWithPublic, ProverCommitments, - OpeningProof, + ProverProof, RecursionChallenge, - LookupCommitments, RuntimeTable, RuntimeTableCfg, - LookupTable, - Field, } from './kimchi-types.js'; -import { MlArray, MlOption, MlTuple } from '../../../lib/ml/base.js'; -import { - fieldToRust, - fieldFromRust, - fieldsToRustFlat, - fieldsFromRustFlat, -} from './conversion-base.js'; -import { ConversionCore, ConversionCores, mapToUint32Array, unwrap } from './conversion-core.js'; export { proofConversion }; diff --git a/src/bindings/crypto/bindings/conversion-verifier-index.ts b/src/bindings/crypto/bindings/conversion-verifier-index.ts index ac4cb71821..cae3a5dcb6 100644 --- a/src/bindings/crypto/bindings/conversion-verifier-index.ts +++ b/src/bindings/crypto/bindings/conversion-verifier-index.ts @@ -1,3 +1,4 @@ +import { MlArray, MlBool, MlOption } from '../../../lib/ml/base.js'; import type { WasmFpDomain, WasmFpLookupSelectors, @@ -14,10 +15,10 @@ import type { LookupInfo as WasmLookupInfo, } from '../../compiled/node_bindings/plonk_wasm.cjs'; import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { MlBool, MlArray, MlOption } from '../../../lib/ml/base.js'; -import { Field, VerifierIndex, Domain, VerificationEvals, PolyComm } from './kimchi-types.js'; + import { fieldFromRust, fieldToRust } from './conversion-base.js'; import { ConversionCore, ConversionCores, freeOnFinalize } from './conversion-core.js'; +import { Domain, Field, PolyComm, VerificationEvals, VerifierIndex } from './kimchi-types.js'; import { Lookup, LookupInfo, LookupSelectors } from './lookup.js'; export { verifierIndexConversion }; diff --git a/src/bindings/crypto/bindings/curve.ts b/src/bindings/crypto/bindings/curve.ts index 3a11c6a2ad..ce9d20a47b 100644 --- a/src/bindings/crypto/bindings/curve.ts +++ b/src/bindings/crypto/bindings/curve.ts @@ -2,8 +2,9 @@ * TS implementation of Pasta_bindings.{Pallas, Vesta} */ import { MlPair } from '../../../lib/ml/base.js'; +import { GroupAffine, GroupProjective, Pallas, ProjectiveCurve, Vesta } from '../elliptic-curve.js'; + import { Field } from './field.js'; -import { Pallas, Vesta, ProjectiveCurve, GroupProjective, GroupAffine } from '../elliptic-curve.js'; import { withPrefix } from './util.js'; export { diff --git a/src/bindings/crypto/bindings/field.ts b/src/bindings/crypto/bindings/field.ts index 03994a63a7..a81f3ac3ef 100644 --- a/src/bindings/crypto/bindings/field.ts +++ b/src/bindings/crypto/bindings/field.ts @@ -1,15 +1,16 @@ /** * TS implementation of Pasta_bindings.{Fp, Fq} */ +import { MlBool, MlOption } from '../../../lib/ml/base.js'; import { FiniteField, Fp, Fq, mod } from '../finite-field.js'; + import { - Bigint256Bindings, Bigint256, + Bigint256Bindings, MlBytes, fromMlString, toMlStringAscii, } from './bigint256.js'; -import { MlOption, MlBool } from '../../../lib/ml/base.js'; import { withPrefix } from './util.js'; type Field = [0, bigint]; diff --git a/src/bindings/crypto/bindings/kimchi-types.ts b/src/bindings/crypto/bindings/kimchi-types.ts index ba6a7394ec..63d0cadb96 100644 --- a/src/bindings/crypto/bindings/kimchi-types.ts +++ b/src/bindings/crypto/bindings/kimchi-types.ts @@ -1,11 +1,12 @@ /** * This file is a TS representation of kimchi_types.ml */ -import type { Lookup } from './lookup.js'; import type { MlArray, MlOption, MlTuple } from '../../../lib/ml/base.js'; +import type { WasmFpSrs, WasmFqSrs } from '../../compiled/node_bindings/plonk_wasm.cjs'; + import type { OrInfinity } from './curve.js'; import type { Field } from './field.js'; -import type { WasmFpSrs, WasmFqSrs } from '../../compiled/node_bindings/plonk_wasm.cjs'; +import type { Lookup } from './lookup.js'; export { Field, diff --git a/src/bindings/crypto/bindings/srs.ts b/src/bindings/crypto/bindings/srs.ts index 9c9499b60c..2e4016798c 100644 --- a/src/bindings/crypto/bindings/srs.ts +++ b/src/bindings/crypto/bindings/srs.ts @@ -1,16 +1,17 @@ -import type { Wasm, RustConversion } from '../bindings.js'; -import type { WasmFpSrs, WasmFqSrs } from '../../compiled/node_bindings/plonk_wasm.cjs'; -import { PolyComm } from './kimchi-types.js'; +import { MlArray } from '../../../lib/ml/base.js'; import { - type CacheHeader, type Cache, + type CacheHeader, + readCache, withVersion, writeCache, - readCache, } from '../../../lib/proof-system/cache.js'; import { assert } from '../../../lib/util/errors.js'; -import { MlArray } from '../../../lib/ml/base.js'; +import type { WasmFpSrs, WasmFqSrs } from '../../compiled/node_bindings/plonk_wasm.cjs'; +import type { RustConversion, Wasm } from '../bindings.js'; + import { OrInfinity, OrInfinityJson } from './curve.js'; +import { PolyComm } from './kimchi-types.js'; export { srs, setSrsCache, unsetSrsCache }; diff --git a/src/bindings/crypto/bindings/test-utils.ts b/src/bindings/crypto/bindings/test-utils.ts index f075b4fe1d..0a672140fd 100644 --- a/src/bindings/crypto/bindings/test-utils.ts +++ b/src/bindings/crypto/bindings/test-utils.ts @@ -1,4 +1,4 @@ -import { equivalent, SpecFromFunctions } from '../../../lib/testing/equivalent.js'; +import { SpecFromFunctions, equivalent } from '../../../lib/testing/equivalent.js'; export { equivalentRecord }; diff --git a/src/bindings/crypto/bindings/vector.ts b/src/bindings/crypto/bindings/vector.ts index c7edb98e07..37e186283d 100644 --- a/src/bindings/crypto/bindings/vector.ts +++ b/src/bindings/crypto/bindings/vector.ts @@ -2,6 +2,7 @@ * TS implementation of Kimchi_bindings.FieldVectors */ import { MlArray } from '../../../lib/ml/base.js'; + import { Field } from './field.js'; import { withPrefix } from './util.js'; diff --git a/src/bindings/crypto/elliptic-curve-endomorphism.ts b/src/bindings/crypto/elliptic-curve-endomorphism.ts index a10dec4a23..6fc389dc87 100644 --- a/src/bindings/crypto/elliptic-curve-endomorphism.ts +++ b/src/bindings/crypto/elliptic-curve-endomorphism.ts @@ -1,11 +1,12 @@ import { assert } from '../../lib/util/errors.js'; + import { abs, bigIntToBits, log2, max, sign } from './bigint-helpers.js'; import { GroupAffine, GroupProjective, affineScale, - projectiveAdd, getProjectiveDouble, + projectiveAdd, projectiveFromAffine, projectiveNeg, projectiveToAffine, diff --git a/src/bindings/crypto/elliptic-curve-examples.ts b/src/bindings/crypto/elliptic-curve-examples.ts index 105e794729..d456e72746 100644 --- a/src/bindings/crypto/elliptic-curve-examples.ts +++ b/src/bindings/crypto/elliptic-curve-examples.ts @@ -1,9 +1,9 @@ -import { CurveParams, Pallas, Vesta } from './elliptic-curve.js'; +import { CurveParams as CurveParamsT, Pallas, Vesta } from './elliptic-curve.js'; import { exampleFields } from './finite-field-examples.js'; export { CurveParams }; -const secp256k1Params: CurveParams = { +const secp256k1Params: CurveParamsT = { name: 'secp256k1', modulus: exampleFields.secp256k1.modulus, order: exampleFields.secq256k1.modulus, @@ -15,7 +15,7 @@ const secp256k1Params: CurveParams = { }, }; -const secp256r1Params: CurveParams = { +const secp256r1Params: CurveParamsT = { name: 'secp256r1', modulus: exampleFields.secp256r1.modulus, order: 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551n, @@ -27,7 +27,7 @@ const secp256r1Params: CurveParams = { }, }; -const pallasParams: CurveParams = { +const pallasParams: CurveParamsT = { name: 'Pallas', modulus: Pallas.modulus, order: Pallas.order, @@ -38,7 +38,7 @@ const pallasParams: CurveParams = { endoScalar: Pallas.endoScalar, }; -const vestaParams: CurveParams = { +const vestaParams: CurveParamsT = { name: 'Vesta', modulus: Vesta.modulus, order: Vesta.order, diff --git a/src/bindings/crypto/elliptic-curve.ts b/src/bindings/crypto/elliptic-curve.ts index ed1e3eafd6..feb3540df9 100644 --- a/src/bindings/crypto/elliptic-curve.ts +++ b/src/bindings/crypto/elliptic-curve.ts @@ -1,6 +1,7 @@ import { bigIntToBits } from './bigint-helpers.js'; -import { FiniteField, Fp, createField, inverse, mod, p, q } from './finite-field.js'; import { Endomorphism } from './elliptic-curve-endomorphism.js'; +import { FiniteField, Fp, createField, inverse, mod, p, q } from './finite-field.js'; + export { Pallas, PallasAffine, diff --git a/src/bindings/crypto/elliptic-curve.unit-test.ts b/src/bindings/crypto/elliptic-curve.unit-test.ts index edd72da1f3..a1d71c6f43 100644 --- a/src/bindings/crypto/elliptic-curve.unit-test.ts +++ b/src/bindings/crypto/elliptic-curve.unit-test.ts @@ -1,8 +1,10 @@ -import { createCurveAffine, createCurveProjective, Pallas, Vesta } from './elliptic-curve.js'; -import { Fp, Fq } from './finite-field.js'; import assert from 'node:assert/strict'; -import { test, Random } from '../../lib/testing/property.js'; + +import { Random, test } from '../../lib/testing/property.js'; + import { CurveParams } from './elliptic-curve-examples.js'; +import { Pallas, Vesta, createCurveAffine, createCurveProjective } from './elliptic-curve.js'; +import { Fp, Fq } from './finite-field.js'; for (let [G, Field, Scalar] of [ [Pallas, Fp, Fq] as const, diff --git a/src/bindings/crypto/finite-field.ts b/src/bindings/crypto/finite-field.ts index a12cd24ef4..394b243838 100644 --- a/src/bindings/crypto/finite-field.ts +++ b/src/bindings/crypto/finite-field.ts @@ -1,4 +1,5 @@ import { assert } from '../../lib/util/assert.js'; + import { bytesToBigInt, log2 } from './bigint-helpers.js'; import { randomBytes } from './random.js'; diff --git a/src/bindings/crypto/finite-field.unit-test.ts b/src/bindings/crypto/finite-field.unit-test.ts index f6b8e61911..72c525025a 100644 --- a/src/bindings/crypto/finite-field.unit-test.ts +++ b/src/bindings/crypto/finite-field.unit-test.ts @@ -1,7 +1,9 @@ -import { Fp, Fq } from './finite-field.js'; import assert from 'node:assert/strict'; + import { Random, test } from '../../lib/testing/property.js'; + import { exampleFields } from './finite-field-examples.js'; +import { Fp, Fq } from './finite-field.js'; let fields = Object.values(exampleFields); diff --git a/src/bindings/crypto/glv.unit-test.ts b/src/bindings/crypto/glv.unit-test.ts index fdbec984a2..f56295660e 100644 --- a/src/bindings/crypto/glv.unit-test.ts +++ b/src/bindings/crypto/glv.unit-test.ts @@ -1,9 +1,10 @@ +import { Random, test } from '../../lib/testing/property.js'; import { assert } from '../../lib/util/errors.js'; + +import { log2 } from './bigint-helpers.js'; +import { computeGlvData, decompose } from './elliptic-curve-endomorphism.js'; import { CurveParams } from './elliptic-curve-examples.js'; import { createCurveAffine } from './elliptic-curve.js'; -import { computeGlvData, decompose } from './elliptic-curve-endomorphism.js'; -import { Random, test } from '../../lib/testing/property.js'; -import { log2 } from './bigint-helpers.js'; const Ntest = 100000; const isVerbose = false; diff --git a/src/bindings/crypto/poseidon.ts b/src/bindings/crypto/poseidon.ts index ce82fc9212..5d67c70d91 100644 --- a/src/bindings/crypto/poseidon.ts +++ b/src/bindings/crypto/poseidon.ts @@ -1,7 +1,7 @@ -import { assertPositiveInteger } from './non-negative.js'; import { poseidonParamsKimchiFp, poseidonParamsLegacyFp } from './constants.js'; -import { FiniteField, Fp } from './finite-field.js'; import { GroupMapPallas } from './elliptic-curve.js'; +import { FiniteField, Fp } from './finite-field.js'; +import { assertPositiveInteger } from './non-negative.js'; export { Poseidon, PoseidonLegacy }; diff --git a/src/bindings/crypto/poseidon.unit-test.ts b/src/bindings/crypto/poseidon.unit-test.ts index e908d4c202..e3bc1dd500 100644 --- a/src/bindings/crypto/poseidon.unit-test.ts +++ b/src/bindings/crypto/poseidon.unit-test.ts @@ -1,13 +1,15 @@ -import { Poseidon, PoseidonLegacy } from './poseidon.js'; -import { testPoseidonKimchiFp } from './test-vectors/poseidon-kimchi.js'; -import { testPoseidonLegacyFp } from './test-vectors/poseidon-legacy.js'; import { expect } from 'expect'; -import { bigIntToBytes, parseHexString32 } from './bigint-helpers.js'; -import { test, Random } from '../../lib/testing/property.js'; + import { Test } from '../../bindings.js'; -import { FieldConst } from '../../lib/provable/core/fieldvar.js'; import { MlArray } from '../../lib/ml/base.js'; +import { FieldConst } from '../../lib/provable/core/fieldvar.js'; +import { Random, test } from '../../lib/testing/property.js'; + +import { bigIntToBytes, parseHexString32 } from './bigint-helpers.js'; import { Fp } from './finite-field.js'; +import { Poseidon, PoseidonLegacy } from './poseidon.js'; +import { testPoseidonKimchiFp } from './test-vectors/poseidon-kimchi.js'; +import { testPoseidonLegacyFp } from './test-vectors/poseidon-legacy.js'; let mlTest = await Test(); diff --git a/src/bindings/crypto/random.ts b/src/bindings/crypto/random.ts index e8264a7dda..2ee1423a8a 100644 --- a/src/bindings/crypto/random.ts +++ b/src/bindings/crypto/random.ts @@ -1,4 +1,5 @@ import { randomBytes as randomBytesNode } from 'crypto'; + export { randomBytes }; function randomBytes(n: number) { diff --git a/src/bindings/js/node/node-backend.js b/src/bindings/js/node/node-backend.js index 9b844239ac..12f123fd8f 100644 --- a/src/bindings/js/node/node-backend.js +++ b/src/bindings/js/node/node-backend.js @@ -1,8 +1,10 @@ -import { isMainThread, parentPort, workerData, Worker } from 'worker_threads'; import os from 'os'; -import wasm_ from '../../compiled/_node_bindings/plonk_wasm.cjs'; import { fileURLToPath } from 'url'; +import { Worker, isMainThread, parentPort, workerData } from 'worker_threads'; + import { WithThreadPool, workers } from '../../../lib/proof-system/workers.js'; +import wasm_ from '../../compiled/_node_bindings/plonk_wasm.cjs'; + let url = import.meta.url; let filename = url !== undefined ? fileURLToPath(url) : __filename; diff --git a/src/bindings/js/web/web-backend.js b/src/bindings/js/web/web-backend.js index 0393b99c52..dd439ab3bc 100644 --- a/src/bindings/js/web/web-backend.js +++ b/src/bindings/js/web/web-backend.js @@ -1,8 +1,10 @@ -import plonkWasm from '../../../web_bindings/plonk_wasm.js'; -import { workerSpec } from './worker-spec.js'; -import { srcFromFunctionModule, inlineWorker, waitForMessage } from './worker-helpers.js'; import o1jsWebSrc from 'string:../../../web_bindings/o1js_web.bc.js'; + import { WithThreadPool, workers } from '../../../lib/proof-system/workers.js'; +import plonkWasm from '../../../web_bindings/plonk_wasm.js'; + +import { inlineWorker, srcFromFunctionModule, waitForMessage } from './worker-helpers.js'; +import { workerSpec } from './worker-spec.js'; export { initializeBindings, withThreadPool, wasm }; diff --git a/src/bindings/lib/binable.ts b/src/bindings/lib/binable.ts index f350268128..752f8582f8 100644 --- a/src/bindings/lib/binable.ts +++ b/src/bindings/lib/binable.ts @@ -1,10 +1,11 @@ // generic encoding infrastructure +import { bigIntToBytes, bytesToBigInt } from '../crypto/bigint-helpers.js'; import { - assertNonNegativeInteger, NonNegativeInteger, PositiveInteger, + assertNonNegativeInteger, } from '../crypto/non-negative.js'; -import { bytesToBigInt, bigIntToBytes } from '../crypto/bigint-helpers.js'; + import { GenericSignableField } from './generic.js'; export { diff --git a/src/bindings/lib/binable.unit-test.ts b/src/bindings/lib/binable.unit-test.ts index ffd538c899..64d5d9facc 100644 --- a/src/bindings/lib/binable.unit-test.ts +++ b/src/bindings/lib/binable.unit-test.ts @@ -1,5 +1,9 @@ import { expect } from 'expect'; -import { test, Random } from '../../lib/testing/property.js'; + +import { Random, test } from '../../lib/testing/property.js'; +import { PublicKey, Scalar } from '../../mina-signer/src/curve-bigint.js'; +import { Bool, Field, UInt64 } from '../../mina-signer/src/field-bigint.js'; + import { Binable, BinableString, @@ -10,8 +14,6 @@ import { withCheck, withVersionNumber, } from './binable.js'; -import { PublicKey, Scalar } from '../../mina-signer/src/curve-bigint.js'; -import { Bool, Field, UInt64 } from '../../mina-signer/src/field-bigint.js'; // uint diff --git a/src/bindings/lib/encoding.ts b/src/bindings/lib/encoding.ts index 13739da75b..34a57b4a51 100644 --- a/src/bindings/lib/encoding.ts +++ b/src/bindings/lib/encoding.ts @@ -1,5 +1,5 @@ -import { bytesToBigInt, changeBase } from '../crypto/bigint-helpers.js'; import { Field } from '../../lib/provable/wrapped.js'; +import { bytesToBigInt, changeBase } from '../crypto/bigint-helpers.js'; export { stringToFields, stringFromFields, bytesToFields, bytesFromFields, Bijective }; diff --git a/src/bindings/lib/provable-generic.ts b/src/bindings/lib/provable-generic.ts index ae9ce58acc..6f4eaa86e2 100644 --- a/src/bindings/lib/provable-generic.ts +++ b/src/bindings/lib/provable-generic.ts @@ -1,9 +1,9 @@ import { GenericHashInput, GenericProvable, - GenericProvablePure, GenericProvableExtended, GenericProvableExtendedPure, + GenericProvablePure, GenericSignable, } from './generic.js'; diff --git a/src/bindings/mina-transaction/gen/v1/transaction-bigint.ts b/src/bindings/mina-transaction/gen/v1/transaction-bigint.ts index 7a23e70235..96ce5d3065 100644 --- a/src/bindings/mina-transaction/gen/v1/transaction-bigint.ts +++ b/src/bindings/mina-transaction/gen/v1/transaction-bigint.ts @@ -1,30 +1,30 @@ // @generated this file is auto-generated - don't edit it directly - +import { GenericLayout, SignableFromLayout } from '../../../lib/from-layout.js'; +import { GenericSignable } from '../../../lib/generic.js'; import { - PublicKey, - UInt64, - UInt32, - TokenId, - Field, + ActionState, + Actions, AuthRequired, BalanceChange, - Sign, Bool, - TransactionVersion, - ZkappUri, - TokenSymbol, - StateHash, Events, - Actions, - ActionState, + Field, MayUseToken, - VerificationKeyHash, + PublicKey, ReceiptChainHash, + Sign, + StateHash, + TokenId, + TokenSymbol, + TransactionVersion, + UInt32, + UInt64, + VerificationKeyHash, + ZkappUri, } from '../../v1/transaction-leaves-bigint.js'; -import { GenericSignable } from '../../../lib/generic.js'; -import { SignableFromLayout, GenericLayout } from '../../../lib/from-layout.js'; -import * as Json from './transaction-json.js'; + import { jsLayout } from './js-layout.js'; +import * as Json from './transaction-json.js'; export { customTypes, ZkappCommand, AccountUpdate, Account }; export { Json }; diff --git a/src/bindings/mina-transaction/gen/v1/transaction-json.ts b/src/bindings/mina-transaction/gen/v1/transaction-json.ts index c3ed04cbbe..00ae9648f6 100644 --- a/src/bindings/mina-transaction/gen/v1/transaction-json.ts +++ b/src/bindings/mina-transaction/gen/v1/transaction-json.ts @@ -1,15 +1,14 @@ // @generated this file is auto-generated - don't edit it directly - import { - PublicKey, - UInt64, - UInt32, - TokenId, - Field, AuthRequired, BalanceChange, - Sign, Bool, + Field, + PublicKey, + Sign, + TokenId, + UInt32, + UInt64, } from '../../v1/transaction-leaves-json.js'; export { ZkappCommand, AccountUpdate, Account }; diff --git a/src/bindings/mina-transaction/gen/v1/transaction.ts b/src/bindings/mina-transaction/gen/v1/transaction.ts index cb122d73d0..9b2fa20a3f 100644 --- a/src/bindings/mina-transaction/gen/v1/transaction.ts +++ b/src/bindings/mina-transaction/gen/v1/transaction.ts @@ -1,31 +1,31 @@ // @generated this file is auto-generated - don't edit it directly - +import { GenericLayout, ProvableFromLayout } from '../../../lib/from-layout.js'; +import { GenericProvableExtended } from '../../../lib/generic.js'; import { - PublicKey, - UInt64, - UInt32, - TokenId, - Field, + ActionState, + Actions, AuthRequired, BalanceChange, - Sign, Bool, - TransactionVersion, - ZkappUri, - TokenSymbol, - StateHash, Events, - Actions, - ActionState, + Field, MayUseToken, - VerificationKeyHash, + PublicKey, ReceiptChainHash, + Sign, + StateHash, + TokenId, + TokenSymbol, + TransactionVersion, + UInt32, + UInt64, + VerificationKeyHash, + ZkappUri, } from '../../v1/transaction-leaves.js'; -import { GenericProvableExtended } from '../../../lib/generic.js'; -import { ProvableFromLayout, GenericLayout } from '../../../lib/from-layout.js'; -import * as Json from './transaction-json.js'; -import * as Value from './transaction-bigint.js'; + import { jsLayout } from './js-layout.js'; +import * as Value from './transaction-bigint.js'; +import * as Json from './transaction-json.js'; export { customTypes, ZkappCommand, AccountUpdate, Account }; export { Json }; diff --git a/src/bindings/mina-transaction/gen/v2/js-layout.ts b/src/bindings/mina-transaction/gen/v2/js-layout.ts index d341f96928..4cd3b0bf96 100644 --- a/src/bindings/mina-transaction/gen/v2/js-layout.ts +++ b/src/bindings/mina-transaction/gen/v2/js-layout.ts @@ -1,5 +1,4 @@ // @generated this file is auto-generated - don't edit it directly -import { BindingsType } from '../../v2/schema.js'; import { Actions, AuthRequired, @@ -18,6 +17,8 @@ import { UInt64, ZkappUri, } from '../../v2/leaves.js'; +import { BindingsType } from '../../v2/schema.js'; + export { Types, ZkappCommand, diff --git a/src/bindings/mina-transaction/v1/derived-leaves.ts b/src/bindings/mina-transaction/v1/derived-leaves.ts index e10a390e78..27f3202765 100644 --- a/src/bindings/mina-transaction/v1/derived-leaves.ts +++ b/src/bindings/mina-transaction/v1/derived-leaves.ts @@ -1,3 +1,13 @@ +import { dataAsHash } from '../../../lib/mina/v1/events.js'; +import { HashHelpers } from '../../../lib/provable/crypto/hash-generic.js'; +import { Base58, fieldEncodings } from '../../../lib/util/base58.js'; +import { prefixes } from '../../crypto/constants.js'; +import { + bytesToBits, + prefixToField, + stringLengthInBytes, + stringToBytes, +} from '../../lib/binable.js'; import { GenericBool, GenericField, @@ -8,16 +18,6 @@ import { } from '../../lib/generic.js'; import { createDerivers } from '../../lib/provable-generic.js'; import * as Json from '../gen/v1/transaction-json.js'; -import { - bytesToBits, - prefixToField, - stringLengthInBytes, - stringToBytes, -} from '../../lib/binable.js'; -import { Base58, fieldEncodings } from '../../../lib/util/base58.js'; -import { dataAsHash } from '../../../lib/mina/v1/events.js'; -import { HashHelpers } from '../../../lib/provable/crypto/hash-generic.js'; -import { prefixes } from '../../crypto/constants.js'; export { derivedLeafTypes, derivedLeafTypesSignable, tokenSymbolLength }; diff --git a/src/bindings/mina-transaction/v1/transaction-leaves-bigint.ts b/src/bindings/mina-transaction/v1/transaction-leaves-bigint.ts index 1d01aadb36..0f5a2429e3 100644 --- a/src/bindings/mina-transaction/v1/transaction-leaves-bigint.ts +++ b/src/bindings/mina-transaction/v1/transaction-leaves-bigint.ts @@ -1,10 +1,11 @@ -import { Field, Bool, UInt32, UInt64, Sign } from '../../../mina-signer/src/field-bigint.js'; -import { PublicKey } from '../../../mina-signer/src/curve-bigint.js'; -import { derivedLeafTypesSignable } from './derived-leaves.js'; import { createEvents } from '../../../lib/mina/v1/events.js'; -import { Poseidon, HashHelpers, packToFields } from '../../../mina-signer/src/poseidon-bigint.js'; -import { mocks, protocolVersions } from '../../crypto/constants.js'; +import { PublicKey } from '../../../mina-signer/src/curve-bigint.js'; import { signable } from '../../../mina-signer/src/derivers-bigint.js'; +import { Bool, Field, Sign, UInt32, UInt64 } from '../../../mina-signer/src/field-bigint.js'; +import { HashHelpers, Poseidon, packToFields } from '../../../mina-signer/src/poseidon-bigint.js'; +import { mocks, protocolVersions } from '../../crypto/constants.js'; + +import { derivedLeafTypesSignable } from './derived-leaves.js'; export { PublicKey, diff --git a/src/bindings/mina-transaction/v1/transaction-leaves.ts b/src/bindings/mina-transaction/v1/transaction-leaves.ts index 03cda60ae0..1ae1bb1a45 100644 --- a/src/bindings/mina-transaction/v1/transaction-leaves.ts +++ b/src/bindings/mina-transaction/v1/transaction-leaves.ts @@ -1,17 +1,18 @@ -import { Field, Bool } from '../../../lib/provable/wrapped.js'; -import { UInt32, UInt64, Sign, Int64 } from '../../../lib/provable/int.js'; -import { PublicKey } from '../../../lib/provable/crypto/signature.js'; -import { derivedLeafTypes } from './derived-leaves.js'; import { createEvents } from '../../../lib/mina/v1/events.js'; import { - Poseidon, HashHelpers, - packToFields, + Poseidon, emptyHashWithPrefix, + packToFields, } from '../../../lib/provable/crypto/poseidon.js'; +import { PublicKey } from '../../../lib/provable/crypto/signature.js'; +import { Int64, Sign, UInt32, UInt64 } from '../../../lib/provable/int.js'; import { provable } from '../../../lib/provable/types/provable-derivers.js'; +import { Bool, Field } from '../../../lib/provable/wrapped.js'; import { mocks, protocolVersions } from '../../crypto/constants.js'; +import { derivedLeafTypes } from './derived-leaves.js'; + export { PublicKey, Field, Bool, AuthRequired, UInt64, UInt32, Sign, BalanceChange, TokenId }; export { diff --git a/src/bindings/mina-transaction/v2/leaves.ts b/src/bindings/mina-transaction/v2/leaves.ts index 38b013529f..e61362992f 100644 --- a/src/bindings/mina-transaction/v2/leaves.ts +++ b/src/bindings/mina-transaction/v2/leaves.ts @@ -1,15 +1,15 @@ // NOTE: these leaves are currently backwards compatible with the old encoding format, but the // auxiliary components may change format in the future - -import { FieldsDecoder, ProvableSerializable } from './util.js'; -import { versionBytes } from '../../crypto/constants.js'; -import { withVersionNumber } from '../../lib/binable.js'; import { Bool } from '../../../lib/provable/bool.js'; import { Field } from '../../../lib/provable/field.js'; import { Provable } from '../../../lib/provable/provable.js'; import { HashInput } from '../../../lib/provable/types/provable-derivers.js'; import { Struct } from '../../../lib/provable/types/struct.js'; import { toBase58Check } from '../../../lib/util/base58.js'; +import { versionBytes } from '../../crypto/constants.js'; +import { withVersionNumber } from '../../lib/binable.js'; + +import { FieldsDecoder, ProvableSerializable } from './util.js'; export { Bool } from '../../../lib/provable/bool.js'; export { Field } from '../../../lib/provable/field.js'; diff --git a/src/bindings/mina-transaction/v2/schema.ts b/src/bindings/mina-transaction/v2/schema.ts index ec26ed3cfa..d9b853e339 100644 --- a/src/bindings/mina-transaction/v2/schema.ts +++ b/src/bindings/mina-transaction/v2/schema.ts @@ -1,9 +1,10 @@ -import * as BindingsLeaves from './leaves.js'; -import { FieldsDecoder, ProvableSerializable } from './util.js'; -import { versionBytes } from '../../crypto/constants.js'; import { Provable } from '../../../lib/provable/provable.js'; import { HashInput } from '../../../lib/provable/types/provable-derivers.js'; import { toBase58Check } from '../../../lib/util/base58.js'; +import { versionBytes } from '../../crypto/constants.js'; + +import * as BindingsLeaves from './leaves.js'; +import { FieldsDecoder, ProvableSerializable } from './util.js'; const JsArray = Array; diff --git a/src/build/build-example.js b/src/build/build-example.js index 44a09c7e88..07d3754829 100644 --- a/src/build/build-example.js +++ b/src/build/build-example.js @@ -1,8 +1,8 @@ +import esbuild from 'esbuild'; import fs from 'fs/promises'; +import { platform } from 'node:process'; import path from 'path'; import ts from 'typescript'; -import esbuild from 'esbuild'; -import { platform } from 'node:process'; export { buildAndImport, build, buildOne }; diff --git a/src/build/build-node.js b/src/build/build-node.js index 06cb4867e4..c13c40191d 100644 --- a/src/build/build-node.js +++ b/src/build/build-node.js @@ -1,8 +1,8 @@ +import esbuild from 'esbuild'; +import minimist from 'minimist'; import path from 'node:path'; import { platform } from 'node:process'; import { fileURLToPath } from 'node:url'; -import esbuild from 'esbuild'; -import minimist from 'minimist'; let { bindings = './src/bindings/compiled/node_bindings/' } = minimist(process.argv.slice(2)); diff --git a/src/build/build-web.js b/src/build/build-web.js index 0116f11709..536ab296d6 100644 --- a/src/build/build-web.js +++ b/src/build/build-web.js @@ -1,10 +1,10 @@ import esbuild from 'esbuild'; import fse, { move } from 'fs-extra'; -import { readFile, writeFile, unlink } from 'node:fs/promises'; +import glob from 'glob'; +import { exec } from 'node:child_process'; +import { readFile, unlink, writeFile } from 'node:fs/promises'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { exec } from 'node:child_process'; -import glob from 'glob'; export { buildWeb }; diff --git a/src/build/js-layout-to-types-v2.mjs b/src/build/js-layout-to-types-v2.mjs index d2d6847494..73864a6038 100644 --- a/src/build/js-layout-to-types-v2.mjs +++ b/src/build/js-layout-to-types-v2.mjs @@ -1,5 +1,4 @@ // TODO: refactor hack - import assert from 'node:assert'; import fs from 'node:fs/promises'; diff --git a/src/build/run.js b/src/build/run.js index 7902f1ccdf..20320621c9 100755 --- a/src/build/run.js +++ b/src/build/run.js @@ -1,5 +1,6 @@ #!/usr/bin/env node import minimist from 'minimist'; + import { buildAndImport, buildOne } from './build-example.js'; let { diff --git a/src/examples/api-exploration.ts b/src/examples/api-exploration.ts index 6ed949a862..337e58eb67 100644 --- a/src/examples/api-exploration.ts +++ b/src/examples/api-exploration.ts @@ -1,13 +1,13 @@ import { - Field, Bool, + Field, Group, - Scalar, + Int64, PrivateKey, + Provable, PublicKey, + Scalar, Signature, - Int64, - Provable, Struct, } from 'o1js'; diff --git a/src/examples/benchmarks/hash-witness.ts b/src/examples/benchmarks/hash-witness.ts index 69f5107a33..6e95592d17 100644 --- a/src/examples/benchmarks/hash-witness.ts +++ b/src/examples/benchmarks/hash-witness.ts @@ -1,7 +1,8 @@ /** * benchmark witness generation for an all-mul circuit */ -import { Field, Provable, Poseidon } from 'o1js'; +import { Field, Poseidon, Provable } from 'o1js'; + import { tic, toc } from '../utils/tic-toc.js'; // parameters diff --git a/src/examples/benchmarks/keccak-witness.ts b/src/examples/benchmarks/keccak-witness.ts index f37c16893f..a67fc1dd7e 100644 --- a/src/examples/benchmarks/keccak-witness.ts +++ b/src/examples/benchmarks/keccak-witness.ts @@ -1,4 +1,4 @@ -import { Hash, Bytes, Provable } from 'o1js'; +import { Bytes, Hash, Provable } from 'o1js'; let Bytes32 = Bytes(32); diff --git a/src/examples/benchmarks/mul-web.ts b/src/examples/benchmarks/mul-web.ts index 48525f1346..cfc7fc0871 100644 --- a/src/examples/benchmarks/mul-web.ts +++ b/src/examples/benchmarks/mul-web.ts @@ -1,7 +1,8 @@ /** * benchmark a circuit filled with generic gates */ -import { Circuit, Field, Provable, circuitMain, ZkProgram } from 'o1js'; +import { Circuit, Field, Provable, ZkProgram, circuitMain } from 'o1js'; + import { tic, toc } from '../utils/tic-toc.js'; // parameters diff --git a/src/examples/benchmarks/mul-witness.ts b/src/examples/benchmarks/mul-witness.ts index 947360cbd3..3a661bea3f 100644 --- a/src/examples/benchmarks/mul-witness.ts +++ b/src/examples/benchmarks/mul-witness.ts @@ -2,6 +2,7 @@ * benchmark witness generation for an all-mul circuit */ import { Field, Provable } from 'o1js'; + import { tic, toc } from '../utils/tic-toc.js'; // parameters diff --git a/src/examples/benchmarks/mul.ts b/src/examples/benchmarks/mul.ts index 5fbced7a0d..45d468af42 100644 --- a/src/examples/benchmarks/mul.ts +++ b/src/examples/benchmarks/mul.ts @@ -1,7 +1,8 @@ /** * benchmark a circuit filled with generic gates */ -import { Circuit, Field, Provable, circuitMain, ZkProgram } from 'o1js'; +import { Circuit, Field, Provable, ZkProgram, circuitMain } from 'o1js'; + import { tic, toc } from '../utils/tic-toc.node.js'; // parameters diff --git a/src/examples/chaining-tx-methods.ts b/src/examples/chaining-tx-methods.ts index 36631dd245..85bcf1f95d 100644 --- a/src/examples/chaining-tx-methods.ts +++ b/src/examples/chaining-tx-methods.ts @@ -1,13 +1,13 @@ import { - state, - State, - method, - UInt64, + AccountUpdate, + Mina, PrivateKey, SmartContract, - Mina, - AccountUpdate, + State, TransactionPromise, + UInt64, + method, + state, } from 'o1js'; class SimpleZkapp extends SmartContract { diff --git a/src/examples/circuit-string.ts b/src/examples/circuit-string.ts index 2276bc85bf..e621a4f551 100644 --- a/src/examples/circuit-string.ts +++ b/src/examples/circuit-string.ts @@ -1,5 +1,5 @@ -import { CircuitString, SmartContract, method, Mina, PrivateKey } from 'o1js'; import * as assert from 'assert/strict'; +import { CircuitString, Mina, PrivateKey, SmartContract, method } from 'o1js'; // circuit which tests a couple of string features class MyContract extends SmartContract { diff --git a/src/examples/circuit/ecdsa.ts b/src/examples/circuit/ecdsa.ts index 9e67fd2edf..23ed304125 100644 --- a/src/examples/circuit/ecdsa.ts +++ b/src/examples/circuit/ecdsa.ts @@ -1,12 +1,12 @@ import { + Bytes, Circuit, - circuitMain, - public_, Crypto, - createForeignCurve, - Bytes, assert, + circuitMain, createEcdsa, + createForeignCurve, + public_, } from 'o1js'; export { Secp256k1, Ecdsa, Bytes32, Reserves }; diff --git a/src/examples/circuit/preimage.ts b/src/examples/circuit/preimage.ts index 22b3099225..5f76201b01 100644 --- a/src/examples/circuit/preimage.ts +++ b/src/examples/circuit/preimage.ts @@ -1,4 +1,4 @@ -import { Poseidon, Field, Circuit, circuitMain, public_ } from 'o1js'; +import { Circuit, Field, Poseidon, circuitMain, public_ } from 'o1js'; /** * Public input: a hash value h diff --git a/src/examples/circuit/root.ts b/src/examples/circuit/root.ts index 15ab297ee4..69b407b77f 100644 --- a/src/examples/circuit/root.ts +++ b/src/examples/circuit/root.ts @@ -1,4 +1,4 @@ -import { Field, Circuit, circuitMain, public_, Gadgets } from 'o1js'; +import { Circuit, Field, Gadgets, circuitMain, public_ } from 'o1js'; /** * Public input: a field element x diff --git a/src/examples/crypto/bigint.ts b/src/examples/crypto/bigint.ts index 290aea4e60..abf8454e04 100644 --- a/src/examples/crypto/bigint.ts +++ b/src/examples/crypto/bigint.ts @@ -1,4 +1,4 @@ -import { Experimental, method, Provable, SmartContract, state, State } from 'o1js'; +import { Experimental, Provable, SmartContract, State, method, state } from 'o1js'; const { createProvableBigInt } = Experimental; diff --git a/src/examples/crypto/blake2b/run.ts b/src/examples/crypto/blake2b/run.ts index 6719f0d8d0..0e14230a6f 100644 --- a/src/examples/crypto/blake2b/run.ts +++ b/src/examples/crypto/blake2b/run.ts @@ -1,4 +1,4 @@ -import { Bytes12, BLAKE2BProgram } from './blake2b.js'; +import { BLAKE2BProgram, Bytes12 } from './blake2b.js'; console.time('compile'); await BLAKE2BProgram.compile(); diff --git a/src/examples/crypto/ecdsa/ecdsa.ts b/src/examples/crypto/ecdsa/ecdsa.ts index 0e17ad2e8d..506ca09fdd 100644 --- a/src/examples/crypto/ecdsa/ecdsa.ts +++ b/src/examples/crypto/ecdsa/ecdsa.ts @@ -1,4 +1,4 @@ -import { ZkProgram, Crypto, createEcdsa, createForeignCurve, Bool, Bytes, Hash } from 'o1js'; +import { Bool, Bytes, Crypto, Hash, ZkProgram, createEcdsa, createForeignCurve } from 'o1js'; export { keccakAndEcdsa, ecdsa, Secp256k1, Ecdsa, Bytes32, ecdsaEthers }; diff --git a/src/examples/crypto/ecdsa/run.ts b/src/examples/crypto/ecdsa/run.ts index 166f9373e4..4f7a6fd617 100644 --- a/src/examples/crypto/ecdsa/run.ts +++ b/src/examples/crypto/ecdsa/run.ts @@ -1,6 +1,7 @@ -import { Secp256k1, Ecdsa, keccakAndEcdsa, ecdsa, ecdsaEthers, Bytes32 } from './ecdsa.js'; import assert from 'assert'; +import { Bytes32, Ecdsa, Secp256k1, ecdsa, ecdsaEthers, keccakAndEcdsa } from './ecdsa.js'; + // create an example ecdsa signature let privateKey = Secp256k1.Scalar.random(); diff --git a/src/examples/crypto/foreign-field.ts b/src/examples/crypto/foreign-field.ts index 0b323b961f..bdcc3c55e7 100644 --- a/src/examples/crypto/foreign-field.ts +++ b/src/examples/crypto/foreign-field.ts @@ -6,15 +6,15 @@ */ import assert from 'assert'; import { - createForeignField, AlmostForeignField, CanonicalForeignField, + Provable, Scalar, SmartContract, + State, + createForeignField, method, - Provable, state, - State, } from 'o1js'; // Let's create a small finite field: F_17 diff --git a/src/examples/crypto/rsa/run.ts b/src/examples/crypto/rsa/run.ts index 0b1011b74e..50ef61b8c9 100644 --- a/src/examples/crypto/rsa/run.ts +++ b/src/examples/crypto/rsa/run.ts @@ -1,6 +1,7 @@ import { ZkProgram } from 'o1js'; + import { Bigint2048, rsaVerify65537 } from './rsa.js'; -import { sha256Bigint, generateRsaParams, rsaSign } from './utils.js'; +import { generateRsaParams, rsaSign, sha256Bigint } from './utils.js'; let rsaZkProgram = ZkProgram({ name: 'rsa-verify', diff --git a/src/examples/crypto/rsa/test.ts b/src/examples/crypto/rsa/test.ts index c7f3d8d287..d694531008 100644 --- a/src/examples/crypto/rsa/test.ts +++ b/src/examples/crypto/rsa/test.ts @@ -1,7 +1,8 @@ -import { Bigint2048, rsaVerify65537 } from './rsa.js'; -import { sha256Bigint, generateRsaParams, rsaSign, randomPrime } from './utils.js'; import { expect } from 'expect'; -import { it, describe } from 'node:test'; +import { describe, it } from 'node:test'; + +import { Bigint2048, rsaVerify65537 } from './rsa.js'; +import { generateRsaParams, randomPrime, rsaSign, sha256Bigint } from './utils.js'; describe('RSA65537 verification tests', () => { it('should accept a simple RSA signature', () => { diff --git a/src/examples/encoding-bijective.ts b/src/examples/encoding-bijective.ts index 75658e115e..77975b95a7 100644 --- a/src/examples/encoding-bijective.ts +++ b/src/examples/encoding-bijective.ts @@ -1,4 +1,4 @@ -import { Field, Encoding } from 'o1js'; +import { Encoding, Field } from 'o1js'; let n = 1000; diff --git a/src/examples/encryption.ts b/src/examples/encryption.ts index 7c2325998b..ef1a3af006 100644 --- a/src/examples/encryption.ts +++ b/src/examples/encryption.ts @@ -1,5 +1,5 @@ import assert from 'assert'; -import { Bytes, PrivateKey, initializeBindings, Encryption, Encoding } from 'o1js'; +import { Bytes, Encoding, Encryption, PrivateKey, initializeBindings } from 'o1js'; await initializeBindings(); diff --git a/src/examples/fetch.ts b/src/examples/fetch.ts index b10b5925f3..2222dccf7e 100644 --- a/src/examples/fetch.ts +++ b/src/examples/fetch.ts @@ -1,4 +1,4 @@ -import { fetchAccount, setGraphqlEndpoints, fetchLastBlock, PublicKey, Types } from 'o1js'; +import { PublicKey, Types, fetchAccount, fetchLastBlock, setGraphqlEndpoints } from 'o1js'; setGraphqlEndpoints(['https://api.minascan.io/node/devnet/v1/graphql']); diff --git a/src/examples/internals/advanced-provable-types.ts b/src/examples/internals/advanced-provable-types.ts index 1ad79fa06a..bfbec3434d 100644 --- a/src/examples/internals/advanced-provable-types.ts +++ b/src/examples/internals/advanced-provable-types.ts @@ -3,8 +3,8 @@ * complex type: `AccountUpdate`. */ import assert from 'assert/strict'; -import { AccountUpdate, PrivateKey, Provable, Empty, ProvableExtended } from 'o1js'; import { expect } from 'expect'; +import { AccountUpdate, Empty, PrivateKey, Provable, ProvableExtended } from 'o1js'; /** * Example of a complex provable type: `AccountUpdate` diff --git a/src/examples/matrix-mul.ts b/src/examples/matrix-mul.ts index 8b9ee39412..2f09ecc5a8 100644 --- a/src/examples/matrix-mul.ts +++ b/src/examples/matrix-mul.ts @@ -1,4 +1,4 @@ -import { Field, provable, Provable } from 'o1js'; +import { Field, Provable, provable } from 'o1js'; // there are two ways of specifying an n*m matrix diff --git a/src/examples/nullifier.ts b/src/examples/nullifier.ts index 59710bc29d..94a1595742 100644 --- a/src/examples/nullifier.ts +++ b/src/examples/nullifier.ts @@ -1,15 +1,15 @@ import { - Nullifier, + AccountUpdate, Field, - SmartContract, - state, - State, - method, MerkleMap, MerkleMapWitness, Mina, - AccountUpdate, + Nullifier, Provable, + SmartContract, + State, + method, + state, } from 'o1js'; class PayoutOnlyOnce extends SmartContract { diff --git a/src/examples/plain-html/server.js b/src/examples/plain-html/server.js index dc7679626c..b9b2fd5ce9 100644 --- a/src/examples/plain-html/server.js +++ b/src/examples/plain-html/server.js @@ -1,6 +1,6 @@ import fs from 'node:fs/promises'; -import path from 'node:path'; import http from 'node:http'; +import path from 'node:path'; const port = 8000; const defaultHeaders = { diff --git a/src/examples/simple-zkapp-berkeley.ts b/src/examples/simple-zkapp-berkeley.ts index c9e7c79565..7b64d52b0a 100644 --- a/src/examples/simple-zkapp-berkeley.ts +++ b/src/examples/simple-zkapp-berkeley.ts @@ -6,17 +6,16 @@ * -) if the account doesn't exist or is not a zkapp account yet, deploy a zkapp to it and initialize on-chain state * -) if the zkapp is already deployed, send a state-updating transaction which proves execution of the "update" method */ - import { + AccountUpdate, Field, - state, - State, - method, + Mina, PrivateKey, SmartContract, - Mina, - AccountUpdate, + State, fetchAccount, + method, + state, } from 'o1js'; // a very simple SmartContract diff --git a/src/examples/simple-zkapp.js b/src/examples/simple-zkapp.js index e71896f1a8..eebb96aa76 100644 --- a/src/examples/simple-zkapp.js +++ b/src/examples/simple-zkapp.js @@ -4,13 +4,13 @@ * Decorators `@method` and `@state` are replaced by `declareState` and `declareMethods`. */ import { + AccountUpdate, Field, - State, - SmartContract, Mina, - AccountUpdate, - declareState, + SmartContract, + State, declareMethods, + declareState, } from 'o1js'; class Updater extends SmartContract { diff --git a/src/examples/simple-zkapp.ts b/src/examples/simple-zkapp.ts index ddde03480f..90ff6248ad 100644 --- a/src/examples/simple-zkapp.ts +++ b/src/examples/simple-zkapp.ts @@ -1,16 +1,17 @@ import { - Field, - state, - State, - method, - UInt64, - PrivateKey, - SmartContract, - Mina, AccountUpdate, Bool, + Field, + Mina, + PrivateKey, PublicKey, + SmartContract, + State, + UInt64, + method, + state, } from 'o1js'; + import { getProfiler } from './utils/profiler.js'; const doProofs = true; diff --git a/src/examples/simple-zkapp.web.ts b/src/examples/simple-zkapp.web.ts index 1b41a69576..aa50b555eb 100644 --- a/src/examples/simple-zkapp.web.ts +++ b/src/examples/simple-zkapp.web.ts @@ -1,15 +1,15 @@ import { - Field, - state, - State, - method, - UInt64, - PrivateKey, - SmartContract, - Mina, AccountUpdate, Bool, + Field, + Mina, + PrivateKey, PublicKey, + SmartContract, + State, + UInt64, + method, + state, } from 'o1js'; const doProofs = true; diff --git a/src/examples/v2/fund-transfer.ts b/src/examples/v2/fund-transfer.ts index 891b03e97d..edac355c8e 100644 --- a/src/examples/v2/fund-transfer.ts +++ b/src/examples/v2/fund-transfer.ts @@ -1,4 +1,4 @@ -import { Bool, Experimental, Int64, PrivateKey, PublicKey, sendZkapp, UInt32, UInt64 } from 'o1js'; +import { Bool, Experimental, Int64, PrivateKey, PublicKey, UInt32, UInt64, sendZkapp } from 'o1js'; const { ZkappCommand, diff --git a/src/examples/zkapps/composability.ts b/src/examples/zkapps/composability.ts index d57afef15c..492e810c51 100644 --- a/src/examples/zkapps/composability.ts +++ b/src/examples/zkapps/composability.ts @@ -1,7 +1,8 @@ /** * zkApps composability */ -import { Field, method, Mina, AccountUpdate, SmartContract, state, State } from 'o1js'; +import { AccountUpdate, Field, Mina, SmartContract, State, method, state } from 'o1js'; + import { getProfiler } from '../utils/profiler.js'; const doProofs = true; diff --git a/src/examples/zkapps/dex/dex.ts b/src/examples/zkapps/dex/dex.ts index 3b3a9a80c3..43217e2d1f 100644 --- a/src/examples/zkapps/dex/dex.ts +++ b/src/examples/zkapps/dex/dex.ts @@ -1,6 +1,8 @@ import { Account, AccountUpdate, + AccountUpdateForest, + TokenContract as BaseTokenContract, Bool, Mina, PrivateKey, @@ -14,8 +16,6 @@ import { UInt64, method, state, - TokenContract as BaseTokenContract, - AccountUpdateForest, } from 'o1js'; export { TokenContract, addresses, createDex, keys, randomAccounts, tokenIds }; diff --git a/src/examples/zkapps/dex/erc20.ts b/src/examples/zkapps/dex/erc20.ts index efe112ba97..5b3ba3f7a6 100644 --- a/src/examples/zkapps/dex/erc20.ts +++ b/src/examples/zkapps/dex/erc20.ts @@ -1,18 +1,18 @@ import { - ProvablePure, + AccountUpdate, + AccountUpdateForest, Bool, CircuitString, DeployArgs, Field, - method, - AccountUpdate, - PublicKey, - UInt64, - Permissions, Mina, - TokenContract, - AccountUpdateForest, + Permissions, + ProvablePure, + PublicKey, Struct, + TokenContract, + UInt64, + method, } from 'o1js'; export { Erc20Like, TrivialCoin }; diff --git a/src/examples/zkapps/dex/happy-path-with-actions.ts b/src/examples/zkapps/dex/happy-path-with-actions.ts index 1d38ffb9a7..d2f0789475 100644 --- a/src/examples/zkapps/dex/happy-path-with-actions.ts +++ b/src/examples/zkapps/dex/happy-path-with-actions.ts @@ -1,6 +1,8 @@ import { expect } from 'expect'; import { AccountUpdate, Mina, UInt64 } from 'o1js'; + import { tic, toc } from '../../utils/tic-toc.node.js'; + import { Dex, DexTokenHolder, diff --git a/src/examples/zkapps/dex/happy-path-with-proofs.ts b/src/examples/zkapps/dex/happy-path-with-proofs.ts index 1a53731b65..e7ce81e7d3 100644 --- a/src/examples/zkapps/dex/happy-path-with-proofs.ts +++ b/src/examples/zkapps/dex/happy-path-with-proofs.ts @@ -1,7 +1,9 @@ import { expect } from 'expect'; import { AccountUpdate, Mina, UInt64 } from 'o1js'; + import { getProfiler } from '../../utils/profiler.js'; import { tic, toc } from '../../utils/tic-toc.node.js'; + import { TokenContract, addresses, createDex, keys, tokenIds } from './dex.js'; const TokenProfiler = getProfiler('Token with Proofs'); diff --git a/src/examples/zkapps/dex/run-live.ts b/src/examples/zkapps/dex/run-live.ts index 0ac9785ce5..9375158953 100644 --- a/src/examples/zkapps/dex/run-live.ts +++ b/src/examples/zkapps/dex/run-live.ts @@ -1,7 +1,9 @@ import { expect } from 'expect'; import { AccountUpdate, Lightnet, Mina, PrivateKey, UInt64, fetchAccount } from 'o1js'; import os from 'os'; + import { tic, toc } from '../../utils/tic-toc.node.js'; + import { Dex, DexTokenHolder, addresses, keys, tokenIds } from './dex-with-actions.js'; import { TrivialCoin as TokenContract } from './erc20.js'; diff --git a/src/examples/zkapps/dex/run.ts b/src/examples/zkapps/dex/run.ts index 70c869ce31..5f2218bc2d 100644 --- a/src/examples/zkapps/dex/run.ts +++ b/src/examples/zkapps/dex/run.ts @@ -1,6 +1,8 @@ import { expect } from 'expect'; import { AccountUpdate, Mina, Permissions, TokenId, UInt64 } from 'o1js'; + import { getProfiler } from '../../utils/profiler.js'; + import { TokenContract, addresses, createDex, keys, tokenIds } from './dex.js'; let proofsEnabled = false; diff --git a/src/examples/zkapps/dex/upgradability.ts b/src/examples/zkapps/dex/upgradability.ts index 4022392170..b78e63d704 100644 --- a/src/examples/zkapps/dex/upgradability.ts +++ b/src/examples/zkapps/dex/upgradability.ts @@ -1,6 +1,8 @@ import { expect } from 'expect'; import { AccountUpdate, Mina, Permissions, PrivateKey, UInt64 } from 'o1js'; + import { getProfiler } from '../../utils/profiler.js'; + import { TokenContract, addresses, createDex, keys, tokenIds } from './dex.js'; let proofsEnabled = false; diff --git a/src/examples/zkapps/escrow/escrow.ts b/src/examples/zkapps/escrow/escrow.ts index d7e1ea378b..483a15250e 100644 --- a/src/examples/zkapps/escrow/escrow.ts +++ b/src/examples/zkapps/escrow/escrow.ts @@ -1,4 +1,4 @@ -import { SmartContract, method, UInt64, AccountUpdate, PublicKey } from 'o1js'; +import { AccountUpdate, PublicKey, SmartContract, UInt64, method } from 'o1js'; export class Escrow extends SmartContract { @method async deposit(user: PublicKey) { diff --git a/src/examples/zkapps/escrow/token-escrow.ts b/src/examples/zkapps/escrow/token-escrow.ts index c3d57635ff..86e8ef19c1 100644 --- a/src/examples/zkapps/escrow/token-escrow.ts +++ b/src/examples/zkapps/escrow/token-escrow.ts @@ -8,7 +8,8 @@ * - Outside the zkapp, we pass the zkapp account update to `token.approveAccountUpdate()` * - see how we call `token.approveAccountUpdate(escrow.self)` in the test below */ -import { SmartContract, method, UInt64, AccountUpdate, PrivateKey, Mina, Bool } from 'o1js'; +import { AccountUpdate, Bool, Mina, PrivateKey, SmartContract, UInt64, method } from 'o1js'; + import { TrivialCoin } from '../dex/erc20.js'; const admin = Mina.TestPublicKey( diff --git a/src/examples/zkapps/hashing/hash.ts b/src/examples/zkapps/hashing/hash.ts index e290211dab..8a9741663d 100644 --- a/src/examples/zkapps/hashing/hash.ts +++ b/src/examples/zkapps/hashing/hash.ts @@ -1,4 +1,4 @@ -import { Hash, Field, SmartContract, state, State, method, Permissions, Bytes } from 'o1js'; +import { Bytes, Field, Hash, Permissions, SmartContract, State, method, state } from 'o1js'; let initialCommitment = Field(0); class Bytes32 extends Bytes(32) {} diff --git a/src/examples/zkapps/hashing/run.ts b/src/examples/zkapps/hashing/run.ts index 0bdb848b9b..eeb36c916e 100644 --- a/src/examples/zkapps/hashing/run.ts +++ b/src/examples/zkapps/hashing/run.ts @@ -1,5 +1,6 @@ +import { AccountUpdate, Bytes, Mina } from 'o1js'; + import { HashStorage } from './hash.js'; -import { Mina, AccountUpdate, Bytes } from 'o1js'; let txn; let proofsEnabled = true; diff --git a/src/examples/zkapps/hello-world/run-live.ts b/src/examples/zkapps/hello-world/run-live.ts index b11b4e0f4a..fec56e04e1 100644 --- a/src/examples/zkapps/hello-world/run-live.ts +++ b/src/examples/zkapps/hello-world/run-live.ts @@ -1,5 +1,6 @@ // Live integration test against real Mina network. import { AccountUpdate, Field, Lightnet, Mina, PrivateKey, fetchAccount } from 'o1js'; + import { HelloWorld, adminPrivateKey } from './hello-world.js'; const useCustomLocalNetwork = process.env.USE_CUSTOM_LOCAL_NETWORK === 'true'; diff --git a/src/examples/zkapps/hello-world/run.ts b/src/examples/zkapps/hello-world/run.ts index e708f7446e..d777ea1226 100644 --- a/src/examples/zkapps/hello-world/run.ts +++ b/src/examples/zkapps/hello-world/run.ts @@ -1,5 +1,7 @@ import { AccountUpdate, Field, Mina, PrivateKey } from 'o1js'; + import { getProfiler } from '../../utils/profiler.js'; + import { HelloWorld, adminPrivateKey } from './hello-world.js'; const HelloWorldProfier = getProfiler('Hello World'); diff --git a/src/examples/zkapps/local-events-zkapp.ts b/src/examples/zkapps/local-events-zkapp.ts index b8bd54192e..a3ee775930 100644 --- a/src/examples/zkapps/local-events-zkapp.ts +++ b/src/examples/zkapps/local-events-zkapp.ts @@ -1,15 +1,15 @@ import { + AccountUpdate, Field, - state, - State, - method, - PrivateKey, - SmartContract, Mina, - AccountUpdate, - UInt32, + PrivateKey, PublicKey, + SmartContract, + State, Struct, + UInt32, + method, + state, } from 'o1js'; const doProofs = false; diff --git a/src/examples/zkapps/merkle-tree/merkle-zkapp.ts b/src/examples/zkapps/merkle-tree/merkle-zkapp.ts index 52e36d2ce5..71594d3bd9 100644 --- a/src/examples/zkapps/merkle-tree/merkle-zkapp.ts +++ b/src/examples/zkapps/merkle-tree/merkle-zkapp.ts @@ -9,21 +9,20 @@ Merkle Trees give developers the power of storing large amounts of data off-chai ! Unfamiliar with Merkle Trees? No problem! Check out https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ */ - import { - SmartContract, - Poseidon, - Field, - State, - state, - PublicKey, - Mina, - method, - UInt32, AccountUpdate, + Field, MerkleTree, MerkleWitness, + Mina, + Poseidon, + PublicKey, + SmartContract, + State, Struct, + UInt32, + method, + state, } from 'o1js'; const doProofs = true; diff --git a/src/examples/zkapps/reducer/actions-as-merkle-list-iterator.ts b/src/examples/zkapps/reducer/actions-as-merkle-list-iterator.ts index 0c942a3fae..21a5a89f20 100644 --- a/src/examples/zkapps/reducer/actions-as-merkle-list-iterator.ts +++ b/src/examples/zkapps/reducer/actions-as-merkle-list-iterator.ts @@ -9,7 +9,7 @@ * method breaks if more than the hard-coded number (default: 32) of actions are pending. Work is actively * in progress to mitigate this limitation. */ -import { Field, Mina, State, state, Reducer, SmartContract, method, assert } from 'o1js'; +import { Field, Mina, Reducer, SmartContract, State, assert, method, state } from 'o1js'; export { ActionsContract, testLocal }; diff --git a/src/examples/zkapps/reducer/actions-as-merkle-list.ts b/src/examples/zkapps/reducer/actions-as-merkle-list.ts index abc85a76af..3ff257d175 100644 --- a/src/examples/zkapps/reducer/actions-as-merkle-list.ts +++ b/src/examples/zkapps/reducer/actions-as-merkle-list.ts @@ -9,7 +9,7 @@ * method breaks if more than the hard-coded number (default: 32) of actions are pending. Work is actively * in progress to mitigate this limitation. */ -import { Bool, Mina, PublicKey, Reducer, SmartContract, method, assert } from 'o1js'; +import { Bool, Mina, PublicKey, Reducer, SmartContract, assert, method } from 'o1js'; export { MerkleListReducing, testLocal }; diff --git a/src/examples/zkapps/reducer/map.ts b/src/examples/zkapps/reducer/map.ts index fd0d404944..228bfd7ac6 100644 --- a/src/examples/zkapps/reducer/map.ts +++ b/src/examples/zkapps/reducer/map.ts @@ -1,18 +1,18 @@ import { - Field, - Struct, - method, - PrivateKey, - SmartContract, - Mina, AccountUpdate, - Reducer, - provable, - PublicKey, Bool, + Field, + Mina, Poseidon, + PrivateKey, Provable, + PublicKey, + Reducer, + SmartContract, + Struct, assert, + method, + provable, } from 'o1js'; /* diff --git a/src/examples/zkapps/reducer/reducer-composite.ts b/src/examples/zkapps/reducer/reducer-composite.ts index a670fb3b32..98343f3d5e 100644 --- a/src/examples/zkapps/reducer/reducer-composite.ts +++ b/src/examples/zkapps/reducer/reducer-composite.ts @@ -5,22 +5,22 @@ * method breaks if more than the hard-coded number (default: 32) of actions are pending. Work is actively * in progress to mitigate this limitation. */ - +import assert from 'node:assert/strict'; import { + AccountUpdate, + Bool, Field, - state, - State, - method, + Mina, PrivateKey, + Provable, + Reducer, SmartContract, - Mina, - AccountUpdate, - Bool, + State, Struct, - Reducer, - Provable, + method, + state, } from 'o1js'; -import assert from 'node:assert/strict'; + import { getProfiler } from '../../utils/profiler.js'; class MaybeIncrement extends Struct({ diff --git a/src/examples/zkapps/reducer/run-live.ts b/src/examples/zkapps/reducer/run-live.ts index 84e75af672..299ba289f2 100644 --- a/src/examples/zkapps/reducer/run-live.ts +++ b/src/examples/zkapps/reducer/run-live.ts @@ -1,7 +1,9 @@ import { AccountUpdate, Lightnet, Mina, PrivateKey } from 'o1js'; + import { DEFAULT_LIGHTNET_CONFIG } from '../../utils/network-configuration.js'; import { randomAccounts } from '../../utils/random-accounts.js'; import { tic, toc } from '../../utils/tic-toc.node.js'; + import { MerkleListReducing } from './actions-as-merkle-list.js'; tic('Run reducer examples against real network.'); diff --git a/src/examples/zkapps/set-local-preconditions-zkapp.ts b/src/examples/zkapps/set-local-preconditions-zkapp.ts index cb7973e8ec..a6c5320b9e 100644 --- a/src/examples/zkapps/set-local-preconditions-zkapp.ts +++ b/src/examples/zkapps/set-local-preconditions-zkapp.ts @@ -5,8 +5,7 @@ This example described how developers can manipulate the network state of the lo Changing preconditions might be useful for integration tests, when you want to test your smart contracts behavior in different situations. For example, you only want your smart contract to initiate a pay out when the `blockchainLength` is at a special height. (lock up period) */ - -import { method, SmartContract, Mina, AccountUpdate, UInt32 } from 'o1js'; +import { AccountUpdate, Mina, SmartContract, UInt32, method } from 'o1js'; const doProofs = false; diff --git a/src/examples/zkapps/simple-zkapp-payment.ts b/src/examples/zkapps/simple-zkapp-payment.ts index c2ce8378da..9a41700aaf 100644 --- a/src/examples/zkapps/simple-zkapp-payment.ts +++ b/src/examples/zkapps/simple-zkapp-payment.ts @@ -1,4 +1,4 @@ -import { method, Mina, AccountUpdate, SmartContract, UInt64, Permissions } from 'o1js'; +import { AccountUpdate, Mina, Permissions, SmartContract, UInt64, method } from 'o1js'; class PaymentContainer extends SmartContract { init() { diff --git a/src/examples/zkapps/simple-zkapp-with-proof.ts b/src/examples/zkapps/simple-zkapp-with-proof.ts index a0938a98b8..9c9b163204 100644 --- a/src/examples/zkapps/simple-zkapp-with-proof.ts +++ b/src/examples/zkapps/simple-zkapp-with-proof.ts @@ -1,15 +1,15 @@ import { + AccountUpdate, + Empty, Field, - state, - State, - method, - SmartContract, Mina, - AccountUpdate, - ZkappPublicInput, SelfProof, + SmartContract, + State, + ZkappPublicInput, + method, + state, verify, - Empty, } from 'o1js'; class TrivialZkapp extends SmartContract { diff --git a/src/examples/zkapps/sudoku/index.ts b/src/examples/zkapps/sudoku/index.ts index e99ec0347d..4a77f7b871 100644 --- a/src/examples/zkapps/sudoku/index.ts +++ b/src/examples/zkapps/sudoku/index.ts @@ -1,7 +1,8 @@ -import { Sudoku, SudokuZkApp } from './sudoku.js'; -import { cloneSudoku, generateSudoku, solveSudoku } from './sudoku-lib.js'; import { AccountUpdate, Mina, PrivateKey } from 'o1js'; +import { cloneSudoku, generateSudoku, solveSudoku } from './sudoku-lib.js'; +import { Sudoku, SudokuZkApp } from './sudoku.js'; + // setup const Local = await Mina.LocalBlockchain(); Mina.setActiveInstance(Local); diff --git a/src/examples/zkapps/sudoku/sudoku.ts b/src/examples/zkapps/sudoku/sudoku.ts index 61af10c004..736b4b070b 100644 --- a/src/examples/zkapps/sudoku/sudoku.ts +++ b/src/examples/zkapps/sudoku/sudoku.ts @@ -1,4 +1,4 @@ -import { Field, SmartContract, method, Bool, state, State, Poseidon, Struct, Provable } from 'o1js'; +import { Bool, Field, Poseidon, Provable, SmartContract, State, Struct, method, state } from 'o1js'; export { Sudoku, SudokuZkApp }; diff --git a/src/examples/zkapps/token-with-proofs.ts b/src/examples/zkapps/token-with-proofs.ts index 4501649187..2ceb1d8b6f 100644 --- a/src/examples/zkapps/token-with-proofs.ts +++ b/src/examples/zkapps/token-with-proofs.ts @@ -1,12 +1,12 @@ import { - method, - Mina, AccountUpdate, - SmartContract, + AccountUpdateForest, + Mina, PublicKey, - TokenId, + SmartContract, TokenContract, - AccountUpdateForest, + TokenId, + method, } from 'o1js'; class Token extends TokenContract { diff --git a/src/examples/zkapps/voting/demo.ts b/src/examples/zkapps/voting/demo.ts index 1c5962806b..2e98eaae28 100644 --- a/src/examples/zkapps/voting/demo.ts +++ b/src/examples/zkapps/voting/demo.ts @@ -6,12 +6,12 @@ * method breaks if more than the hard-coded number (default: 32) of actions are pending. Work is actively * in progress to mitigate this limitation. */ +import { AccountUpdate, Bool, Mina, PrivateKey, Reducer, UInt64 } from 'o1js'; -import { Mina, AccountUpdate, PrivateKey, UInt64, Reducer, Bool } from 'o1js'; import { VotingApp, VotingAppParams } from './factory.js'; import { Member, MyMerkleWitness } from './member.js'; import { OffchainStorage } from './off-chain-storage.js'; -import { ParticipantPreconditions, ElectionPreconditions } from './preconditions.js'; +import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; let Local = await Mina.LocalBlockchain({ proofsEnabled: false, diff --git a/src/examples/zkapps/voting/deploy-contracts.ts b/src/examples/zkapps/voting/deploy-contracts.ts index 7282a0859f..d5315029e9 100644 --- a/src/examples/zkapps/voting/deploy-contracts.ts +++ b/src/examples/zkapps/voting/deploy-contracts.ts @@ -1,17 +1,16 @@ import { + AccountUpdate, DeployArgs, Field, - Permissions, Mina, - AccountUpdate, + Permissions, PrivateKey, - SmartContract, Reducer, + SmartContract, } from 'o1js'; -import { VotingAppParams } from './factory.js'; +import { VotingAppParams } from './factory.js'; import { Membership_ } from './membership.js'; - import { Voting_ } from './voting.js'; class InvalidContract extends SmartContract { diff --git a/src/examples/zkapps/voting/dummy-contract.ts b/src/examples/zkapps/voting/dummy-contract.ts index f5ed70b252..3bab393ea1 100644 --- a/src/examples/zkapps/voting/dummy-contract.ts +++ b/src/examples/zkapps/voting/dummy-contract.ts @@ -1,4 +1,4 @@ -import { Field, SmartContract, state, State, method, DeployArgs, Permissions } from 'o1js'; +import { DeployArgs, Field, Permissions, SmartContract, State, method, state } from 'o1js'; export class DummyContract extends SmartContract { @state(Field) sum = State(); diff --git a/src/examples/zkapps/voting/factory.ts b/src/examples/zkapps/voting/factory.ts index 813d875985..9b58670842 100644 --- a/src/examples/zkapps/voting/factory.ts +++ b/src/examples/zkapps/voting/factory.ts @@ -2,8 +2,8 @@ * Produces a set of three contracts, Voting, Voter Membership and Candidate Membership SCs. * Requires a set of preconditions. */ - import { PrivateKey } from 'o1js'; + import { Membership, Membership_ } from './membership.js'; import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; import { Voting, Voting_ } from './voting.js'; diff --git a/src/examples/zkapps/voting/member.ts b/src/examples/zkapps/voting/member.ts index 624314dd34..4844fc039e 100644 --- a/src/examples/zkapps/voting/member.ts +++ b/src/examples/zkapps/voting/member.ts @@ -1,4 +1,4 @@ -import { Field, PublicKey, UInt64, Poseidon, MerkleWitness, Struct } from 'o1js'; +import { Field, MerkleWitness, Poseidon, PublicKey, Struct, UInt64 } from 'o1js'; export class MyMerkleWitness extends MerkleWitness(3) {} let w = { diff --git a/src/examples/zkapps/voting/membership.ts b/src/examples/zkapps/voting/membership.ts index ee5cc8fd82..56e8af5422 100644 --- a/src/examples/zkapps/voting/membership.ts +++ b/src/examples/zkapps/voting/membership.ts @@ -4,19 +4,20 @@ * in progress to mitigate this limitation. */ import { + AccountUpdate, + Bool, Field, - SmartContract, - state, - State, - method, Permissions, - Bool, + Provable, PublicKey, Reducer, + SmartContract, + State, + method, provablePure, - AccountUpdate, - Provable, + state, } from 'o1js'; + import { Member } from './member.js'; import { ParticipantPreconditions } from './preconditions.js'; diff --git a/src/examples/zkapps/voting/off-chain-storage.ts b/src/examples/zkapps/voting/off-chain-storage.ts index 2406d20ce1..e76381a27b 100644 --- a/src/examples/zkapps/voting/off-chain-storage.ts +++ b/src/examples/zkapps/voting/off-chain-storage.ts @@ -1,5 +1,4 @@ // Merkle Tree and off chain storage - import { Field, MerkleTree } from 'o1js'; export { OffchainStorage }; diff --git a/src/examples/zkapps/voting/run-berkeley.ts b/src/examples/zkapps/voting/run-berkeley.ts index 172c25056a..d332830a6b 100644 --- a/src/examples/zkapps/voting/run-berkeley.ts +++ b/src/examples/zkapps/voting/run-berkeley.ts @@ -1,7 +1,6 @@ import { AccountUpdate, Bool, - fetchAccount, Mina, PrivateKey, PublicKey, @@ -9,11 +8,13 @@ import { SmartContract, UInt32, UInt64, + fetchAccount, } from 'o1js'; + import { VotingApp, VotingAppParams } from './factory.js'; import { Member, MyMerkleWitness } from './member.js'; import { OffchainStorage } from './off-chain-storage.js'; -import { ParticipantPreconditions, ElectionPreconditions } from './preconditions.js'; +import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; import { getResults, vote } from './voting-lib.js'; const Berkeley = Mina.Network({ diff --git a/src/examples/zkapps/voting/run.ts b/src/examples/zkapps/voting/run.ts index e68212e26e..11f7d8b164 100644 --- a/src/examples/zkapps/voting/run.ts +++ b/src/examples/zkapps/voting/run.ts @@ -1,11 +1,12 @@ import { Bool, PrivateKey, UInt32, UInt64 } from 'o1js'; -import { VotingApp, VotingAppParams } from './factory.js'; -import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; -import { OffchainStorage } from './off-chain-storage.js'; +import { getProfiler } from '../../utils/profiler.js'; + +import { VotingApp, VotingAppParams } from './factory.js'; import { Member } from './member.js'; +import { OffchainStorage } from './off-chain-storage.js'; +import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; import { testSet } from './test.js'; -import { getProfiler } from '../../utils/profiler.js'; console.log('Running Voting script...'); diff --git a/src/examples/zkapps/voting/test.ts b/src/examples/zkapps/voting/test.ts index 85ea701d1f..81c606753c 100644 --- a/src/examples/zkapps/voting/test.ts +++ b/src/examples/zkapps/voting/test.ts @@ -1,12 +1,13 @@ -import { Mina, AccountUpdate, Field, PrivateKey, UInt64, UInt32, Permissions, Reducer } from 'o1js'; +import { AccountUpdate, Field, Mina, Permissions, PrivateKey, Reducer, UInt32, UInt64 } from 'o1js'; + import { deployContracts, deployInvalidContracts } from './deploy-contracts.js'; import { DummyContract } from './dummy-contract.js'; import { VotingAppParams } from './factory.js'; import { Member, MyMerkleWitness } from './member.js'; import { Membership_ } from './membership.js'; import { OffchainStorage } from './off-chain-storage.js'; -import { Voting_ } from './voting.js'; import { assertValidTx, getResults, registerMember, vote } from './voting-lib.js'; +import { Voting_ } from './voting.js'; type Votes = OffchainStorage; type Candidates = OffchainStorage; diff --git a/src/examples/zkapps/voting/voting-lib.ts b/src/examples/zkapps/voting/voting-lib.ts index 74297e05b8..674dca1b6b 100644 --- a/src/examples/zkapps/voting/voting-lib.ts +++ b/src/examples/zkapps/voting/voting-lib.ts @@ -1,7 +1,8 @@ +import { Mina, PrivateKey } from 'o1js'; + import { Member, MyMerkleWitness } from './member.js'; import { OffchainStorage } from './off-chain-storage.js'; import { Voting_ } from './voting.js'; -import { Mina, PrivateKey } from 'o1js'; /** * Updates off-chain storage when registering a member or candidate diff --git a/src/examples/zkapps/voting/voting.ts b/src/examples/zkapps/voting/voting.ts index 4de9abe7c3..f7bde386e0 100644 --- a/src/examples/zkapps/voting/voting.ts +++ b/src/examples/zkapps/voting/voting.ts @@ -4,23 +4,23 @@ * in progress to mitigate this limitation. */ import { + AccountUpdate, + Bool, Field, - SmartContract, - state, - State, - method, Permissions, + Provable, PublicKey, - Bool, Reducer, + SmartContract, + State, + method, provablePure, - AccountUpdate, - Provable, + state, } from 'o1js'; import { Member } from './member.js'; -import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; import { Membership_ } from './membership.js'; +import { ElectionPreconditions, ParticipantPreconditions } from './preconditions.js'; /** * Address to the Membership instance that keeps track of Candidates. diff --git a/src/examples/zkapps/zkapp-self-update.ts b/src/examples/zkapps/zkapp-self-update.ts index 94de664481..1562df2ecb 100644 --- a/src/examples/zkapps/zkapp-self-update.ts +++ b/src/examples/zkapps/zkapp-self-update.ts @@ -2,13 +2,13 @@ * This example deploys a zkApp and then updates its verification key via proof, self-replacing the zkApp */ import { + AccountUpdate, + Mina, + Permissions, + Provable, SmartContract, VerificationKey, method, - Permissions, - Mina, - AccountUpdate, - Provable, } from 'o1js'; class SelfUpdater extends SmartContract { diff --git a/src/examples/zkprogram/gadgets.ts b/src/examples/zkprogram/gadgets.ts index 0b8ec05fc1..eaca9704c8 100644 --- a/src/examples/zkprogram/gadgets.ts +++ b/src/examples/zkprogram/gadgets.ts @@ -1,4 +1,4 @@ -import { Field, Provable, Gadgets, ZkProgram } from 'o1js'; +import { Field, Gadgets, Provable, ZkProgram } from 'o1js'; let cs = await Provable.constraintSystem(() => { let f = Provable.witness(Field, () => 12); diff --git a/src/examples/zkprogram/hash-chain.ts b/src/examples/zkprogram/hash-chain.ts index f534e1dea8..0bbd70feea 100644 --- a/src/examples/zkprogram/hash-chain.ts +++ b/src/examples/zkprogram/hash-chain.ts @@ -4,7 +4,7 @@ * * We implement this as a self-recursive ZkProgram, using `proveRecursivelyIf()` */ -import { assert, Bool, Experimental, Field, Poseidon, Provable, Struct, ZkProgram } from 'o1js'; +import { Bool, Experimental, Field, Poseidon, Provable, Struct, ZkProgram, assert } from 'o1js'; const HASHES_PER_PROOF = 30; diff --git a/src/examples/zkprogram/mutual-recursion.ts b/src/examples/zkprogram/mutual-recursion.ts index bdecfc9485..0aca4db44c 100644 --- a/src/examples/zkprogram/mutual-recursion.ts +++ b/src/examples/zkprogram/mutual-recursion.ts @@ -1,4 +1,4 @@ -import { ZkProgram, Field, DynamicProof, Proof, VerificationKey, Undefined, verify } from 'o1js'; +import { DynamicProof, Field, Proof, Undefined, VerificationKey, ZkProgram, verify } from 'o1js'; /** * This example showcases mutual recursion (A -> B -> A) through two circuits that respectively diff --git a/src/examples/zkprogram/program-no-proving.ts b/src/examples/zkprogram/program-no-proving.ts index 17a3862729..a3eb791d2f 100644 --- a/src/examples/zkprogram/program-no-proving.ts +++ b/src/examples/zkprogram/program-no-proving.ts @@ -1,13 +1,13 @@ import { - SelfProof, + Cache, + Empty, Field, - ZkProgram, - verify, - Proof, JsonProof, + Proof, Provable, - Empty, - Cache, + SelfProof, + ZkProgram, + verify, } from 'o1js'; let MyProgram = ZkProgram({ diff --git a/src/examples/zkprogram/program-with-chunking.ts b/src/examples/zkprogram/program-with-chunking.ts index 3eeb4384bd..d002de9100 100644 --- a/src/examples/zkprogram/program-with-chunking.ts +++ b/src/examples/zkprogram/program-with-chunking.ts @@ -1,4 +1,4 @@ -import { Field, Cache, Gadgets, ZkProgram } from 'o1js'; +import { Cache, Field, Gadgets, ZkProgram } from 'o1js'; let MyProgram = ZkProgram({ chunks: 1, diff --git a/src/examples/zkprogram/program-with-input.ts b/src/examples/zkprogram/program-with-input.ts index ea89c19919..aacb7097ef 100644 --- a/src/examples/zkprogram/program-with-input.ts +++ b/src/examples/zkprogram/program-with-input.ts @@ -1,4 +1,4 @@ -import { SelfProof, Field, ZkProgram, verify, Proof, JsonProof, Provable } from 'o1js'; +import { Field, JsonProof, Proof, Provable, SelfProof, ZkProgram, verify } from 'o1js'; let MyProgram = ZkProgram({ name: 'example-with-input', diff --git a/src/examples/zkprogram/recursive-program.ts b/src/examples/zkprogram/recursive-program.ts index 0308266cd8..0417e4cdb7 100644 --- a/src/examples/zkprogram/recursive-program.ts +++ b/src/examples/zkprogram/recursive-program.ts @@ -1,4 +1,4 @@ -import { SelfProof, Field, ZkProgram } from 'o1js'; +import { Field, SelfProof, ZkProgram } from 'o1js'; export const RecursiveProgram = ZkProgram({ name: 'recursive-program', diff --git a/src/index.ts b/src/index.ts index 15b5716ae2..3efb415248 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,18 @@ +import * as BatchReducer_ from './lib/mina/v1/actions/batch-reducer.js'; +import { Actionable } from './lib/mina/v1/actions/offchain-state-serialization.js'; +import * as OffchainState_ from './lib/mina/v1/actions/offchain-state.js'; +import * as V2_ from './lib/mina/v2/index.js'; +import { Recursive as Recursive_ } from './lib/proof-system/recursive.js'; +import { + ProvableBigInt as ProvableBigInt_, + createProvableBigInt as createProvableBigInt_, +} from './lib/provable/bigint.js'; +import { IndexedMerkleMap, IndexedMerkleMapBase } from './lib/provable/merkle-tree-indexed.js'; +// experimental APIs +import { memoizeWitness } from './lib/provable/provable.js'; +import { InferProvable } from './lib/provable/types/struct.js'; +import { Field } from './lib/provable/wrapped.js'; + export { TupleN } from './lib/util/types.js'; export type { ProvablePure } from './lib/provable/types/provable-intf.js'; export { Ledger, initializeBindings } from './bindings.js'; @@ -44,7 +59,7 @@ export { Types } from './bindings/mina-transaction/v1/types.js'; export { DynamicArray } from './lib/provable/dynamic-array.js'; export { MerkleList, MerkleListIterator } from './lib/provable/merkle-list.js'; -import { IndexedMerkleMap, IndexedMerkleMapBase } from './lib/provable/merkle-tree-indexed.js'; + export { Option } from './lib/provable/option.js'; export * as Mina from './lib/mina/v1/mina.js'; @@ -112,22 +127,8 @@ export type { NetworkId } from './mina-signer/mina-signer.js'; export { setNumberOfWorkers } from './lib/proof-system/workers.js'; -// experimental APIs -import { memoizeWitness } from './lib/provable/provable.js'; -import * as OffchainState_ from './lib/mina/v1/actions/offchain-state.js'; -import * as BatchReducer_ from './lib/mina/v1/actions/batch-reducer.js'; -import { Actionable } from './lib/mina/v1/actions/offchain-state-serialization.js'; -import { InferProvable } from './lib/provable/types/struct.js'; -import { Recursive as Recursive_ } from './lib/proof-system/recursive.js'; -import { - ProvableBigInt as ProvableBigInt_, - createProvableBigInt as createProvableBigInt_, -} from './lib/provable/bigint.js'; export { Experimental }; -import * as V2_ from './lib/mina/v2/index.js'; -import { Field } from './lib/provable/wrapped.js'; - const Experimental_ = { memoizeWitness, IndexedMerkleMap, diff --git a/src/lib/mina/v1/account-update-layout.unit-test.ts b/src/lib/mina/v1/account-update-layout.unit-test.ts index 461e7efcd0..91aadc3ae3 100644 --- a/src/lib/mina/v1/account-update-layout.unit-test.ts +++ b/src/lib/mina/v1/account-update-layout.unit-test.ts @@ -1,6 +1,7 @@ import { Mina } from '../../../index.js'; -import { AccountUpdate, AccountUpdateTree } from './account-update.js'; import { UInt64 } from '../../provable/int.js'; + +import { AccountUpdate, AccountUpdateTree } from './account-update.js'; import { SmartContract, method } from './zkapp.js'; // smart contract which creates an account update that has a child of its own diff --git a/src/lib/mina/v1/account-update.ts b/src/lib/mina/v1/account-update.ts index 43769bb5be..c5086ab50f 100644 --- a/src/lib/mina/v1/account-update.ts +++ b/src/lib/mina/v1/account-update.ts @@ -1,55 +1,56 @@ -import { cloneCircuitValue, FlexibleProvable, StructNoJson } from '../../provable/types/struct.js'; -import { provable, provableExtends, provablePure } from '../../provable/types/provable-derivers.js'; -import { memoizationContext, memoizeWitness, Provable } from '../../provable/provable.js'; -import { Field, Bool } from '../../provable/wrapped.js'; import { Pickles } from '../../../bindings.js'; +import { mocks, prefixes, protocolVersions } from '../../../bindings/crypto/constants.js'; +import { From } from '../../../bindings/lib/provable-generic.js'; import { jsLayout } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; -import { Types, toJSONEssential } from '../../../bindings/mina-transaction/v1/types.js'; -import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; -import { UInt64, UInt32, Int64 } from '../../provable/int.js'; -import type { SmartContract } from './zkapp.js'; import { - Preconditions, - Account, - Network, - CurrentSlot, - preconditions, - OrIgnore, - ClosedInterval, - getAccountPreconditions, -} from './precondition.js'; -import { dummyBase64Proof, Empty, Prover } from '../../proof-system/zkprogram.js'; -import { Proof } from '../../proof-system/proof.js'; -import { Memo } from '../../../mina-signer/src/memo.js'; -import { - Events as BaseEvents, Actions as BaseActions, + Events as BaseEvents, MayUseToken as BaseMayUseToken, } from '../../../bindings/mina-transaction/v1/transaction-leaves.js'; -import { TokenId as Base58TokenId } from './base58-encodings.js'; -import { hashWithPrefix, packToFields, Poseidon } from '../../provable/crypto/poseidon.js'; -import { mocks, prefixes, protocolVersions } from '../../../bindings/crypto/constants.js'; +import { Types, toJSONEssential } from '../../../bindings/mina-transaction/v1/types.js'; +import { Memo } from '../../../mina-signer/src/memo.js'; +import { + CallForest, + accountUpdatesToCallForest, + callForestHashGeneric, + transactionCommitments, +} from '../../../mina-signer/src/sign-zkapp-command.js'; import { Signature, signFieldElement, zkAppBodyPrefix, } from '../../../mina-signer/src/signature.js'; import { MlFieldConstArray } from '../../ml/fields.js'; +import { Proof } from '../../proof-system/proof.js'; +import { Empty, Prover, dummyBase64Proof } from '../../proof-system/zkprogram.js'; +import { Poseidon, hashWithPrefix, packToFields } from '../../provable/crypto/poseidon.js'; +import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; +import { Int64, UInt32, UInt64 } from '../../provable/int.js'; +import { MerkleList, MerkleListBase, emptyHash, genericHash } from '../../provable/merkle-list.js'; +import { Hashed } from '../../provable/packed.js'; +import { Provable, memoizationContext, memoizeWitness } from '../../provable/provable.js'; +import { RandomId } from '../../provable/types/auxiliary.js'; +import { provable, provableExtends, provablePure } from '../../provable/types/provable-derivers.js'; +import { FlexibleProvable, StructNoJson, cloneCircuitValue } from '../../provable/types/struct.js'; +import { Bool, Field } from '../../provable/wrapped.js'; +import { assert } from '../../util/assert.js'; + +import { TokenId as Base58TokenId } from './base58-encodings.js'; +import { activeInstance } from './mina-instance.js'; import { - accountUpdatesToCallForest, - CallForest, - callForestHashGeneric, - transactionCommitments, -} from '../../../mina-signer/src/sign-zkapp-command.js'; -import { currentTransaction } from './transaction-context.js'; + Account, + ClosedInterval, + CurrentSlot, + Network, + OrIgnore, + Preconditions, + getAccountPreconditions, + preconditions, +} from './precondition.js'; import { isSmartContract } from './smart-contract-base.js'; -import { activeInstance } from './mina-instance.js'; -import { emptyHash, genericHash, MerkleList, MerkleListBase } from '../../provable/merkle-list.js'; -import { Hashed } from '../../provable/packed.js'; import { accountUpdateLayout, smartContractContext } from './smart-contract-context.js'; -import { assert } from '../../util/assert.js'; -import { RandomId } from '../../provable/types/auxiliary.js'; -import { From } from '../../../bindings/lib/provable-generic.js'; +import { currentTransaction } from './transaction-context.js'; +import type { SmartContract } from './zkapp.js'; // external API export { diff --git a/src/lib/mina/v1/account-update.unit-test.ts b/src/lib/mina/v1/account-update.unit-test.ts index 5b99e03e27..5ba1a53483 100644 --- a/src/lib/mina/v1/account-update.unit-test.ts +++ b/src/lib/mina/v1/account-update.unit-test.ts @@ -1,8 +1,9 @@ -import { mocks } from '../../../bindings/crypto/constants.js'; -import { AccountUpdate, PrivateKey, Field, Bool, Mina, Int64, Types } from '../../../index.js'; -import { Test } from '../../../bindings.js'; import { expect } from 'expect'; +import { Test } from '../../../bindings.js'; +import { mocks } from '../../../bindings/crypto/constants.js'; +import { AccountUpdate, Bool, Field, Int64, Mina, PrivateKey, Types } from '../../../index.js'; + let mlTest = await Test(); let address = PrivateKey.random().toPublicKey(); diff --git a/src/lib/mina/v1/account.ts b/src/lib/mina/v1/account.ts index e856beb97b..df653c778a 100644 --- a/src/lib/mina/v1/account.ts +++ b/src/lib/mina/v1/account.ts @@ -1,13 +1,14 @@ -import { Types } from '../../../bindings/mina-transaction/v1/types.js'; -import { Bool, Field } from '../../provable/wrapped.js'; -import { Permissions } from './account-update.js'; -import { UInt32, UInt64 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { TokenId, ReceiptChainHash } from './base58-encodings.js'; import { genericLayoutFold } from '../../../bindings/lib/from-layout.js'; -import { customTypes, TypeMap } from '../../../bindings/mina-transaction/gen/v1/transaction.js'; import { jsLayout } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; +import { TypeMap, customTypes } from '../../../bindings/mina-transaction/gen/v1/transaction.js'; +import { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; import { ProvableExtended } from '../../provable/types/struct.js'; +import { Bool, Field } from '../../provable/wrapped.js'; + +import { Permissions } from './account-update.js'; +import { ReceiptChainHash, TokenId } from './base58-encodings.js'; import { FetchedAccount } from './graphql.js'; export { Account, PartialAccount }; diff --git a/src/lib/mina/v1/actions/action-types.ts b/src/lib/mina/v1/actions/action-types.ts index 3f24d0143c..34e61d731b 100644 --- a/src/lib/mina/v1/actions/action-types.ts +++ b/src/lib/mina/v1/actions/action-types.ts @@ -1,12 +1,13 @@ +import { prefixes } from '../../../../bindings/crypto/constants.js'; +import { hashWithPrefix } from '../../../provable/crypto/poseidon.js'; import { MerkleList } from '../../../provable/merkle-list.js'; -import { Field } from '../../../provable/wrapped.js'; -import { InferProvable } from '../../../provable/types/struct.js'; -import { Actionable } from './offchain-state-serialization.js'; -import { Actions } from '../account-update.js'; import { Hashed } from '../../../provable/packed.js'; -import { hashWithPrefix } from '../../../provable/crypto/poseidon.js'; -import { prefixes } from '../../../../bindings/crypto/constants.js'; import { ProvableType } from '../../../provable/types/provable-intf.js'; +import { InferProvable } from '../../../provable/types/struct.js'; +import { Field } from '../../../provable/wrapped.js'; +import { Actions } from '../account-update.js'; + +import { Actionable } from './offchain-state-serialization.js'; export { MerkleActions, MerkleActionHashes, HashedAction, FlatActions }; export { emptyActionState, emptyActionsHash }; diff --git a/src/lib/mina/v1/actions/batch-reducer-program.unit-test.ts b/src/lib/mina/v1/actions/batch-reducer-program.unit-test.ts index deba1ee93d..2c455223a9 100644 --- a/src/lib/mina/v1/actions/batch-reducer-program.unit-test.ts +++ b/src/lib/mina/v1/actions/batch-reducer-program.unit-test.ts @@ -1,8 +1,10 @@ -import { BatchReducer, actionStackProgram, proveActionStack } from './batch-reducer.js'; -import { Field } from '../../../../index.js'; import { expect } from 'expect'; import { describe, it } from 'node:test'; + import { Actions as ActionsBigint } from '../../../../bindings/mina-transaction/v1/transaction-leaves-bigint.js'; +import { Field } from '../../../../index.js'; + +import { BatchReducer, actionStackProgram, proveActionStack } from './batch-reducer.js'; // analyze program with different number of actions for (let actionsPerProof of [10, 30, 100, 300, 1000]) { diff --git a/src/lib/mina/v1/actions/batch-reducer.ts b/src/lib/mina/v1/actions/batch-reducer.ts index 52f5989b64..c86669417e 100644 --- a/src/lib/mina/v1/actions/batch-reducer.ts +++ b/src/lib/mina/v1/actions/batch-reducer.ts @@ -1,23 +1,28 @@ -import { SelfProof } from '../../../proof-system/zkprogram.js'; +import { prefixes } from '../../../../bindings/crypto/constants.js'; +import { Constructor, From } from '../../../../bindings/lib/provable-generic.js'; +import { Actions as ActionsBigint } from '../../../../bindings/mina-transaction/v1/transaction-leaves-bigint.js'; +import { hashWithPrefix as hashWithPrefixBigint } from '../../../../mina-signer/src/poseidon-bigint.js'; import { Proof } from '../../../proof-system/proof.js'; +import { SelfProof } from '../../../proof-system/zkprogram.js'; +import { ZkProgram } from '../../../proof-system/zkprogram.js'; +import { PublicKey } from '../../../provable/crypto/signature.js'; +import { Option } from '../../../provable/option.js'; +import { Provable } from '../../../provable/provable.js'; +import { + ProvableHashable, + ProvablePure, + ProvableType, +} from '../../../provable/types/provable-intf.js'; +import { InferProvable, Struct } from '../../../provable/types/struct.js'; +import { Unconstrained } from '../../../provable/types/unconstrained.js'; import { Bool, Field } from '../../../provable/wrapped.js'; -import { SmartContract } from '../zkapp.js'; import { assert, assertDefined } from '../../../util/assert.js'; -import { Constructor, From } from '../../../../bindings/lib/provable-generic.js'; -import { Struct, InferProvable } from '../../../provable/types/struct.js'; -import { Provable } from '../../../provable/provable.js'; -import { Actionable } from './offchain-state-serialization.js'; -import { prefixes } from '../../../../bindings/crypto/constants.js'; import { Actions } from '../account-update.js'; +import { fetchActions, getProofsEnabled } from '../mina-instance.js'; import { contract } from '../smart-contract-context.js'; import { State } from '../state.js'; -import { Option } from '../../../provable/option.js'; -import { PublicKey } from '../../../provable/crypto/signature.js'; -import { fetchActions, getProofsEnabled } from '../mina-instance.js'; -import { ZkProgram } from '../../../proof-system/zkprogram.js'; -import { Unconstrained } from '../../../provable/types/unconstrained.js'; -import { hashWithPrefix as hashWithPrefixBigint } from '../../../../mina-signer/src/poseidon-bigint.js'; -import { Actions as ActionsBigint } from '../../../../bindings/mina-transaction/v1/transaction-leaves-bigint.js'; +import { SmartContract } from '../zkapp.js'; + import { FlatActions, HashedAction, @@ -25,11 +30,7 @@ import { MerkleActions, emptyActionState, } from './action-types.js'; -import { - ProvableHashable, - ProvablePure, - ProvableType, -} from '../../../provable/types/provable-intf.js'; +import { Actionable } from './offchain-state-serialization.js'; // external API export { BatchReducer, ActionBatch }; diff --git a/src/lib/mina/v1/actions/batch-reducer.unit-test.ts b/src/lib/mina/v1/actions/batch-reducer.unit-test.ts index 1ec206a27a..88e03410c9 100644 --- a/src/lib/mina/v1/actions/batch-reducer.unit-test.ts +++ b/src/lib/mina/v1/actions/batch-reducer.unit-test.ts @@ -6,17 +6,18 @@ import { Bool, Experimental, Field, - method, Poseidon, Provable, PublicKey, SmartContract, State, - state, UInt64, assert, + method, + state, } from '../../../../index.js'; import { TestInstruction, expectBalance, testLocal, transaction } from '../test/test-contract.js'; + const { IndexedMerkleMap, BatchReducer } = Experimental; const MINA = 1_000_000_000n; diff --git a/src/lib/mina/v1/actions/offchain-contract-tests/ExampleContract.ts b/src/lib/mina/v1/actions/offchain-contract-tests/ExampleContract.ts index 73cf7aa06a..dffc6d077e 100644 --- a/src/lib/mina/v1/actions/offchain-contract-tests/ExampleContract.ts +++ b/src/lib/mina/v1/actions/offchain-contract-tests/ExampleContract.ts @@ -1,10 +1,10 @@ import { + Experimental, + PublicKey, SmartContract, + UInt64, method, state, - PublicKey, - UInt64, - Experimental, } from '../../../../../index.js'; export { offchainState, StateProof, ExampleContract }; diff --git a/src/lib/mina/v1/actions/offchain-contract-tests/multi-contract-instance.unit-test.ts b/src/lib/mina/v1/actions/offchain-contract-tests/multi-contract-instance.unit-test.ts index ba11f2c2f2..27f3629fa4 100644 --- a/src/lib/mina/v1/actions/offchain-contract-tests/multi-contract-instance.unit-test.ts +++ b/src/lib/mina/v1/actions/offchain-contract-tests/multi-contract-instance.unit-test.ts @@ -1,6 +1,8 @@ +import assert from 'assert'; + import { UInt64 } from '../../../../../index.js'; import * as Mina from '../../mina.js'; -import assert from 'assert'; + import { ExampleContract } from './ExampleContract.js'; import { settle, transfer } from './utils.js'; diff --git a/src/lib/mina/v1/actions/offchain-contract-tests/single-contract-instance.unit-test.ts b/src/lib/mina/v1/actions/offchain-contract-tests/single-contract-instance.unit-test.ts index db6e17f2d7..d9ec862c10 100644 --- a/src/lib/mina/v1/actions/offchain-contract-tests/single-contract-instance.unit-test.ts +++ b/src/lib/mina/v1/actions/offchain-contract-tests/single-contract-instance.unit-test.ts @@ -1,6 +1,7 @@ +import assert from 'assert'; + import { UInt64 } from '../../../../../index.js'; import * as Mina from '../../mina.js'; -import assert from 'assert'; import { ExampleContract, offchainState as exampleOffchainState } from './ExampleContract.js'; import { settle, transfer } from './utils.js'; diff --git a/src/lib/mina/v1/actions/offchain-state-rollup.ts b/src/lib/mina/v1/actions/offchain-state-rollup.ts index ccd6ea216f..5bf08067bf 100644 --- a/src/lib/mina/v1/actions/offchain-state-rollup.ts +++ b/src/lib/mina/v1/actions/offchain-state-rollup.ts @@ -1,13 +1,16 @@ -import { ZkProgram } from '../../../proof-system/zkprogram.js'; +import { Actions } from '../../../../bindings/mina-transaction/v1/transaction-leaves.js'; +import { Cache } from '../../../../lib/proof-system/cache.js'; import { Proof } from '../../../proof-system/proof.js'; -import { Bool, Field } from '../../../provable/wrapped.js'; +import { ZkProgram } from '../../../proof-system/zkprogram.js'; +import { SelfProof } from '../../../proof-system/zkprogram.js'; +import { assert } from '../../../provable/gadgets/common.js'; import { MerkleList, MerkleListIterator } from '../../../provable/merkle-list.js'; -import { Actions } from '../../../../bindings/mina-transaction/v1/transaction-leaves.js'; import { IndexedMerkleMap, IndexedMerkleMapBase } from '../../../provable/merkle-tree-indexed.js'; -import { Struct } from '../../../provable/types/struct.js'; -import { SelfProof } from '../../../proof-system/zkprogram.js'; import { Provable } from '../../../provable/provable.js'; -import { assert } from '../../../provable/gadgets/common.js'; +import { Struct } from '../../../provable/types/struct.js'; +import { Bool, Field } from '../../../provable/wrapped.js'; +import { getProofsEnabled } from '../mina.js'; + import { ActionList, LinearizedAction, @@ -15,8 +18,6 @@ import { MerkleLeaf, updateMerkleMap, } from './offchain-state-serialization.js'; -import { getProofsEnabled } from '../mina.js'; -import { Cache } from '../../../../lib/proof-system/cache.js'; export { OffchainStateRollup, OffchainStateCommitments }; diff --git a/src/lib/mina/v1/actions/offchain-state-serialization.ts b/src/lib/mina/v1/actions/offchain-state-serialization.ts index f090b2c408..9c7f3dd110 100644 --- a/src/lib/mina/v1/actions/offchain-state-serialization.ts +++ b/src/lib/mina/v1/actions/offchain-state-serialization.ts @@ -5,8 +5,7 @@ * Thanks to the properties of Poseidon, this enables us to compute the action hash cheaply * if we only need to prove that (key, value) are part of it. */ - -import { ProvablePure, ProvableType, WithProvable } from '../../../provable/types/provable-intf.js'; +import { prefixes } from '../../../../bindings/crypto/constants.js'; import { Poseidon, ProvableHashable, @@ -14,18 +13,18 @@ import { packToFields, salt, } from '../../../provable/crypto/poseidon.js'; -import { Field, Bool } from '../../../provable/wrapped.js'; +import { PublicKey } from '../../../provable/crypto/signature.js'; import { assert } from '../../../provable/gadgets/common.js'; -import { prefixes } from '../../../../bindings/crypto/constants.js'; -import { Struct } from '../../../provable/types/struct.js'; -import { Unconstrained } from '../../../provable/types/unconstrained.js'; import { MerkleList } from '../../../provable/merkle-list.js'; -import * as Mina from '../mina.js'; -import { PublicKey } from '../../../provable/crypto/signature.js'; +import { IndexedMerkleMap, IndexedMerkleMapBase } from '../../../provable/merkle-tree-indexed.js'; +import { Option } from '../../../provable/option.js'; import { Provable } from '../../../provable/provable.js'; +import { ProvablePure, ProvableType, WithProvable } from '../../../provable/types/provable-intf.js'; +import { Struct } from '../../../provable/types/struct.js'; +import { Unconstrained } from '../../../provable/types/unconstrained.js'; +import { Bool, Field } from '../../../provable/wrapped.js'; import { Actions } from '../account-update.js'; -import { Option } from '../../../provable/option.js'; -import { IndexedMerkleMap, IndexedMerkleMapBase } from '../../../provable/merkle-tree-indexed.js'; +import * as Mina from '../mina.js'; export { toKeyHash, diff --git a/src/lib/mina/v1/actions/offchain-state.ts b/src/lib/mina/v1/actions/offchain-state.ts index 37fde70734..142d4370e8 100644 --- a/src/lib/mina/v1/actions/offchain-state.ts +++ b/src/lib/mina/v1/actions/offchain-state.ts @@ -1,4 +1,20 @@ +import { Constructor, InferValue } from '../../../../bindings/lib/provable-generic.js'; +import { Proof } from '../../../proof-system/proof.js'; +import { Poseidon } from '../../../provable/crypto/poseidon.js'; +import { assert } from '../../../provable/gadgets/common.js'; +import { IndexedMerkleMap } from '../../../provable/merkle-tree-indexed.js'; +import { Option, OptionOrValue } from '../../../provable/option.js'; +import { Provable } from '../../../provable/provable.js'; +import { ProvableType } from '../../../provable/types/provable-intf.js'; import { InferProvable } from '../../../provable/types/struct.js'; +import { Field } from '../../../provable/wrapped.js'; +import { assertDefined } from '../../../util/assert.js'; +import { Actions } from '../account-update.js'; +import { contract } from '../smart-contract-context.js'; +import { State } from '../state.js'; +import { SmartContract } from '../zkapp.js'; + +import { OffchainStateCommitments, OffchainStateRollup } from './offchain-state-rollup.js'; import { Actionable, fetchMerkleLeaves, @@ -7,21 +23,6 @@ import { toAction, toKeyHash, } from './offchain-state-serialization.js'; -import { Field } from '../../../provable/wrapped.js'; -import { Proof } from '../../../proof-system/proof.js'; -import { OffchainStateCommitments, OffchainStateRollup } from './offchain-state-rollup.js'; -import { Option, OptionOrValue } from '../../../provable/option.js'; -import { Constructor, InferValue } from '../../../../bindings/lib/provable-generic.js'; -import { SmartContract } from '../zkapp.js'; -import { assert } from '../../../provable/gadgets/common.js'; -import { State } from '../state.js'; -import { Actions } from '../account-update.js'; -import { Provable } from '../../../provable/provable.js'; -import { Poseidon } from '../../../provable/crypto/poseidon.js'; -import { contract } from '../smart-contract-context.js'; -import { IndexedMerkleMap } from '../../../provable/merkle-tree-indexed.js'; -import { assertDefined } from '../../../util/assert.js'; -import { ProvableType } from '../../../provable/types/provable-intf.js'; // external API export { OffchainState, OffchainStateCommitments }; diff --git a/src/lib/mina/v1/actions/reducer.ts b/src/lib/mina/v1/actions/reducer.ts index 302ddb2367..060bc14237 100644 --- a/src/lib/mina/v1/actions/reducer.ts +++ b/src/lib/mina/v1/actions/reducer.ts @@ -1,12 +1,12 @@ +import { ProvableHashable } from '../../../provable/crypto/poseidon.js'; +import { MerkleList } from '../../../provable/merkle-list.js'; +import { Provable } from '../../../provable/provable.js'; +import { provable } from '../../../provable/types/provable-derivers.js'; +import { ProvablePure } from '../../../provable/types/provable-intf.js'; +import { FlexibleProvablePure, InferProvable } from '../../../provable/types/struct.js'; import { Field } from '../../../provable/wrapped.js'; import { Actions } from '../account-update.js'; -import { FlexibleProvablePure, InferProvable } from '../../../provable/types/struct.js'; -import { provable } from '../../../provable/types/provable-derivers.js'; -import { Provable } from '../../../provable/provable.js'; -import { ProvableHashable } from '../../../provable/crypto/poseidon.js'; import * as Mina from '../mina.js'; -import { ProvablePure } from '../../../provable/types/provable-intf.js'; -import { MerkleList } from '../../../provable/merkle-list.js'; import type { SmartContract } from '../zkapp.js'; export { Reducer, getReducer }; diff --git a/src/lib/mina/v1/base58-encodings.ts b/src/lib/mina/v1/base58-encodings.ts index e121fd9b35..62962060b9 100644 --- a/src/lib/mina/v1/base58-encodings.ts +++ b/src/lib/mina/v1/base58-encodings.ts @@ -1,5 +1,5 @@ -import { fieldEncodings } from '../../util/base58.js'; import { Field } from '../../provable/wrapped.js'; +import { fieldEncodings } from '../../util/base58.js'; export { TokenId, ReceiptChainHash, LedgerHash, EpochSeed, StateHash }; diff --git a/src/lib/mina/v1/errors.ts b/src/lib/mina/v1/errors.ts index dab25604e5..9d837d7b26 100644 --- a/src/lib/mina/v1/errors.ts +++ b/src/lib/mina/v1/errors.ts @@ -1,4 +1,5 @@ import { Types } from '../../../bindings/mina-transaction/v1/types.js'; + import { TokenId } from './account-update.js'; export { humanizeErrors, invalidTransactionError }; diff --git a/src/lib/mina/v1/fetch.ts b/src/lib/mina/v1/fetch.ts index 55f89ba987..2cb0e22c2e 100644 --- a/src/lib/mina/v1/fetch.ts +++ b/src/lib/mina/v1/fetch.ts @@ -1,37 +1,38 @@ -import { Field } from '../../provable/wrapped.js'; +import { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; import { UInt32, UInt64 } from '../../provable/int.js'; +import { Field } from '../../provable/wrapped.js'; + import { Actions, TokenId } from './account-update.js'; -import { PublicKey, PrivateKey } from '../../provable/crypto/signature.js'; -import { NetworkValue } from './precondition.js'; -import { Types } from '../../../bindings/mina-transaction/v1/types.js'; -import { ActionStates } from './mina.js'; -import { LedgerHash, EpochSeed, StateHash } from './base58-encodings.js'; -import { Account, fillPartialAccount, parseFetchedAccount, PartialAccount } from './account.js'; +import { Account, PartialAccount, fillPartialAccount, parseFetchedAccount } from './account.js'; +import { EpochSeed, LedgerHash, StateHash } from './base58-encodings.js'; import { - type LastBlockQueryResponse, - type GenesisConstantsResponse, - type LastBlockQueryFailureCheckResponse, + type ActionQueryResponse, + type ActionsQueryInputs, + type CurrentSlotResponse, + type EventQueryResponse, + type EventsQueryInputs, + type FetchedAccountResponse, type FetchedAction, type FetchedBlock, + type GenesisConstantsResponse, + type LastBlockQueryFailureCheckResponse, + type LastBlockQueryResponse, + type SendZkAppResponse, type TransactionStatus, type TransactionStatusQueryResponse, - type EventsQueryInputs, - type EventQueryResponse, - type ActionsQueryInputs, - type ActionQueryResponse, - type SendZkAppResponse, - type FetchedAccountResponse, - type CurrentSlotResponse, - sendZkappQuery, + accountQuery, + currentSlotQuery, + genesisConstantsQuery, + getActionsQuery, + getEventsQuery, lastBlockQuery, lastBlockQueryFailureCheck, + sendZkappQuery, transactionStatusQuery, - getEventsQuery, - getActionsQuery, - genesisConstantsQuery, - accountQuery, - currentSlotQuery, } from './graphql.js'; +import { ActionStates } from './mina.js'; +import { NetworkValue } from './precondition.js'; export { fetchAccount, diff --git a/src/lib/mina/v1/fetch.unit-test.ts b/src/lib/mina/v1/fetch.unit-test.ts index 7e7dbe3fd6..85c821ba52 100644 --- a/src/lib/mina/v1/fetch.unit-test.ts +++ b/src/lib/mina/v1/fetch.unit-test.ts @@ -1,4 +1,7 @@ +import { expect } from 'expect'; +import { afterEach, beforeEach, describe, test } from 'node:test'; import { PrivateKey, TokenId } from 'o1js'; + import { createActionsList, fetchAccount, @@ -11,9 +14,7 @@ import { } from './fetch.js'; import { mockFetchActionsResponse as fetchResponseWithTxInfo } from './fixtures/fetch-actions-response-with-transaction-info.js'; import { mockFetchActionsResponse as fetchResponseNoTxInfo } from './fixtures/fetch-actions-response-without-transaction-info.js'; -import { test, describe, beforeEach, afterEach } from 'node:test'; import { removeJsonQuotes } from './graphql.js'; -import { expect } from 'expect'; console.log('testing regex helpers'); diff --git a/src/lib/mina/v1/graphql.ts b/src/lib/mina/v1/graphql.ts index 87a81acb6d..ccd9ad5b36 100644 --- a/src/lib/mina/v1/graphql.ts +++ b/src/lib/mina/v1/graphql.ts @@ -1,7 +1,8 @@ +import { Types } from '../../../bindings/mina-transaction/v1/types.js'; import { UInt32 } from '../../provable/int.js'; + import { TokenId, type ZkappCommand } from './account-update.js'; import type { ActionStatesStringified } from './fetch.js'; -import { Types } from '../../../bindings/mina-transaction/v1/types.js'; export { type EpochData, diff --git a/src/lib/mina/v1/graphql.unit-test.ts b/src/lib/mina/v1/graphql.unit-test.ts index 75fa70499a..9ba803a4fe 100644 --- a/src/lib/mina/v1/graphql.unit-test.ts +++ b/src/lib/mina/v1/graphql.unit-test.ts @@ -1,8 +1,8 @@ -import { getActionsQuery, getEventsQuery } from './graphql.js'; +import { expect } from 'expect'; import { parse, print } from 'graphql'; +import { describe, test } from 'node:test'; -import { test, describe } from 'node:test'; -import { expect } from 'expect'; +import { getActionsQuery, getEventsQuery } from './graphql.js'; function normalizeGraphql(query: string) { return print(parse(query)); diff --git a/src/lib/mina/v1/hash-input.unit-test.ts b/src/lib/mina/v1/hash-input.unit-test.ts index 0362c038e1..a6a4a6c597 100644 --- a/src/lib/mina/v1/hash-input.unit-test.ts +++ b/src/lib/mina/v1/hash-input.unit-test.ts @@ -1,12 +1,13 @@ -import { AccountUpdate, Types, Permissions, ProvableExtended } from '../../../index.js'; import { expect } from 'expect'; + +import { Test } from '../../../bindings.js'; import { jsLayout } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; import { Json, provableFromLayout } from '../../../bindings/mina-transaction/gen/v1/transaction.js'; -import { packToFields } from '../../provable/crypto/poseidon.js'; -import { Random, test } from '../../testing/property.js'; +import { AccountUpdate, Permissions, ProvableExtended, Types } from '../../../index.js'; import { MlHashInput } from '../../ml/conversion.js'; import { MlFieldConstArray } from '../../ml/fields.js'; -import { Test } from '../../../bindings.js'; +import { packToFields } from '../../provable/crypto/poseidon.js'; +import { Random, test } from '../../testing/property.js'; let { hashInputFromJson } = await Test(); diff --git a/src/lib/mina/v1/local-blockchain.ts b/src/lib/mina/v1/local-blockchain.ts index 0da336f054..e80514c688 100644 --- a/src/lib/mina/v1/local-blockchain.ts +++ b/src/lib/mina/v1/local-blockchain.ts @@ -1,42 +1,43 @@ -import { SimpleLedger } from './transaction-logic/ledger.js'; -import { Ml } from '../../ml/conversion.js'; -import { transactionCommitments } from '../../../mina-signer/src/sign-zkapp-command.js'; import { Ledger, Test, initializeBindings } from '../../../bindings.js'; -import { Field } from '../../provable/wrapped.js'; -import { UInt32, UInt64 } from '../../provable/int.js'; -import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; -import { Account } from './account.js'; -import { ZkappCommand, TokenId, Authorization, Actions } from './account-update.js'; +import { Types, TypesBigint } from '../../../bindings/mina-transaction/v1/types.js'; +import { transactionCommitments } from '../../../mina-signer/src/sign-zkapp-command.js'; import { NetworkId } from '../../../mina-signer/src/types.js'; +import { Ml } from '../../ml/conversion.js'; +import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; +import { Field } from '../../provable/wrapped.js'; +import { prettifyStacktrace } from '../../util/errors.js'; import { TupleN } from '../../util/types.js'; -import { Types, TypesBigint } from '../../../bindings/mina-transaction/v1/types.js'; + +import { Actions, Authorization, TokenId, ZkappCommand } from './account-update.js'; +import { Account } from './account.js'; import { invalidTransactionError } from './errors.js'; import { - Transaction, - PendingTransaction, - createTransaction, - toTransactionPromise, - createIncludedTransaction, - createRejectedTransaction, - IncludedTransaction, - RejectedTransaction, - PendingTransactionStatus, - PendingTransactionPromise, - toPendingTransactionPromise, -} from './transaction.js'; -import { - type FeePayerSpec, type ActionStates, + type FeePayerSpec, Mina, defaultNetworkConstants, } from './mina-instance.js'; +import { SimpleLedger } from './transaction-logic/ledger.js'; import { - reportGetAccountError, defaultNetworkState, - verifyTransactionLimits, + reportGetAccountError, verifyAccountUpdate, + verifyTransactionLimits, } from './transaction-validation.js'; -import { prettifyStacktrace } from '../../util/errors.js'; +import { + IncludedTransaction, + PendingTransaction, + PendingTransactionPromise, + PendingTransactionStatus, + RejectedTransaction, + Transaction, + createIncludedTransaction, + createRejectedTransaction, + createTransaction, + toPendingTransactionPromise, + toTransactionPromise, +} from './transaction.js'; export { LocalBlockchain, TestPublicKey }; diff --git a/src/lib/mina/v1/mina-instance.ts b/src/lib/mina/v1/mina-instance.ts index 49dec3269b..a41898df80 100644 --- a/src/lib/mina/v1/mina-instance.ts +++ b/src/lib/mina/v1/mina-instance.ts @@ -1,15 +1,16 @@ /** * This module holds the global Mina instance and its interface. */ -import { Field } from '../../provable/wrapped.js'; -import { UInt64, UInt32 } from '../../provable/int.js'; +import type { NetworkId } from '../../../mina-signer/src/types.js'; import { PublicKey } from '../../provable/crypto/signature.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; +import { Field } from '../../provable/wrapped.js'; + import type { EventActionFilterOptions } from '././../../mina/v1/graphql.js'; -import type { NetworkId } from '../../../mina-signer/src/types.js'; import type { Account } from './account.js'; -import type { NetworkValue } from './precondition.js'; import type * as Fetch from './fetch.js'; -import type { TransactionPromise, PendingTransactionPromise, Transaction } from './transaction.js'; +import type { NetworkValue } from './precondition.js'; +import type { PendingTransactionPromise, Transaction, TransactionPromise } from './transaction.js'; export { Mina, diff --git a/src/lib/mina/v1/mina.network.unit-test.ts b/src/lib/mina/v1/mina.network.unit-test.ts index a34e165275..4b244188e8 100644 --- a/src/lib/mina/v1/mina.network.unit-test.ts +++ b/src/lib/mina/v1/mina.network.unit-test.ts @@ -1,6 +1,6 @@ -import { UInt64, Mina, AccountUpdate, PublicKey, Field, TokenId, PrivateKey } from 'o1js'; -import { describe, it, before, beforeEach, afterEach } from 'node:test'; import { expect } from 'expect'; +import { afterEach, before, beforeEach, describe, it } from 'node:test'; +import { AccountUpdate, Field, Mina, PrivateKey, PublicKey, TokenId, UInt64 } from 'o1js'; const defaultNetwork = Mina.Network({ networkId: 'testnet', diff --git a/src/lib/mina/v1/mina.ts b/src/lib/mina/v1/mina.ts index ecfe5fb144..b63a7fef8d 100644 --- a/src/lib/mina/v1/mina.ts +++ b/src/lib/mina/v1/mina.ts @@ -1,56 +1,57 @@ import { Test } from '../../../bindings.js'; -import { Field } from '../../provable/wrapped.js'; -import { UInt64 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { TokenId, Authorization } from './account-update.js'; -import * as Fetch from './fetch.js'; -import { humanizeErrors, invalidTransactionError } from './errors.js'; import { Types } from '../../../bindings/mina-transaction/v1/types.js'; -import { Account } from './account.js'; import { NetworkId } from '../../../mina-signer/src/types.js'; -import { currentTransaction } from './transaction-context.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { UInt64 } from '../../provable/int.js'; +import { Field } from '../../provable/wrapped.js'; + +import { Authorization, TokenId } from './account-update.js'; +import { Account } from './account.js'; +import { humanizeErrors, invalidTransactionError } from './errors.js'; +import * as Fetch from './fetch.js'; +import { type EventActionFilterOptions } from './graphql.js'; +import { LocalBlockchain, TestPublicKey } from './local-blockchain.js'; import { - type FeePayerSpec, type ActionStates, + type FeePayerSpec, + Mina, type NetworkConstants, activeInstance, - setActiveInstance, - Mina, - defaultNetworkConstants, currentSlot, + defaultNetworkConstants, + fetchActions, + fetchEvents, getAccount, - hasAccount, + getActions, getBalance, - getNetworkId, getNetworkConstants, + getNetworkId, getNetworkState, - fetchEvents, - fetchActions, - getActions, getProofsEnabled, + hasAccount, + setActiveInstance, } from './mina-instance.js'; -import { type EventActionFilterOptions } from './graphql.js'; +import { currentTransaction } from './transaction-context.js'; +import { + defaultNetworkState, + filterGroups, + reportGetAccountError, + verifyTransactionLimits, +} from './transaction-validation.js'; import { - Transaction, - type PendingTransaction, type IncludedTransaction, - type RejectedTransaction, - type PendingTransactionStatus, + type PendingTransaction, type PendingTransactionPromise, + type PendingTransactionStatus, + type RejectedTransaction, + Transaction, + createIncludedTransaction, + createRejectedTransaction, createTransaction, + toPendingTransactionPromise, toTransactionPromise, transaction, - createRejectedTransaction, - createIncludedTransaction, - toPendingTransactionPromise, } from './transaction.js'; -import { - reportGetAccountError, - verifyTransactionLimits, - defaultNetworkState, - filterGroups, -} from './transaction-validation.js'; -import { LocalBlockchain, TestPublicKey } from './local-blockchain.js'; export { LocalBlockchain, diff --git a/src/lib/mina/v1/mina.unit-test.ts b/src/lib/mina/v1/mina.unit-test.ts index d55d136909..8b0988923c 100644 --- a/src/lib/mina/v1/mina.unit-test.ts +++ b/src/lib/mina/v1/mina.unit-test.ts @@ -1,6 +1,7 @@ -import { filterGroups } from './mina.js'; import { expect } from 'expect'; +import { filterGroups } from './mina.js'; + let S = { isProved: false, isSigned: true }; let N = { isProved: false, isSigned: false }; let P = { isProved: true, isSigned: false }; diff --git a/src/lib/mina/v1/precondition.test.ts b/src/lib/mina/v1/precondition.test.ts index 8a6185d40c..10668c8f1b 100644 --- a/src/lib/mina/v1/precondition.test.ts +++ b/src/lib/mina/v1/precondition.test.ts @@ -1,13 +1,13 @@ import { - UInt64, - UInt32, - SmartContract, - Mina, AccountUpdate, - method, - PublicKey, Bool, Field, + Mina, + PublicKey, + SmartContract, + UInt32, + UInt64, + method, } from 'o1js'; class MyContract extends SmartContract { diff --git a/src/lib/mina/v1/precondition.ts b/src/lib/mina/v1/precondition.ts index c05729ac98..88170b3470 100644 --- a/src/lib/mina/v1/precondition.ts +++ b/src/lib/mina/v1/precondition.ts @@ -1,22 +1,23 @@ -import { Bool, Field } from '../../provable/wrapped.js'; -import { circuitValueEquals, cloneCircuitValue } from '../../provable/types/struct.js'; -import { Provable } from '../../provable/provable.js'; -import { activeInstance as Mina } from './mina-instance.js'; -import type { AccountUpdate } from './account-update.js'; -import { Int64, UInt32, UInt64 } from '../../provable/int.js'; -import { Layout } from '../../../bindings/mina-transaction/gen/v1/transaction.js'; import { jsLayout } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; -import { emptyReceiptChainHash, TokenSymbol } from '../../provable/crypto/poseidon.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; +import { Layout } from '../../../bindings/mina-transaction/gen/v1/transaction.js'; import { ActionState, Actions, ZkappUri, } from '../../../bindings/mina-transaction/v1/transaction-leaves.js'; import type { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import { TokenSymbol, emptyReceiptChainHash } from '../../provable/crypto/poseidon.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { Int64, UInt32, UInt64 } from '../../provable/int.js'; +import { Provable } from '../../provable/provable.js'; +import { circuitValueEquals, cloneCircuitValue } from '../../provable/types/struct.js'; +import { Bool, Field } from '../../provable/wrapped.js'; +import { assertInternal } from '../../util/errors.js'; + +import type { AccountUpdate } from './account-update.js'; import type { Permissions } from './account-update.js'; +import { activeInstance as Mina } from './mina-instance.js'; import { ZkappStateLength } from './mina-instance.js'; -import { assertInternal } from '../../util/errors.js'; export { preconditions, diff --git a/src/lib/mina/v1/smart-contract-context.ts b/src/lib/mina/v1/smart-contract-context.ts index 196c3c0c35..54ed120593 100644 --- a/src/lib/mina/v1/smart-contract-context.ts +++ b/src/lib/mina/v1/smart-contract-context.ts @@ -1,8 +1,9 @@ -import type { SmartContract } from './zkapp.js'; -import type { AccountUpdate, AccountUpdateLayout } from './account-update.js'; +import { assert } from '../../util/assert.js'; import { Context } from '../../util/global-context.js'; + +import type { AccountUpdate, AccountUpdateLayout } from './account-update.js'; import { currentTransaction } from './transaction-context.js'; -import { assert } from '../../util/assert.js'; +import type { SmartContract } from './zkapp.js'; export { smartContractContext, SmartContractContext, accountUpdateLayout, contract }; diff --git a/src/lib/mina/v1/state.ts b/src/lib/mina/v1/state.ts index 71d99a942f..9c3297e61a 100644 --- a/src/lib/mina/v1/state.ts +++ b/src/lib/mina/v1/state.ts @@ -1,20 +1,21 @@ -import { FlexibleProvablePure } from '../../provable/types/struct.js'; -import { AccountUpdate, TokenId } from './account-update.js'; import { PublicKey } from '../../provable/crypto/signature.js'; -import * as Mina from './mina.js'; -import { fetchAccount, networkConfig } from './fetch.js'; -import { SmartContract } from './zkapp.js'; -import { Account } from './account.js'; import { Provable } from '../../provable/provable.js'; -import { Field } from '../../provable/wrapped.js'; import { ProvablePure, ProvableType, ProvableTypePure, } from '../../provable/types/provable-intf.js'; -import { ensureConsistentPrecondition } from './precondition.js'; +import { FlexibleProvablePure } from '../../provable/types/struct.js'; +import { Field } from '../../provable/wrapped.js'; import { Bool } from '../../provable/wrapped.js'; +import { AccountUpdate, TokenId } from './account-update.js'; +import { Account } from './account.js'; +import { fetchAccount, networkConfig } from './fetch.js'; +import * as Mina from './mina.js'; +import { ensureConsistentPrecondition } from './precondition.js'; +import { SmartContract } from './zkapp.js'; + // external API export { State, state, declareState }; // internal API diff --git a/src/lib/mina/v1/test/dynamic-call.unit-test.ts b/src/lib/mina/v1/test/dynamic-call.unit-test.ts index d7eac93710..a52309444a 100644 --- a/src/lib/mina/v1/test/dynamic-call.unit-test.ts +++ b/src/lib/mina/v1/test/dynamic-call.unit-test.ts @@ -4,7 +4,7 @@ * * In other words, the exact implementation/constraints of zkApp methods we call are not hard-coded in the caller contract. */ -import { Bool, UInt64, SmartContract, method, PublicKey, Mina } from '../../../../index.js'; +import { Bool, Mina, PublicKey, SmartContract, UInt64, method } from '../../../../index.js'; type Subcontract = SmartContract & { submethod(a: UInt64, b: UInt64): Promise; diff --git a/src/lib/mina/v1/test/test-contract.ts b/src/lib/mina/v1/test/test-contract.ts index 8b99f33130..540d0fe14f 100644 --- a/src/lib/mina/v1/test/test-contract.ts +++ b/src/lib/mina/v1/test/test-contract.ts @@ -1,13 +1,14 @@ /** * Framework for testing Mina smart contracts against a local Mina instance. */ -import { SmartContract } from '../zkapp.js'; -import * as Mina from '../mina.js'; -import { OffchainField, OffchainMap, OffchainState } from '../actions/offchain-state.js'; import assert from 'assert'; + +import { PrivateKey, PublicKey } from '../../../provable/crypto/signature.js'; import { Option } from '../../../provable/option.js'; import { BatchReducer } from '../actions/batch-reducer.js'; -import { PrivateKey, PublicKey } from '../../../provable/crypto/signature.js'; +import { OffchainField, OffchainMap, OffchainState } from '../actions/offchain-state.js'; +import * as Mina from '../mina.js'; +import { SmartContract } from '../zkapp.js'; export { testLocal, transaction, deploy, expectState, expectBalance, TestInstruction }; diff --git a/src/lib/mina/v1/token.test.ts b/src/lib/mina/v1/token.test.ts index 0d3bf112e2..9bb0d79b8e 100644 --- a/src/lib/mina/v1/token.test.ts +++ b/src/lib/mina/v1/token.test.ts @@ -1,20 +1,20 @@ import { - State, - state, - UInt64, - Bool, - SmartContract, - Mina, AccountUpdate, - method, - PublicKey, - Permissions, - VerificationKey, + AccountUpdateForest, + Bool, Field, Int64, - TokenId, + Mina, + Permissions, + PublicKey, + SmartContract, + State, TokenContract as TokenContractBase, - AccountUpdateForest, + TokenId, + UInt64, + VerificationKey, + method, + state, } from 'o1js'; const tokenSymbol = 'TOKEN'; diff --git a/src/lib/mina/v1/token/forest-iterator.ts b/src/lib/mina/v1/token/forest-iterator.ts index cbcab63f72..38857e09d2 100644 --- a/src/lib/mina/v1/token/forest-iterator.ts +++ b/src/lib/mina/v1/token/forest-iterator.ts @@ -1,14 +1,14 @@ +import { assert } from '../../../provable/gadgets/common.js'; +import { MerkleList, MerkleListIterator } from '../../../provable/merkle-list.js'; +import { Provable } from '../../../provable/provable.js'; +import { Struct } from '../../../provable/types/struct.js'; +import { Field } from '../../../provable/wrapped.js'; import { AccountUpdate, AccountUpdateForest, AccountUpdateTreeBase, TokenId, } from '../account-update.js'; -import { Field } from '../../../provable/wrapped.js'; -import { Provable } from '../../../provable/provable.js'; -import { Struct } from '../../../provable/types/struct.js'; -import { assert } from '../../../provable/gadgets/common.js'; -import { MerkleListIterator, MerkleList } from '../../../provable/merkle-list.js'; export { TokenAccountUpdateIterator }; diff --git a/src/lib/mina/v1/token/forest-iterator.unit-test.ts b/src/lib/mina/v1/token/forest-iterator.unit-test.ts index def287cc4e..6afa46cfbb 100644 --- a/src/lib/mina/v1/token/forest-iterator.unit-test.ts +++ b/src/lib/mina/v1/token/forest-iterator.unit-test.ts @@ -1,21 +1,23 @@ -import { Random, test } from '../../../testing/property.js'; +import assert from 'assert'; + +import { Pickles, initializeBindings } from '../../../../bindings.js'; +import { TypesBigint } from '../../../../bindings/mina-transaction/v1/types.js'; import { RandomTransaction } from '../../../../mina-signer/src/random-transaction.js'; -import { TokenAccountUpdateIterator } from './forest-iterator.js'; +import { + accountUpdatesToCallForest, + callForestHash, +} from '../../../../mina-signer/src/sign-zkapp-command.js'; +import { PublicKey } from '../../../provable/crypto/signature.js'; +import { Bool, Field } from '../../../provable/wrapped.js'; +import { Random, test } from '../../../testing/property.js'; import { AccountUpdate, AccountUpdateForest, TokenId, hashAccountUpdate, } from '../account-update.js'; -import { TypesBigint } from '../../../../bindings/mina-transaction/v1/types.js'; -import { Pickles, initializeBindings } from '../../../../bindings.js'; -import { - accountUpdatesToCallForest, - callForestHash, -} from '../../../../mina-signer/src/sign-zkapp-command.js'; -import assert from 'assert'; -import { Field, Bool } from '../../../provable/wrapped.js'; -import { PublicKey } from '../../../provable/crypto/signature.js'; + +import { TokenAccountUpdateIterator } from './forest-iterator.js'; // RANDOM NUMBER GENERATORS for account updates diff --git a/src/lib/mina/v1/token/token-contract.ts b/src/lib/mina/v1/token/token-contract.ts index d6b04b495d..3602f139dc 100644 --- a/src/lib/mina/v1/token/token-contract.ts +++ b/src/lib/mina/v1/token/token-contract.ts @@ -1,7 +1,7 @@ -import { Bool } from '../../../provable/wrapped.js'; -import { UInt64, Int64 } from '../../../provable/int.js'; -import { Provable } from '../../../provable/provable.js'; import { PublicKey } from '../../../provable/crypto/signature.js'; +import { Int64, UInt64 } from '../../../provable/int.js'; +import { Provable } from '../../../provable/provable.js'; +import { Bool } from '../../../provable/wrapped.js'; import { AccountUpdate, AccountUpdateForest, @@ -10,6 +10,7 @@ import { TokenId, } from '../account-update.js'; import { DeployArgs, SmartContract } from '../zkapp.js'; + import { TokenAccountUpdateIterator } from './forest-iterator.js'; import { tokenMethods } from './token-methods.js'; diff --git a/src/lib/mina/v1/token/token-contract.unit-test.ts b/src/lib/mina/v1/token/token-contract.unit-test.ts index b9c2db40b2..db85ef2f56 100644 --- a/src/lib/mina/v1/token/token-contract.unit-test.ts +++ b/src/lib/mina/v1/token/token-contract.unit-test.ts @@ -1,13 +1,14 @@ import assert from 'node:assert'; + import { - method, - Mina, - UInt64, AccountUpdate, AccountUpdateForest, - TokenContract, Int64, + Mina, PrivateKey, + TokenContract, + UInt64, + method, } from '../../../../index.js'; class ExampleTokenContract extends TokenContract { diff --git a/src/lib/mina/v1/token/token-methods.ts b/src/lib/mina/v1/token/token-methods.ts index cef6b8306f..ca0ad3251a 100644 --- a/src/lib/mina/v1/token/token-methods.ts +++ b/src/lib/mina/v1/token/token-methods.ts @@ -1,9 +1,9 @@ -import { AccountUpdate, Authorization, TokenId } from '../account-update.js'; -import { isSmartContract } from '../smart-contract-base.js'; import { PublicKey } from '../../../provable/crypto/signature.js'; -import type { SmartContract } from '../zkapp.js'; import { UInt64 } from '../../../provable/int.js'; import { Bool, Field } from '../../../provable/wrapped.js'; +import { AccountUpdate, Authorization, TokenId } from '../account-update.js'; +import { isSmartContract } from '../smart-contract-base.js'; +import type { SmartContract } from '../zkapp.js'; export { tokenMethods }; diff --git a/src/lib/mina/v1/transaction-context.ts b/src/lib/mina/v1/transaction-context.ts index e1cfa22330..c39bc86e7f 100644 --- a/src/lib/mina/v1/transaction-context.ts +++ b/src/lib/mina/v1/transaction-context.ts @@ -1,7 +1,8 @@ -import type { AccountUpdateLayout } from './account-update.js'; import type { PublicKey } from '../../provable/crypto/signature.js'; import { Context } from '../../util/global-context.js'; +import type { AccountUpdateLayout } from './account-update.js'; + export { currentTransaction, CurrentTransaction, FetchMode }; type FetchMode = 'fetch' | 'cached' | 'test'; diff --git a/src/lib/mina/v1/transaction-logic/ledger.ts b/src/lib/mina/v1/transaction-logic/ledger.ts index 7b870d1f5b..dcdd164837 100644 --- a/src/lib/mina/v1/transaction-logic/ledger.ts +++ b/src/lib/mina/v1/transaction-logic/ledger.ts @@ -1,12 +1,13 @@ /** * A ledger of accounts - simple model of a local blockchain. */ +import { Types } from '../../../../bindings/mina-transaction/v1/types.js'; import { PublicKey } from '../../../provable/crypto/signature.js'; +import { Field } from '../../../provable/field.js'; import type { AccountUpdate } from '../account-update.js'; import { Account, newAccount } from '../account.js'; -import { Field } from '../../../provable/field.js'; + import { applyAccountUpdate } from './apply.js'; -import { Types } from '../../../../bindings/mina-transaction/v1/types.js'; export { SimpleLedger }; diff --git a/src/lib/mina/v1/transaction-validation.ts b/src/lib/mina/v1/transaction-validation.ts index 77154a3ecb..cfc32fe9e2 100644 --- a/src/lib/mina/v1/transaction-validation.ts +++ b/src/lib/mina/v1/transaction-validation.ts @@ -1,27 +1,28 @@ /** * This module holds the global Mina instance and its interface. */ +import { Types, TypesBigint } from '../../../bindings/mina-transaction/v1/types.js'; +import { verifyAccountUpdateSignature } from '../../../mina-signer/src/sign-zkapp-command.js'; +import type { NetworkId } from '../../../mina-signer/src/types.js'; +import { VerificationKey } from '../../proof-system/verification-key.js'; +import { JsonProof, verify } from '../../proof-system/zkprogram.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { assert } from '../../provable/gadgets/common.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; +import { cloneCircuitValue } from '../../provable/types/struct.js'; +import { Field } from '../../provable/wrapped.js'; + import { - ZkappCommand, - TokenId, + AccountUpdate, Events, + TokenId, + ZkappCommand, ZkappPublicInput, - AccountUpdate, dummySignature, } from './account-update.js'; -import { Field } from '../../provable/wrapped.js'; -import { UInt64, UInt32 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { JsonProof, verify } from '../../proof-system/zkprogram.js'; -import { verifyAccountUpdateSignature } from '../../../mina-signer/src/sign-zkapp-command.js'; -import { TransactionCost, TransactionLimits } from './constants.js'; -import { cloneCircuitValue } from '../../provable/types/struct.js'; -import { assert } from '../../provable/gadgets/common.js'; -import { Types, TypesBigint } from '../../../bindings/mina-transaction/v1/types.js'; -import type { NetworkId } from '../../../mina-signer/src/types.js'; import type { Account } from './account.js'; +import { TransactionCost, TransactionLimits } from './constants.js'; import type { NetworkValue } from './precondition.js'; -import { VerificationKey } from '../../proof-system/verification-key.js'; export { reportGetAccountError, diff --git a/src/lib/mina/v1/transaction.test.ts b/src/lib/mina/v1/transaction.test.ts index 6b3572d62f..1138867283 100644 --- a/src/lib/mina/v1/transaction.test.ts +++ b/src/lib/mina/v1/transaction.test.ts @@ -1,4 +1,4 @@ -import { UInt64, SmartContract, Mina, AccountUpdate, method } from 'o1js'; +import { AccountUpdate, Mina, SmartContract, UInt64, method } from 'o1js'; class MyContract extends SmartContract { @method async shouldMakeCompileThrow() { diff --git a/src/lib/mina/v1/transaction.ts b/src/lib/mina/v1/transaction.ts index df24e58274..662828c067 100644 --- a/src/lib/mina/v1/transaction.ts +++ b/src/lib/mina/v1/transaction.ts @@ -1,28 +1,29 @@ +import { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import { Proof } from '../../proof-system/proof.js'; +import { Empty } from '../../proof-system/zkprogram.js'; +import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; +import { Provable } from '../../provable/provable.js'; +import { Field } from '../../provable/wrapped.js'; +import { assertPromise } from '../../util/assert.js'; + import { - ZkappCommand, AccountUpdate, - ZkappPublicInput, AccountUpdateLayout, FeePayerUnsigned, - addMissingSignatures, TokenId, + ZkappCommand, + ZkappPublicInput, addMissingProofs, + addMissingSignatures, } from './account-update.js'; -import { Field } from '../../provable/wrapped.js'; -import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; -import { UInt32, UInt64 } from '../../provable/int.js'; -import { Empty } from '../../proof-system/zkprogram.js'; -import { Proof } from '../../proof-system/proof.js'; -import { currentTransaction } from './transaction-context.js'; -import { Provable } from '../../provable/provable.js'; -import { assertPreconditionInvariants } from './precondition.js'; import { Account } from './account.js'; -import { type FeePayerSpec, activeInstance } from './mina-instance.js'; import * as Fetch from './fetch.js'; import { type SendZkAppResponse, sendZkappQuery } from './graphql.js'; +import { type FeePayerSpec, activeInstance } from './mina-instance.js'; +import { assertPreconditionInvariants } from './precondition.js'; +import { currentTransaction } from './transaction-context.js'; import { type FetchMode } from './transaction-context.js'; -import { assertPromise } from '../../util/assert.js'; -import { Types } from '../../../bindings/mina-transaction/v1/types.js'; import { getTotalTimeRequired } from './transaction-validation.js'; export { diff --git a/src/lib/mina/v2/account-update.ts b/src/lib/mina/v2/account-update.ts index fee9b780b7..74cf7fe6fd 100644 --- a/src/lib/mina/v2/account-update.ts +++ b/src/lib/mina/v2/account-update.ts @@ -1,3 +1,29 @@ +import { Pickles } from '../../../bindings.js'; +import { mocks, prefixes } from '../../../bindings/crypto/constants.js'; +import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; +import { VerificationKey } from '../../../lib/proof-system/verification-key.js'; +import * as PoseidonBigint from '../../../mina-signer/src/poseidon-bigint.js'; +import { + Signature, + signFieldElement, + zkAppBodyPrefix, +} from '../../../mina-signer/src/signature.js'; +import { NetworkId } from '../../../mina-signer/src/types.js'; +import { Proof } from '../../proof-system/zkprogram.js'; +import { Bool } from '../../provable/bool.js'; +import { + TokenSymbol, + emptyHashWithPrefix, + hashWithPrefix, + packToFields, +} from '../../provable/crypto/poseidon.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { Field } from '../../provable/field.js'; +import { Int64, UInt64 } from '../../provable/int.js'; +import { HashInput } from '../../provable/types/provable-derivers.js'; +import { Provable } from '../../provable/types/provable-intf.js'; +import { Struct } from '../../provable/types/struct.js'; + import { AccountId, AccountTiming } from './account.js'; import { AccountUpdateAuthorization, @@ -10,31 +36,6 @@ import { Option, TokenId, Update, ZkappUri, mapUndefined } from './core.js'; import { Permissions, PermissionsDescription } from './permissions.js'; import { Preconditions, PreconditionsDescription } from './preconditions.js'; import { GenericStateUpdates, StateDefinition, StateLayout, StateUpdates } from './state.js'; -import { Pickles } from '../../../bindings.js'; -import { Bool } from '../../provable/bool.js'; -import { Field } from '../../provable/field.js'; -import { Int64, UInt64 } from '../../provable/int.js'; -import { Proof } from '../../proof-system/zkprogram.js'; -import { - emptyHashWithPrefix, - hashWithPrefix, - packToFields, - TokenSymbol, -} from '../../provable/crypto/poseidon.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { HashInput } from '../../provable/types/provable-derivers.js'; -import { Provable } from '../../provable/types/provable-intf.js'; -import { mocks, prefixes } from '../../../bindings/crypto/constants.js'; -import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; -import * as PoseidonBigint from '../../../mina-signer/src/poseidon-bigint.js'; -import { - Signature, - signFieldElement, - zkAppBodyPrefix, -} from '../../../mina-signer/src/signature.js'; -import { NetworkId } from '../../../mina-signer/src/types.js'; -import { Struct } from '../../provable/types/struct.js'; -import { VerificationKey } from '../../../lib/proof-system/verification-key.js'; // TODO: make private abstractions over many fields (eg new apis for Update and Constraint.*) // TODO: replay checks diff --git a/src/lib/mina/v2/account-update.unit-test.ts b/src/lib/mina/v2/account-update.unit-test.ts index b4dd928a42..907ecee7b2 100644 --- a/src/lib/mina/v2/account-update.unit-test.ts +++ b/src/lib/mina/v2/account-update.unit-test.ts @@ -1,15 +1,9 @@ -import { AccountUpdate, Authorized, GenericData } from './account-update.js'; -import { AccountId, AccountTiming } from './account.js'; -import { AccountUpdateAuthorizationKind } from './authorization.js'; -import { TokenId, Update } from './core.js'; -import { Precondition } from './preconditions.js'; -import { GenericStatePreconditions, GenericStateUpdates } from './state.js'; -import { AccountUpdate as V1AccountUpdateImpl } from '../v1/account-update.js'; -import { VerificationKey } from '../../proof-system/verification-key.js'; -import { Bool } from '../../provable/bool.js'; -import { Field } from '../../provable/field.js'; -import { UInt32, UInt64, Int64, Sign } from '../../provable/int.js'; -import { PrivateKey } from '../../provable/crypto/signature.js'; +import { expect } from 'expect'; + +import { jsLayout as layoutV1 } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; +import * as ValuesV1 from '../../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; +import * as JsonV1 from '../../../bindings/mina-transaction/gen/v1/transaction-json.js'; +import * as TypesV1 from '../../../bindings/mina-transaction/gen/v1/transaction.js'; import { Actions as V1Actions, Events as V1Events, @@ -17,26 +11,32 @@ import { TokenSymbol as V1TokenSymbol, ZkappUri as V1ZkappUri, } from '../../../bindings/mina-transaction/v1/transaction-leaves.js'; -import * as TypesV1 from '../../../bindings/mina-transaction/gen/v1/transaction.js'; -import * as ValuesV1 from '../../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import * as JsonV1 from '../../../bindings/mina-transaction/gen/v1/transaction-json.js'; -import { jsLayout as layoutV1 } from '../../../bindings/mina-transaction/gen/v1/js-layout.js'; -import { expect } from 'expect'; - -import { ZkappConstants } from '../v1/constants.js'; -import { - testV1V2ClassEquivalence, - testV1V2ValueEquivalence, - testV2Encoding, -} from './test/utils.js'; +import { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import { hashWithPrefix, packToFields } from '../../../lib/provable/crypto/poseidon.js'; import { Signature, signFieldElement, zkAppBodyPrefix, } from '../../../mina-signer/src/signature.js'; +import { VerificationKey } from '../../proof-system/verification-key.js'; +import { Bool } from '../../provable/bool.js'; +import { PrivateKey } from '../../provable/crypto/signature.js'; +import { Field } from '../../provable/field.js'; +import { Int64, Sign, UInt32, UInt64 } from '../../provable/int.js'; +import { AccountUpdate as V1AccountUpdateImpl } from '../v1/account-update.js'; +import { ZkappConstants } from '../v1/constants.js'; -import { Types } from '../../../bindings/mina-transaction/v1/types.js'; -import { packToFields, hashWithPrefix } from '../../../lib/provable/crypto/poseidon.js'; +import { AccountUpdate, Authorized, GenericData } from './account-update.js'; +import { AccountId, AccountTiming } from './account.js'; +import { AccountUpdateAuthorizationKind } from './authorization.js'; +import { TokenId, Update } from './core.js'; +import { Precondition } from './preconditions.js'; +import { GenericStatePreconditions, GenericStateUpdates } from './state.js'; +import { + testV1V2ClassEquivalence, + testV1V2ValueEquivalence, + testV2Encoding, +} from './test/utils.js'; function testHashEquality(v1: TypesV1.AccountUpdate, v2: Authorized) { expect(TypesV1.AccountUpdate.toInput(v1)).toEqual(v2.toInput()); diff --git a/src/lib/mina/v2/account.ts b/src/lib/mina/v2/account.ts index f721692558..27ddde6cce 100644 --- a/src/lib/mina/v2/account.ts +++ b/src/lib/mina/v2/account.ts @@ -1,14 +1,15 @@ -import { Permissions } from './permissions.js'; -import { StateDefinition, StateLayout, StateValues } from './state.js'; +import { TokenSymbol } from '../../../lib/provable/crypto/poseidon.js'; import { VerificationKey } from '../../proof-system/verification-key.js'; import { Bool } from '../../provable/bool.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; import { Field } from '../../provable/field.js'; -import { UInt64, UInt32 } from '../../provable/int.js'; +import { UInt32, UInt64 } from '../../provable/int.js'; import { Provable } from '../../provable/provable.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; import { Unconstrained } from '../../provable/types/unconstrained.js'; -import { TokenSymbol } from '../../../lib/provable/crypto/poseidon.js'; + import { TokenId, ZkappUri } from './core.js'; +import { Permissions } from './permissions.js'; +import { StateDefinition, StateLayout, StateValues } from './state.js'; export { AccountId, AccountTiming, AccountIdSet, Account, AccountIdMap }; diff --git a/src/lib/mina/v2/authorization.ts b/src/lib/mina/v2/authorization.ts index d46461e0a7..cb8da711eb 100644 --- a/src/lib/mina/v2/authorization.ts +++ b/src/lib/mina/v2/authorization.ts @@ -1,11 +1,11 @@ +import { protocolVersions } from '../../../bindings/crypto/constants.js'; +import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; +import { NetworkId } from '../../../mina-signer/src/types.js'; import { Bool } from '../../provable/bool.js'; +import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; import { Field } from '../../provable/field.js'; import { UInt32 } from '../../provable/int.js'; -import { PrivateKey, PublicKey } from '../../provable/crypto/signature.js'; import { HashInput } from '../../provable/types/provable-derivers.js'; -import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; -import { NetworkId } from '../../../mina-signer/src/types.js'; -import { protocolVersions } from '../../../bindings/crypto/constants.js'; export { AccountUpdateAuthorization, diff --git a/src/lib/mina/v2/core.ts b/src/lib/mina/v2/core.ts index d7a1539aef..0a86d2f260 100644 --- a/src/lib/mina/v2/core.ts +++ b/src/lib/mina/v2/core.ts @@ -1,12 +1,12 @@ -import { Bool } from '../../provable/bool.js'; -import { Field } from '../../provable/field.js'; -import { Provable } from '../../provable/types/provable-intf.js'; -import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; +import { prefixes } from '../../../bindings/crypto/constants.js'; import { bytesToBits, stringToBytes } from '../../../bindings/lib/binable.js'; import { GenericHashInput } from '../../../bindings/lib/generic.js'; -import { hashWithPrefix, packToFields } from '../../../lib/provable/crypto/poseidon.js'; -import { prefixes } from '../../../bindings/crypto/constants.js'; import { Types } from '../../../bindings/mina-transaction/v1/types.js'; +import * as Bindings from '../../../bindings/mina-transaction/v2/index.js'; +import { hashWithPrefix, packToFields } from '../../../lib/provable/crypto/poseidon.js'; +import { Bool } from '../../provable/bool.js'; +import { Field } from '../../provable/field.js'; +import { Provable } from '../../provable/types/provable-intf.js'; export { Option, diff --git a/src/lib/mina/v2/dsl/mina-program.ts b/src/lib/mina/v2/dsl/mina-program.ts index 9362cfbb21..c302f4d4c2 100644 --- a/src/lib/mina/v2/dsl/mina-program.ts +++ b/src/lib/mina/v2/dsl/mina-program.ts @@ -1,30 +1,30 @@ +import { Cache } from '../../../proof-system/cache.js'; +import { VerificationKey } from '../../../proof-system/verification-key.js'; +import { Proof, ZkProgram, Method as ZkProgramMethod } from '../../../proof-system/zkprogram.js'; +import { Bool } from '../../../provable/bool.js'; +import { PublicKey } from '../../../provable/crypto/signature.js'; +import { Field } from '../../../provable/field.js'; +import { UInt32, UInt64 } from '../../../provable/int.js'; +import { Provable } from '../../../provable/provable.js'; +import { Unconstrained } from '../../../provable/types/unconstrained.js'; +import { ZkappConstants } from '../../v1/constants.js'; import { AccountUpdate, AccountUpdateCommitment, AccountUpdateTree, AccountUpdateTreeDescription, - ContextFreeAccountUpdateDescription, ContextFreeAccountUpdate, + ContextFreeAccountUpdateDescription, DynamicProvable, } from '../account-update.js'; -import { AccountUpdateAuthorizationKind } from '../authorization.js'; import { Account, AccountId } from '../account.js'; -import { mapObject, ProvableTuple, ProvableTupleInstances } from '../core.js'; +import { AccountUpdateAuthorizationKind } from '../authorization.js'; +import { ProvableTuple, ProvableTupleInstances, mapObject } from '../core.js'; +import { MinaAmount } from '../currency.js'; import { getCallerFrame } from '../errors.js'; -import { StateDefinition, StateMask, StateLayout, StateReader, StateValues } from '../state.js'; -import { checkAndApplyAccountUpdate } from '../zkapp-logic.js'; +import { StateDefinition, StateLayout, StateMask, StateReader, StateValues } from '../state.js'; import { ZkappCommandContext } from '../transaction.js'; -import { Cache } from '../../../proof-system/cache.js'; -import { Method as ZkProgramMethod, Proof, ZkProgram } from '../../../proof-system/zkprogram.js'; -import { Bool } from '../../../provable/bool.js'; -import { Field } from '../../../provable/field.js'; -import { UInt32, UInt64 } from '../../../provable/int.js'; -import { Provable } from '../../../provable/provable.js'; -import { PublicKey } from '../../../provable/crypto/signature.js'; -import { Unconstrained } from '../../../provable/types/unconstrained.js'; -import { VerificationKey } from '../../../proof-system/verification-key.js'; -import { ZkappConstants } from '../../v1/constants.js'; -import { MinaAmount } from '../currency.js'; +import { checkAndApplyAccountUpdate } from '../zkapp-logic.js'; export { MinaProgramEnv, diff --git a/src/lib/mina/v2/errors.ts b/src/lib/mina/v2/errors.ts index 98b2ac42c1..b322f88251 100644 --- a/src/lib/mina/v2/errors.ts +++ b/src/lib/mina/v2/errors.ts @@ -1,6 +1,7 @@ +import StackTrace from 'stacktrace-js'; + import { AccountId } from './account.js'; import { TokenId } from './core.js'; -import StackTrace from 'stacktrace-js'; // TODO: We currently accumulate full errors with stack traces pointing to the internal code that // performs the checks. This is nice for debugging, but undesirable for performance reasons, diff --git a/src/lib/mina/v2/permissions.ts b/src/lib/mina/v2/permissions.ts index d1e759db26..4ebf751633 100644 --- a/src/lib/mina/v2/permissions.ts +++ b/src/lib/mina/v2/permissions.ts @@ -1,11 +1,12 @@ +import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; +import { Field } from '../../provable/field.js'; +import { Provable } from '../../provable/provable.js'; + import { AuthorizationLevel, AuthorizationLevelIdentifier, VerificationKeyAuthorizationLevel, } from './authorization.js'; -import { Field } from '../../provable/field.js'; -import { Provable } from '../../provable/provable.js'; -import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; // TODO: rename some of these to make them clearer (eg editActionState, timing) // TODO: consider only allowing the identifiers to be specified to some special Permissions.constant function (to avoid people breaking the DSL pattern accidentally) diff --git a/src/lib/mina/v2/preconditions.ts b/src/lib/mina/v2/preconditions.ts index 16a982d113..1782985b08 100644 --- a/src/lib/mina/v2/preconditions.ts +++ b/src/lib/mina/v2/preconditions.ts @@ -1,20 +1,21 @@ -import { Compare, Eq, Option, Range } from './core.js'; -import { - GenericStatePreconditions, - StatePreconditions, - StateDefinition, - StateLayout, -} from './state.js'; +import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; +// TODO: pull last remanants of old transaction leavs into v2 bindings +import { Actions } from '../../../bindings/mina-transaction/v1/transaction-leaves.js'; import { Bool } from '../../provable/bool.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; import { Field } from '../../provable/field.js'; import { UInt32, UInt64 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; import { HashInput } from '../../provable/types/provable-derivers.js'; -// TODO: pull last remanants of old transaction leavs into v2 bindings -import { Actions } from '../../../bindings/mina-transaction/v1/transaction-leaves.js'; -import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; import { ZkappConstants } from '../v1/constants.js'; + +import { Compare, Eq, Option, Range } from './core.js'; import { MinaAmount } from './currency.js'; +import { + GenericStatePreconditions, + StateDefinition, + StateLayout, + StatePreconditions, +} from './state.js'; export { Preconditions, diff --git a/src/lib/mina/v2/state.ts b/src/lib/mina/v2/state.ts index c28ab6beed..220a23c844 100644 --- a/src/lib/mina/v2/state.ts +++ b/src/lib/mina/v2/state.ts @@ -8,17 +8,16 @@ * in preconditions and updates within AccountUpdates. There is also a GenericState representation * which maps to the standard field array representation which is used by the protocol. */ - // TODO: there is a lot of duplication here on the generic representation that we can reduce - -import { Empty, Eq, ProvableInstance, Update } from './core.js'; -import { Precondition } from './preconditions.js'; import { Bool } from '../../provable/bool.js'; import { Field } from '../../provable/field.js'; import { Provable } from '../../provable/provable.js'; import { Unconstrained } from '../../provable/types/unconstrained.js'; import { ZkappConstants } from '../v1/constants.js'; +import { Empty, Eq, ProvableInstance, Update } from './core.js'; +import { Precondition } from './preconditions.js'; + export { StateValues, GenericStatePreconditions, diff --git a/src/lib/mina/v2/test/utils.ts b/src/lib/mina/v2/test/utils.ts index 8c66e36676..c839400b09 100644 --- a/src/lib/mina/v2/test/utils.ts +++ b/src/lib/mina/v2/test/utils.ts @@ -1,7 +1,8 @@ +import { expect } from 'expect'; + import { Field } from '../../../provable/field.js'; import { Provable } from '../../../provable/provable.js'; import { HashInput } from '../../../provable/types/provable-derivers.js'; -import { expect } from 'expect'; export function stripPrototypes(x: any): any { if (typeof x === 'object') { diff --git a/src/lib/mina/v2/transaction.ts b/src/lib/mina/v2/transaction.ts index 3b03db198e..578707d3da 100644 --- a/src/lib/mina/v2/transaction.ts +++ b/src/lib/mina/v2/transaction.ts @@ -1,26 +1,27 @@ +import { mocks } from '../../../bindings/crypto/constants.js'; +import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; +import { Memo } from '../../../mina-signer/src/memo.js'; +import { hashWithPrefix, prefixes } from '../../../mina-signer/src/poseidon-bigint.js'; +import { Signature, signFieldElement } from '../../../mina-signer/src/signature.js'; +import { NetworkId } from '../../../mina-signer/src/types.js'; +import { Bool } from '../../provable/bool.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { Field } from '../../provable/field.js'; +import { Int64, Sign, UInt32, UInt64 } from '../../provable/int.js'; + +import { AccountUpdate, AccountUpdateTree, Authorized, GenericData } from './account-update.js'; +import { Account, AccountId, AccountIdSet } from './account.js'; import { AccountUpdateAuthorizationKind, ZkappCommandAuthorizationEnvironment, ZkappFeePaymentAuthorizationEnvironment, } from './authorization.js'; -import { AccountUpdate, AccountUpdateTree, Authorized, GenericData } from './account-update.js'; -import { Account, AccountId, AccountIdSet } from './account.js'; import { TokenId } from './core.js'; -import { AccountUpdateErrorTrace, getCallerFrame, ZkappCommandErrorTrace } from './errors.js'; +import { AccountUpdateErrorTrace, ZkappCommandErrorTrace, getCallerFrame } from './errors.js'; import { Precondition } from './preconditions.js'; import { StateLayout } from './state.js'; import { ChainView, LedgerView } from './views.js'; import { ApplyState, checkAndApplyAccountUpdate, checkAndApplyFeePayment } from './zkapp-logic.js'; -import { Bool } from '../../provable/bool.js'; -import { Field } from '../../provable/field.js'; -import { Int64, Sign, UInt32, UInt64 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { mocks } from '../../../bindings/crypto/constants.js'; -import * as BindingsLayout from '../../../bindings/mina-transaction/gen/v2/js-layout.js'; -import { Memo } from '../../../mina-signer/src/memo.js'; -import { hashWithPrefix, prefixes } from '../../../mina-signer/src/poseidon-bigint.js'; -import { Signature, signFieldElement } from '../../../mina-signer/src/signature.js'; -import { NetworkId } from '../../../mina-signer/src/types.js'; export { ZkappCommand, diff --git a/src/lib/mina/v2/views.ts b/src/lib/mina/v2/views.ts index 82db3d3362..0da3942aba 100644 --- a/src/lib/mina/v2/views.ts +++ b/src/lib/mina/v2/views.ts @@ -1,8 +1,8 @@ // Views into chain-state (ledger and best block) - -import { Account, AccountId, AccountIdMap } from './account.js'; import { Field } from '../../provable/field.js'; import { UInt32, UInt64 } from '../../provable/int.js'; + +import { Account, AccountId, AccountIdMap } from './account.js'; import { MinaAmount } from './currency.js'; export { ChainView, EpochData, EpochLedgerData, LedgerView, LocalChain, LocalLedger }; diff --git a/src/lib/mina/v2/zkapp-logic.ts b/src/lib/mina/v2/zkapp-logic.ts index 8ab5d9efaf..c1e1b847ac 100644 --- a/src/lib/mina/v2/zkapp-logic.ts +++ b/src/lib/mina/v2/zkapp-logic.ts @@ -1,21 +1,22 @@ +import { Bool } from '../../provable/bool.js'; +import { PublicKey } from '../../provable/crypto/signature.js'; +import { Field } from '../../provable/field.js'; +import { Int64, Sign, UInt32, UInt64 } from '../../provable/int.js'; +import { ZkappConstants } from '../v1/constants.js'; + import { AccountUpdate } from './account-update.js'; import { Account } from './account.js'; import { AuthorizationLevel } from './authorization.js'; import { Update } from './core.js'; import { Permissions } from './permissions.js'; import { - Preconditions, EpochDataPreconditions, EpochLedgerPreconditions, + Preconditions, } from './preconditions.js'; import { StateLayout, StateUpdates, StateValues } from './state.js'; import { ZkappFeePayment } from './transaction.js'; import { ChainView, EpochData, EpochLedgerData } from './views.js'; -import { Bool } from '../../provable/bool.js'; -import { Field } from '../../provable/field.js'; -import { Int64, Sign, UInt64, UInt32 } from '../../provable/int.js'; -import { PublicKey } from '../../provable/crypto/signature.js'; -import { ZkappConstants } from '../v1/constants.js'; export { checkAndApplyAccountUpdate, checkAndApplyFeePayment, ApplyState }; diff --git a/src/lib/ml/consistency.unit-test.ts b/src/lib/ml/consistency.unit-test.ts index c185fa0d48..e57cf73cd3 100644 --- a/src/lib/ml/consistency.unit-test.ts +++ b/src/lib/ml/consistency.unit-test.ts @@ -1,13 +1,15 @@ +import { expect } from 'expect'; + import { Test } from '../../bindings.js'; -import { Random, test } from '../testing/property.js'; -import { Field, Bool } from '../provable/wrapped.js'; -import { PrivateKey, PublicKey } from '../provable/crypto/signature.js'; import { TokenId, dummySignature } from '../mina/v1/account-update.js'; -import { Ml } from './conversion.js'; -import { expect } from 'expect'; import { FieldConst } from '../provable/core/fieldvar.js'; -import { Provable } from '../provable/provable.js'; import { synchronousRunners } from '../provable/core/provable-context.js'; +import { PrivateKey, PublicKey } from '../provable/crypto/signature.js'; +import { Provable } from '../provable/provable.js'; +import { Bool, Field } from '../provable/wrapped.js'; +import { Random, test } from '../testing/property.js'; + +import { Ml } from './conversion.js'; let mlTest = await Test(); let { runAndCheckSync } = await synchronousRunners(); diff --git a/src/lib/ml/conversion.ts b/src/lib/ml/conversion.ts index b5bc2a4ecf..7155def691 100644 --- a/src/lib/ml/conversion.ts +++ b/src/lib/ml/conversion.ts @@ -1,14 +1,14 @@ /** * this file contains conversion functions between JS and OCaml */ - import type { MlPublicKey, MlPublicKeyVar } from '../../bindings.js'; +import { FieldConst, FieldVar } from '../provable/core/fieldvar.js'; +import { PrivateKey, PublicKey } from '../provable/crypto/signature.js'; +import { Scalar, ScalarConst } from '../provable/scalar.js'; import { HashInput } from '../provable/types/struct.js'; import { Bool, Field } from '../provable/wrapped.js'; -import { FieldVar, FieldConst } from '../provable/core/fieldvar.js'; -import { Scalar, ScalarConst } from '../provable/scalar.js'; -import { PrivateKey, PublicKey } from '../provable/crypto/signature.js'; -import { MlPair, MlBool, MlArray } from './base.js'; + +import { MlArray, MlBool, MlPair } from './base.js'; import { MlFieldConstArray } from './fields.js'; export { Ml, MlHashInput }; diff --git a/src/lib/ml/fields.ts b/src/lib/ml/fields.ts index b9b70006ab..8b209fc72a 100644 --- a/src/lib/ml/fields.ts +++ b/src/lib/ml/fields.ts @@ -1,6 +1,8 @@ +import { FieldConst, FieldVar } from '../provable/core/fieldvar.js'; import { ConstantField, Field } from '../provable/field.js'; -import { FieldVar, FieldConst } from '../provable/core/fieldvar.js'; + import { MlArray } from './base.js'; + export { MlFieldArray, MlFieldConstArray }; type MlFieldArray = MlArray; diff --git a/src/lib/proof-system/cache.ts b/src/lib/proof-system/cache.ts index 774030a535..07c7c64636 100644 --- a/src/lib/proof-system/cache.ts +++ b/src/lib/proof-system/cache.ts @@ -1,5 +1,5 @@ -import { writeFileSync, readFileSync, mkdirSync, resolve, cacheDir } from '../util/fs.js'; import { jsEnvironment } from '../../bindings/crypto/bindings/env.js'; +import { cacheDir, mkdirSync, readFileSync, resolve, writeFileSync } from '../util/fs.js'; // external API export { Cache, CacheHeader }; diff --git a/src/lib/proof-system/cached-lagrange-basis.unit-test.ts b/src/lib/proof-system/cached-lagrange-basis.unit-test.ts index c78ee2fb3c..570382190c 100644 --- a/src/lib/proof-system/cached-lagrange-basis.unit-test.ts +++ b/src/lib/proof-system/cached-lagrange-basis.unit-test.ts @@ -1,9 +1,11 @@ -import { Cache, LAGRANGE_BASIS_PREFIX } from './cache.js'; -import { SelfProof, ZkProgram } from './zkprogram.js'; -import { Field } from '../provable/field.js'; -import { it, describe, after, before } from 'node:test'; import { expect } from 'expect'; import { promises as fs } from 'fs'; +import { after, before, describe, it } from 'node:test'; + +import { Field } from '../provable/field.js'; + +import { Cache, LAGRANGE_BASIS_PREFIX } from './cache.js'; +import { SelfProof, ZkProgram } from './zkprogram.js'; const __cacheDirname = './.tmpcache'; diff --git a/src/lib/proof-system/cached-verification.unit-test.ts b/src/lib/proof-system/cached-verification.unit-test.ts index 799b960092..e0f464fb6f 100644 --- a/src/lib/proof-system/cached-verification.unit-test.ts +++ b/src/lib/proof-system/cached-verification.unit-test.ts @@ -1,7 +1,7 @@ -import { JsonProof, verify } from '../proof-system/zkprogram.js'; - -import { it, describe } from 'node:test'; import { expect } from 'expect'; +import { describe, it } from 'node:test'; + +import { JsonProof, verify } from '../proof-system/zkprogram.js'; import { Field } from '../provable/field.js'; const verificationKey = { diff --git a/src/lib/proof-system/circuit.ts b/src/lib/proof-system/circuit.ts index e1d267dc15..297a9e0dc0 100644 --- a/src/lib/proof-system/circuit.ts +++ b/src/lib/proof-system/circuit.ts @@ -1,11 +1,12 @@ import 'reflect-metadata'; + import { Snarky, initializeBindings } from '../../bindings.js'; -import { MlFieldArray, MlFieldConstArray } from '../ml/fields.js'; import { withThreadPool } from '../../bindings.js'; +import { MlFieldArray, MlFieldConstArray } from '../ml/fields.js'; +import { gatesFromJson, snarkContext } from '../provable/core/provable-context.js'; import { Provable } from '../provable/provable.js'; -import { snarkContext, gatesFromJson } from '../provable/core/provable-context.js'; -import { prettifyStacktrace, prettifyStacktracePromise } from '../util/errors.js'; import { ProvablePure } from '../provable/types/provable-intf.js'; +import { prettifyStacktrace, prettifyStacktracePromise } from '../util/errors.js'; // external API export { public_, circuitMain, Circuit, Keypair, Proof, VerificationKey }; diff --git a/src/lib/proof-system/feature-flags.ts b/src/lib/proof-system/feature-flags.ts index d8bb160686..c7e34034ed 100644 --- a/src/lib/proof-system/feature-flags.ts +++ b/src/lib/proof-system/feature-flags.ts @@ -1,5 +1,6 @@ -import { MlFeatureFlags, Gate, GateType } from '../../bindings.js'; -import { MlBool, MlOption, MlArrayOptionalElements } from '../ml/base.js'; +import { Gate, GateType, MlFeatureFlags } from '../../bindings.js'; +import { MlArrayOptionalElements, MlBool, MlOption } from '../ml/base.js'; + import type { analyzeMethod } from './zkprogram.js'; // public API diff --git a/src/lib/proof-system/lazy-mode.unit-test.ts b/src/lib/proof-system/lazy-mode.unit-test.ts index 687eddfd1d..7651d1d305 100644 --- a/src/lib/proof-system/lazy-mode.unit-test.ts +++ b/src/lib/proof-system/lazy-mode.unit-test.ts @@ -1,14 +1,15 @@ -import { Field } from '../provable/field.js'; +import { spawn } from 'child_process'; +import { basename, dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +import { wasm } from '../../bindings.js'; import { Cache } from '../proof-system/cache.js'; import { ZkProgram } from '../proof-system/zkprogram.js'; -import { Spec, fieldWithRng } from '../testing/equivalent.js'; -import { Random } from '../testing/property.js'; +import { Field } from '../provable/field.js'; import { assert } from '../provable/gadgets/common.js'; import { Gadgets } from '../provable/gadgets/gadgets.js'; -import { wasm } from '../../bindings.js'; -import { spawn } from 'child_process'; -import { fileURLToPath } from 'url'; -import { dirname, join, basename } from 'path'; +import { Spec, fieldWithRng } from '../testing/equivalent.js'; +import { Random } from '../testing/property.js'; // Path resolution for subprocess execution const __filename = fileURLToPath(import.meta.url); diff --git a/src/lib/proof-system/proof-system.unit-test.ts b/src/lib/proof-system/proof-system.unit-test.ts index 548ab1516b..5983ea280c 100644 --- a/src/lib/proof-system/proof-system.unit-test.ts +++ b/src/lib/proof-system/proof-system.unit-test.ts @@ -1,6 +1,18 @@ -import { Field, Bool } from '../provable/wrapped.js'; -import { Struct } from '../provable/types/struct.js'; +import { expect } from 'expect'; +import { it } from 'node:test'; + +import { Pickles, Snarky } from '../../bindings.js'; +import { FieldConst, FieldVar } from '../provable/core/fieldvar.js'; +import { snarkContext } from '../provable/core/provable-context.js'; import { UInt64 } from '../provable/int.js'; +import { Provable } from '../provable/provable.js'; +import { ProvablePure } from '../provable/types/provable-intf.js'; +import { Struct } from '../provable/types/struct.js'; +import { Bool, Field } from '../provable/wrapped.js'; +import { bool, equivalentAsync, field, record } from '../testing/equivalent.js'; +import { AnyFunction } from '../util/types.js'; + +import { Proof } from './proof.js'; import { CompiledTag, Empty, @@ -9,16 +21,6 @@ import { picklesRuleFromFunction, sortMethodArguments, } from './zkprogram.js'; -import { Proof } from './proof.js'; -import { expect } from 'expect'; -import { Pickles, Snarky } from '../../bindings.js'; -import { AnyFunction } from '../util/types.js'; -import { snarkContext } from '../provable/core/provable-context.js'; -import { it } from 'node:test'; -import { Provable } from '../provable/provable.js'; -import { bool, equivalentAsync, field, record } from '../testing/equivalent.js'; -import { FieldVar, FieldConst } from '../provable/core/fieldvar.js'; -import { ProvablePure } from '../provable/types/provable-intf.js'; const EmptyProgram = ZkProgram({ name: 'empty', diff --git a/src/lib/proof-system/proof.ts b/src/lib/proof-system/proof.ts index 58c1b951ca..1c7f721e87 100644 --- a/src/lib/proof-system/proof.ts +++ b/src/lib/proof-system/proof.ts @@ -1,16 +1,17 @@ import { areBindingsInitialized, initializeBindings, withThreadPool } from '../../bindings.js'; -import { Pickles, Base64ProofString } from '../../bindings.js'; -import { Field, Bool } from '../provable/wrapped.js'; -import type { FlexibleProvable, InferProvable } from '../provable/types/struct.js'; -import { FeatureFlags } from './feature-flags.js'; -import type { JsonProof } from './zkprogram.js'; -import { Subclass } from '../util/types.js'; +import { Base64ProofString, Pickles } from '../../bindings.js'; import type { Provable } from '../provable/provable.js'; -import { assert } from '../util/assert.js'; -import { Unconstrained } from '../provable/types/unconstrained.js'; import { ProvableType } from '../provable/types/provable-intf.js'; -import { ZkProgramContext } from './zkprogram-context.js'; +import type { FlexibleProvable, InferProvable } from '../provable/types/struct.js'; +import { Unconstrained } from '../provable/types/unconstrained.js'; +import { Bool, Field } from '../provable/wrapped.js'; +import { assert } from '../util/assert.js'; +import { Subclass } from '../util/types.js'; + +import { FeatureFlags } from './feature-flags.js'; import { VerificationKey } from './verification-key.js'; +import { ZkProgramContext } from './zkprogram-context.js'; +import type { JsonProof } from './zkprogram.js'; // public API export { ProofBase, Proof, DynamicProof, ProofClass }; diff --git a/src/lib/proof-system/proof.unit-test.ts b/src/lib/proof-system/proof.unit-test.ts index e75232c9e5..a460f941af 100644 --- a/src/lib/proof-system/proof.unit-test.ts +++ b/src/lib/proof-system/proof.unit-test.ts @@ -1,9 +1,11 @@ import { expect } from 'expect'; +import test from 'node:test'; + import { Provable } from '../provable/provable.js'; import { Field } from '../provable/wrapped.js'; + import { Proof } from './proof.js'; import { Void } from './zkprogram.js'; -import test from 'node:test'; test('Proof provable', async () => { class MyProof extends Proof { diff --git a/src/lib/proof-system/prover-keys.ts b/src/lib/proof-system/prover-keys.ts index 6b871848d9..82248b0324 100644 --- a/src/lib/proof-system/prover-keys.ts +++ b/src/lib/proof-system/prover-keys.ts @@ -5,14 +5,15 @@ * * The inputs are `SnarkKeyHeader` and `SnarkKey`, which are OCaml tagged enums defined in pickles_bindings.ml */ +import { Pickles, wasm } from '../../bindings.js'; import { WasmPastaFpPlonkIndex, WasmPastaFqPlonkIndex, } from '../../bindings/compiled/node_bindings/plonk_wasm.cjs'; -import { Pickles, wasm } from '../../bindings.js'; -import { VerifierIndex } from '../../bindings/crypto/bindings/kimchi-types.js'; import { getRustConversion } from '../../bindings/crypto/bindings.js'; +import { VerifierIndex } from '../../bindings/crypto/bindings/kimchi-types.js'; import { MlString } from '../ml/base.js'; + import { CacheHeader, cacheHeaderVersion } from './cache.js'; import type { MethodInterface } from './zkprogram.js'; diff --git a/src/lib/proof-system/recursive.ts b/src/lib/proof-system/recursive.ts index cf4b7e0c93..342f7653dd 100644 --- a/src/lib/proof-system/recursive.ts +++ b/src/lib/proof-system/recursive.ts @@ -1,12 +1,13 @@ -import { InferProvable } from '../provable/types/struct.js'; +import { From } from '../../bindings/lib/provable-generic.js'; +import { Bool } from '../provable/bool.js'; import { Provable } from '../provable/provable.js'; import { ProvableType } from '../provable/types/provable-intf.js'; +import { InferProvable } from '../provable/types/struct.js'; +import { mapObject, mapToObject, zip } from '../util/arrays.js'; import { Tuple } from '../util/types.js'; + import { Proof } from './proof.js'; -import { mapObject, mapToObject, zip } from '../util/arrays.js'; import { Undefined, Void } from './zkprogram.js'; -import { Bool } from '../provable/bool.js'; -import { From } from '../../bindings/lib/provable-generic.js'; export { Recursive }; diff --git a/src/lib/proof-system/sideloaded.unit-test.ts b/src/lib/proof-system/sideloaded.unit-test.ts index 03a855901e..636b8abc56 100644 --- a/src/lib/proof-system/sideloaded.unit-test.ts +++ b/src/lib/proof-system/sideloaded.unit-test.ts @@ -1,9 +1,11 @@ -import { Void, ZkProgram } from './zkprogram.js'; -import { VerificationKey } from './verification-key.js'; -import { DynamicProof } from './proof.js'; -import { Field, SmartContract, Struct, method } from '../../index.js'; -import { it, describe } from 'node:test'; import { expect } from 'expect'; +import { describe, it } from 'node:test'; + +import { Field, SmartContract, Struct, method } from '../../index.js'; + +import { DynamicProof } from './proof.js'; +import { VerificationKey } from './verification-key.js'; +import { Void, ZkProgram } from './zkprogram.js'; const program1 = ZkProgram({ name: 'program1', diff --git a/src/lib/proof-system/verification-key.ts b/src/lib/proof-system/verification-key.ts index 26b521d731..3f0322474f 100644 --- a/src/lib/proof-system/verification-key.ts +++ b/src/lib/proof-system/verification-key.ts @@ -1,8 +1,9 @@ -import { initializeBindings, Pickles } from '../../bindings.js'; +import { Pickles, initializeBindings } from '../../bindings.js'; import { synchronousRunners } from '../provable/core/provable-context.js'; import { provable } from '../provable/types/provable-derivers.js'; import { Struct } from '../provable/types/struct.js'; import { Field } from '../provable/wrapped.js'; + import { inCircuitVkHash } from './zkprogram.js'; export { VerificationKey }; diff --git a/src/lib/proof-system/verification-key.unit-test.ts b/src/lib/proof-system/verification-key.unit-test.ts index 24e9cd82c4..521b36468f 100644 --- a/src/lib/proof-system/verification-key.unit-test.ts +++ b/src/lib/proof-system/verification-key.unit-test.ts @@ -1,7 +1,9 @@ import { assert } from 'console'; -import { VerificationKey } from './verification-key.js'; + import { Field } from '../provable/wrapped.js'; +import { VerificationKey } from './verification-key.js'; + console.log('verification key consistency check (generated and cached)'); let generated = await VerificationKey.dummy(); let cached = VerificationKey.dummySync(); diff --git a/src/lib/proof-system/zkprogram-context.ts b/src/lib/proof-system/zkprogram-context.ts index e67787695e..fea873d065 100644 --- a/src/lib/proof-system/zkprogram-context.ts +++ b/src/lib/proof-system/zkprogram-context.ts @@ -1,5 +1,6 @@ import { Context } from '../util/global-context.js'; import type { Subclass } from '../util/types.js'; + import type { ProofBase } from './proof.js'; export { ZkProgramContext, DeclaredProof }; diff --git a/src/lib/proof-system/zkprogram.ts b/src/lib/proof-system/zkprogram.ts index aaedcac015..c8a0115c81 100644 --- a/src/lib/proof-system/zkprogram.ts +++ b/src/lib/proof-system/zkprogram.ts @@ -1,4 +1,3 @@ -import { EmptyUndefined, EmptyVoid } from '../../bindings/lib/generic.js'; import { Base64ProofString, Base64VerificationKeyString, @@ -6,40 +5,42 @@ import { initializeBindings, withThreadPool, } from '../../bindings.js'; -import { Pickles, Gate } from '../../bindings.js'; -import { Field } from '../provable/wrapped.js'; -import { FlexibleProvable, InferProvable, ProvablePureExtended } from '../provable/types/struct.js'; -import { InferProvableType } from '../provable/types/provable-derivers.js'; -import { Provable } from '../provable/provable.js'; -import { assert, prettifyStacktracePromise } from '../util/errors.js'; +import { Gate, Pickles } from '../../bindings.js'; +import { setSrsCache, unsetSrsCache } from '../../bindings/crypto/bindings/srs.js'; +import { prefixes } from '../../bindings/crypto/constants.js'; +import { prefixToField } from '../../bindings/lib/binable.js'; +import { EmptyUndefined, EmptyVoid } from '../../bindings/lib/generic.js'; +import { From, InferValue } from '../../bindings/lib/provable-generic.js'; +import { MlArray, MlBool, MlPair, MlResult } from '../ml/base.js'; +import { MlFieldArray, MlFieldConstArray } from '../ml/fields.js'; +import { FieldConst, FieldVar } from '../provable/core/fieldvar.js'; import { ConstraintSystemSummary, snarkContext } from '../provable/core/provable-context.js'; import { hashConstant } from '../provable/crypto/poseidon.js'; -import { MlArray, MlBool, MlResult, MlPair } from '../ml/base.js'; -import { MlFieldArray, MlFieldConstArray } from '../ml/fields.js'; -import { FieldVar, FieldConst } from '../provable/core/fieldvar.js'; -import { Cache, readCache, writeCache } from './cache.js'; -import { decodeProverKey, encodeProverKey, parseHeader } from './prover-keys.js'; -import { setSrsCache, unsetSrsCache } from '../../bindings/crypto/bindings/srs.js'; +import { Provable } from '../provable/provable.js'; +import { InferProvableType } from '../provable/types/provable-derivers.js'; import { ProvableType, ToProvable } from '../provable/types/provable-intf.js'; -import { prefixToField } from '../../bindings/lib/binable.js'; -import { prefixes } from '../../bindings/crypto/constants.js'; +import { FlexibleProvable, InferProvable, ProvablePureExtended } from '../provable/types/struct.js'; +import { emptyWitness } from '../provable/types/util.js'; +import { Field } from '../provable/wrapped.js'; +import { mapObject, mapToObject, zip } from '../util/arrays.js'; +import { assert, prettifyStacktracePromise } from '../util/errors.js'; import { Subclass, Tuple } from '../util/types.js'; + +import { Cache, readCache, writeCache } from './cache.js'; +import { featureFlagsFromGates, featureFlagsToMlOption } from './feature-flags.js'; import { - dummyProof, DynamicProof, - extractProofs, - extractProofTypes, Proof, ProofBase, ProofClass, ProofValue, + dummyProof, + extractProofTypes, + extractProofs, } from './proof.js'; -import { featureFlagsFromGates, featureFlagsToMlOption } from './feature-flags.js'; -import { emptyWitness } from '../provable/types/util.js'; -import { From, InferValue } from '../../bindings/lib/provable-generic.js'; -import { DeclaredProof, ZkProgramContext } from './zkprogram-context.js'; -import { mapObject, mapToObject, zip } from '../util/arrays.js'; +import { decodeProverKey, encodeProverKey, parseHeader } from './prover-keys.js'; import { VerificationKey } from './verification-key.js'; +import { DeclaredProof, ZkProgramContext } from './zkprogram-context.js'; // public API export { SelfProof, JsonProof, ZkProgram, verify, Empty, Undefined, Void, Method }; diff --git a/src/lib/proof-system/zkprogram.unit-test.ts b/src/lib/proof-system/zkprogram.unit-test.ts index e51c283f40..810b56fc3c 100644 --- a/src/lib/proof-system/zkprogram.unit-test.ts +++ b/src/lib/proof-system/zkprogram.unit-test.ts @@ -1,4 +1,5 @@ import { Field } from '../provable/wrapped.js'; + import { ZkProgram } from './zkprogram.js'; const methodCount = 30; diff --git a/src/lib/provable/bigint.ts b/src/lib/provable/bigint.ts index c664e89c6b..021d6b3073 100644 --- a/src/lib/provable/bigint.ts +++ b/src/lib/provable/bigint.ts @@ -1,10 +1,10 @@ import { Bool } from './bool.js'; import { Field } from './field.js'; -import { Provable } from './provable.js'; -import { ProvablePureExtended } from './types/struct.js'; -import { Gadgets } from './gadgets/gadgets.js'; import { assert } from './gadgets/common.js'; +import { Gadgets } from './gadgets/gadgets.js'; +import { Provable } from './provable.js'; import { provable, provableFromClass } from './types/provable-derivers.js'; +import { ProvablePureExtended } from './types/struct.js'; import { Unconstrained } from './types/unconstrained.js'; export { createProvableBigInt, ProvableBigInt }; diff --git a/src/lib/provable/bool.ts b/src/lib/provable/bool.ts index 8a127e7605..1343127523 100644 --- a/src/lib/provable/bool.ts +++ b/src/lib/provable/bool.ts @@ -1,11 +1,12 @@ import { Snarky } from '../../bindings.js'; -import { Field, readVarMessage, withMessage } from './field.js'; -import { FieldVar, FieldConst, FieldType } from './core/fieldvar.js'; -import { defineBinable } from '../../bindings/lib/binable.js'; import { NonNegativeInteger } from '../../bindings/crypto/non-negative.js'; +import { defineBinable } from '../../bindings/lib/binable.js'; + import { existsOne } from './core/exists.js'; -import { assertMul } from './gadgets/compatible.js'; import { setBoolConstructor } from './core/field-constructor.js'; +import { FieldConst, FieldType, FieldVar } from './core/fieldvar.js'; +import { Field, readVarMessage, withMessage } from './field.js'; +import { assertMul } from './gadgets/compatible.js'; export { BoolVar, Bool }; diff --git a/src/lib/provable/bytes.ts b/src/lib/provable/bytes.ts index b0538a1d9b..099bb53193 100644 --- a/src/lib/provable/bytes.ts +++ b/src/lib/provable/bytes.ts @@ -1,12 +1,13 @@ -import { provableFromClass } from './types/provable-derivers.js'; -import type { ProvablePureExtended } from './types/struct.js'; -import { assert } from './gadgets/common.js'; -import { chunk, chunkString } from '../util/arrays.js'; -import { Provable } from './provable.js'; -import { UInt8 } from './int.js'; import { randomBytes } from '../../bindings/crypto/random.js'; -import { Field } from './field.js'; +import { chunk, chunkString } from '../util/arrays.js'; + import { Bool } from './bool.js'; +import { Field } from './field.js'; +import { assert } from './gadgets/common.js'; +import { UInt8 } from './int.js'; +import { Provable } from './provable.js'; +import { provableFromClass } from './types/provable-derivers.js'; +import type { ProvablePureExtended } from './types/struct.js'; // external API export { Bytes, FlexibleBytes }; diff --git a/src/lib/provable/core/exists.ts b/src/lib/provable/core/exists.ts index 46e581d5f9..4f0b55f619 100644 --- a/src/lib/provable/core/exists.ts +++ b/src/lib/provable/core/exists.ts @@ -1,9 +1,10 @@ import { Snarky } from '../../../bindings.js'; -import { FieldConst, VarFieldVar } from './fieldvar.js'; -import type { VarField } from '../field.js'; import { MlArray, MlOption } from '../../ml/base.js'; -import { createField } from './field-constructor.js'; import { TupleN } from '../../util/types.js'; +import type { VarField } from '../field.js'; + +import { createField } from './field-constructor.js'; +import { FieldConst, VarFieldVar } from './fieldvar.js'; export { createVarField, exists, existsAsync, existsOne }; diff --git a/src/lib/provable/core/field-constructor.ts b/src/lib/provable/core/field-constructor.ts index 38456908a0..37cc1ca540 100644 --- a/src/lib/provable/core/field-constructor.ts +++ b/src/lib/provable/core/field-constructor.ts @@ -3,9 +3,10 @@ * core gadgets which they depend on but which need to create Fields and Bools, * or check if a value is a Field or a Bool. */ -import type { Field } from '../field.js'; import type { Bool } from '../bool.js'; -import type { FieldVar, FieldConst } from './fieldvar.js'; +import type { Field } from '../field.js'; + +import type { FieldConst, FieldVar } from './fieldvar.js'; export { createField, diff --git a/src/lib/provable/core/provable-context.ts b/src/lib/provable/core/provable-context.ts index 6beb200369..2f624426c4 100644 --- a/src/lib/provable/core/provable-context.ts +++ b/src/lib/provable/core/provable-context.ts @@ -1,9 +1,9 @@ -import { Context } from '../../util/global-context.js'; import { Gate, GateType, JsonGate, Snarky, initializeBindings } from '../../../bindings.js'; import { parseHexString32 } from '../../../bindings/crypto/bigint-helpers.js'; -import { prettifyStacktrace } from '../../util/errors.js'; import { Fp } from '../../../bindings/crypto/finite-field.js'; import { MlBool } from '../../ml/base.js'; +import { prettifyStacktrace } from '../../util/errors.js'; +import { Context } from '../../util/global-context.js'; // internal API export { diff --git a/src/lib/provable/crypto/encryption.ts b/src/lib/provable/crypto/encryption.ts index 367429d3e4..cddadf03e8 100644 --- a/src/lib/provable/crypto/encryption.ts +++ b/src/lib/provable/crypto/encryption.ts @@ -1,11 +1,12 @@ -import { Field, Scalar, Group } from '../wrapped.js'; -import { Poseidon } from './poseidon.js'; -import { Provable } from '../provable.js'; -import { PrivateKey, PublicKey } from './signature.js'; -import { bytesToWord, wordToBytes } from '../gadgets/bit-slices.js'; +import { chunk } from '../../util/arrays.js'; import { Bytes } from '../bytes.js'; +import { bytesToWord, wordToBytes } from '../gadgets/bit-slices.js'; import { UInt8 } from '../int.js'; -import { chunk } from '../../util/arrays.js'; +import { Provable } from '../provable.js'; +import { Field, Group, Scalar } from '../wrapped.js'; + +import { Poseidon } from './poseidon.js'; +import { PrivateKey, PublicKey } from './signature.js'; export { encrypt, decrypt, encryptBytes, decryptBytes, CipherTextBytes, CipherText }; diff --git a/src/lib/provable/crypto/foreign-curve.ts b/src/lib/provable/crypto/foreign-curve.ts index 787d5672b6..a94cf623fb 100644 --- a/src/lib/provable/crypto/foreign-curve.ts +++ b/src/lib/provable/crypto/foreign-curve.ts @@ -1,17 +1,17 @@ import { - CurveParams, CurveAffine, + CurveParams, createCurveAffine, } from '../../../bindings/crypto/elliptic-curve.js'; -import { ProvablePureExtended } from '../types/struct.js'; +import { Bytes } from '../bytes.js'; import { AlmostForeignField, createForeignField } from '../foreign-field.js'; +import { assert } from '../gadgets/common.js'; import { EllipticCurve, Point } from '../gadgets/elliptic-curve.js'; import { Field3 } from '../gadgets/foreign-field.js'; -import { assert } from '../gadgets/common.js'; +import { l2Mask, multiRangeCheck } from '../gadgets/range-check.js'; import { Provable } from '../provable.js'; import { provableFromClass } from '../types/provable-derivers.js'; -import { l2Mask, multiRangeCheck } from '../gadgets/range-check.js'; -import { Bytes } from '../bytes.js'; +import { ProvablePureExtended } from '../types/struct.js'; // external API export { createForeignCurve, ForeignCurve }; diff --git a/src/lib/provable/crypto/foreign-ecdsa.ts b/src/lib/provable/crypto/foreign-ecdsa.ts index 03d180032c..f84c1a656a 100644 --- a/src/lib/provable/crypto/foreign-ecdsa.ts +++ b/src/lib/provable/crypto/foreign-ecdsa.ts @@ -1,16 +1,17 @@ -import { provableFromClass } from '../types/provable-derivers.js'; import { CurveParams } from '../../../bindings/crypto/elliptic-curve.js'; -import { ProvablePureExtended } from '../types/struct.js'; -import { FlexiblePoint, ForeignCurve, createForeignCurve, toPoint } from './foreign-curve.js'; +import type { Bool } from '../bool.js'; import { AlmostForeignField } from '../foreign-field.js'; import { assert } from '../gadgets/common.js'; -import { Field3 } from '../gadgets/foreign-field.js'; import { Ecdsa } from '../gadgets/elliptic-curve.js'; +import { Field3 } from '../gadgets/foreign-field.js'; import { l, multiRangeCheck } from '../gadgets/range-check.js'; -import { Keccak } from './keccak.js'; -import { Bytes } from '../wrapped-classes.js'; import { UInt8 } from '../int.js'; -import type { Bool } from '../bool.js'; +import { provableFromClass } from '../types/provable-derivers.js'; +import { ProvablePureExtended } from '../types/struct.js'; +import { Bytes } from '../wrapped-classes.js'; + +import { FlexiblePoint, ForeignCurve, createForeignCurve, toPoint } from './foreign-curve.js'; +import { Keccak } from './keccak.js'; // external API export { createEcdsa, EcdsaSignature }; diff --git a/src/lib/provable/crypto/hash-generic.ts b/src/lib/provable/crypto/hash-generic.ts index 68e4ba1581..d11962b784 100644 --- a/src/lib/provable/crypto/hash-generic.ts +++ b/src/lib/provable/crypto/hash-generic.ts @@ -1,5 +1,5 @@ -import { GenericSignableField } from '../../../bindings/lib/generic.js'; import { prefixToField } from '../../../bindings/lib/binable.js'; +import { GenericSignableField } from '../../../bindings/lib/generic.js'; export { createHashHelpers, HashHelpers }; diff --git a/src/lib/provable/crypto/hash.ts b/src/lib/provable/crypto/hash.ts index 31df05157a..ffcf8615f0 100644 --- a/src/lib/provable/crypto/hash.ts +++ b/src/lib/provable/crypto/hash.ts @@ -1,8 +1,9 @@ import { Gadgets } from '../gadgets/gadgets.js'; -import { Poseidon } from './poseidon.js'; -import { Keccak } from './keccak.js'; import { Bytes } from '../wrapped-classes.js'; +import { Keccak } from './keccak.js'; +import { Poseidon } from './poseidon.js'; + export { Hash }; /** diff --git a/src/lib/provable/crypto/keccak.ts b/src/lib/provable/crypto/keccak.ts index 37a45077f8..219030cd94 100644 --- a/src/lib/provable/crypto/keccak.ts +++ b/src/lib/provable/crypto/keccak.ts @@ -1,10 +1,10 @@ -import { Field } from '../field.js'; -import { Gadgets } from '../gadgets/gadgets.js'; import { assert } from '../../util/errors.js'; import { FlexibleBytes } from '../bytes.js'; +import { Field } from '../field.js'; +import { bytesToWords, wordsToBytes } from '../gadgets/bit-slices.js'; +import { Gadgets } from '../gadgets/gadgets.js'; import { UInt8 } from '../int.js'; import { Bytes } from '../wrapped-classes.js'; -import { bytesToWords, wordsToBytes } from '../gadgets/bit-slices.js'; export { Keccak }; diff --git a/src/lib/provable/crypto/nullifier.ts b/src/lib/provable/crypto/nullifier.ts index 29a714006d..04a714306d 100644 --- a/src/lib/provable/crypto/nullifier.ts +++ b/src/lib/provable/crypto/nullifier.ts @@ -1,10 +1,11 @@ import type { Nullifier as JsonNullifier } from '../../../mina-signer/src/types.js'; +import { MerkleMapWitness } from '../merkle-map.js'; +import { Provable } from '../provable.js'; import { Struct } from '../types/struct.js'; import { Field, Group, Scalar } from '../wrapped.js'; + import { Poseidon } from './poseidon.js'; -import { MerkleMapWitness } from '../merkle-map.js'; import { PrivateKey, PublicKey } from './signature.js'; -import { Provable } from '../provable.js'; export { Nullifier }; diff --git a/src/lib/provable/crypto/poseidon.ts b/src/lib/provable/crypto/poseidon.ts index 7ef80773d1..8eb215ce96 100644 --- a/src/lib/provable/crypto/poseidon.ts +++ b/src/lib/provable/crypto/poseidon.ts @@ -1,16 +1,17 @@ -import { HashInput, ProvableExtended, Struct } from '../types/struct.js'; import { Snarky } from '../../../bindings.js'; -import { Field } from '../wrapped.js'; -import { createHashHelpers } from './hash-generic.js'; -import { Provable } from '../provable.js'; -import { MlFieldArray } from '../../ml/fields.js'; import { Poseidon as PoseidonBigint } from '../../../bindings/crypto/poseidon.js'; +import { stringLengthInBytes } from '../../../bindings/lib/binable.js'; +import { MlFieldArray } from '../../ml/fields.js'; import { assert } from '../../util/errors.js'; -import { rangeCheckN } from '../gadgets/range-check.js'; import { TupleN } from '../../util/types.js'; +import { rangeCheckN } from '../gadgets/range-check.js'; import { Group } from '../group.js'; +import { Provable } from '../provable.js'; import { ProvableType, WithProvable } from '../types/provable-intf.js'; -import { stringLengthInBytes } from '../../../bindings/lib/binable.js'; +import { HashInput, ProvableExtended, Struct } from '../types/struct.js'; +import { Field } from '../wrapped.js'; + +import { createHashHelpers } from './hash-generic.js'; // external API export { Poseidon, TokenSymbol }; diff --git a/src/lib/provable/crypto/signature.ts b/src/lib/provable/crypto/signature.ts index 6b8cd5e928..101e8ed984 100644 --- a/src/lib/provable/crypto/signature.ts +++ b/src/lib/provable/crypto/signature.ts @@ -1,17 +1,18 @@ -import { Field, Bool, Group, Scalar } from '../wrapped.js'; -import { AnyConstructor } from '../types/struct.js'; -import { hashWithPrefix } from './poseidon.js'; -import { - deriveNonce, - Signature as SignatureBigint, - signaturePrefix, -} from '../../../mina-signer/src/signature.js'; import { PrivateKey as PrivateKeyBigint, PublicKey as PublicKeyBigint, } from '../../../mina-signer/src/curve-bigint.js'; +import { + Signature as SignatureBigint, + deriveNonce, + signaturePrefix, +} from '../../../mina-signer/src/signature.js'; import { toConstantField } from '../field.js'; import { CircuitValue, prop } from '../types/circuit-value.js'; +import { AnyConstructor } from '../types/struct.js'; +import { Bool, Field, Group, Scalar } from '../wrapped.js'; + +import { hashWithPrefix } from './poseidon.js'; // external API export { PrivateKey, PublicKey, Signature }; diff --git a/src/lib/provable/dynamic-array.ts b/src/lib/provable/dynamic-array.ts index d2a96b66c2..7a5fee1720 100644 --- a/src/lib/provable/dynamic-array.ts +++ b/src/lib/provable/dynamic-array.ts @@ -3,16 +3,17 @@ * https://github.com/zksecurity/mina-attestations and * gretke's at https://github.com/gretzke/zkApp-data-types */ +import { type From, type InferValue } from '../../bindings/lib/provable-generic.js'; +import { pad, zip } from '../util/arrays.js'; + import { Bool } from './bool.js'; import { Field } from './field.js'; +import { arrayGet } from './gadgets/basic.js'; +import { assert } from './gadgets/common.js'; +import { Option } from './option.js'; import { Provable } from './provable.js'; import { type InferProvable, provable as struct } from './types/provable-derivers.js'; -import { Option } from './option.js'; import { ProvableHashable, ProvableType } from './types/provable-intf.js'; -import { assert } from './gadgets/common.js'; -import { type From, type InferValue } from '../../bindings/lib/provable-generic.js'; -import { zip, pad } from '../util/arrays.js'; -import { arrayGet } from './gadgets/basic.js'; // external API export { DynamicArray }; diff --git a/src/lib/provable/field.ts b/src/lib/provable/field.ts index ebe692d25f..e7598fd7f3 100644 --- a/src/lib/provable/field.ts +++ b/src/lib/provable/field.ts @@ -1,17 +1,17 @@ import { Snarky } from '../../bindings.js'; import { Fp } from '../../bindings/crypto/finite-field.js'; -import { BinableFp, SignableFp } from '../../mina-signer/src/field-bigint.js'; -import { defineBinable } from '../../bindings/lib/binable.js'; import type { NonNegativeInteger } from '../../bindings/crypto/non-negative.js'; -import { inCheckedComputation } from './core/provable-context.js'; -import { Bool } from './bool.js'; +import { defineBinable } from '../../bindings/lib/binable.js'; +import { BinableFp, SignableFp } from '../../mina-signer/src/field-bigint.js'; import { assert } from '../util/errors.js'; -import { Provable } from './provable.js'; -import { assertEqual, assertMul, assertSquare, assertBoolean } from './gadgets/compatible.js'; -import { assertBilinear, toLinearCombination } from './gadgets/basic.js'; -import { FieldType, FieldVar, FieldConst, VarFieldVar, ConstantFieldVar } from './core/fieldvar.js'; + +import { Bool } from './bool.js'; import { exists, existsOne } from './core/exists.js'; import { setFieldConstructor } from './core/field-constructor.js'; +import { ConstantFieldVar, FieldConst, FieldType, FieldVar, VarFieldVar } from './core/fieldvar.js'; +import { inCheckedComputation } from './core/provable-context.js'; +import { assertBilinear, toLinearCombination } from './gadgets/basic.js'; +import { toVar } from './gadgets/common.js'; import { assertLessThanFull, assertLessThanOrEqualFull, @@ -19,7 +19,8 @@ import { lessThanFull, lessThanOrEqualFull, } from './gadgets/comparison.js'; -import { toVar } from './gadgets/common.js'; +import { assertBoolean, assertEqual, assertMul, assertSquare } from './gadgets/compatible.js'; +import { Provable } from './provable.js'; // external API export { Field }; diff --git a/src/lib/provable/foreign-field.ts b/src/lib/provable/foreign-field.ts index 64ea48513a..9b37391b51 100644 --- a/src/lib/provable/foreign-field.ts +++ b/src/lib/provable/foreign-field.ts @@ -1,12 +1,13 @@ -import { mod, Fp, FiniteField, createField } from '../../bindings/crypto/finite-field.js'; -import { checkBitLength, Field, withMessage } from './field.js'; -import { Provable } from './provable.js'; -import { Bool } from './bool.js'; +import { FiniteField, Fp, createField, mod } from '../../bindings/crypto/finite-field.js'; import { Tuple, TupleMap, TupleN } from '../util/types.js'; -import { Gadgets } from './gadgets/gadgets.js'; -import { ForeignField as FF, Field3 } from './gadgets/foreign-field.js'; + +import { Bool } from './bool.js'; +import { Field, checkBitLength, withMessage } from './field.js'; import { assert } from './gadgets/common.js'; -import { l3, l } from './gadgets/range-check.js'; +import { ForeignField as FF, Field3 } from './gadgets/foreign-field.js'; +import { Gadgets } from './gadgets/gadgets.js'; +import { l, l3 } from './gadgets/range-check.js'; +import { Provable } from './provable.js'; import { ProvablePureExtended } from './types/struct.js'; // external API diff --git a/src/lib/provable/gadgets/arithmetic.ts b/src/lib/provable/gadgets/arithmetic.ts index 8c4e27a343..d0cabcc4f8 100644 --- a/src/lib/provable/gadgets/arithmetic.ts +++ b/src/lib/provable/gadgets/arithmetic.ts @@ -1,7 +1,8 @@ -import { provableTuple } from '../types/struct.js'; -import { Field } from '../wrapped.js'; import { assert } from '../../util/errors.js'; import { Provable } from '../provable.js'; +import { provableTuple } from '../types/struct.js'; +import { Field } from '../wrapped.js'; + import { rangeCheck32, rangeCheck64, rangeCheckN } from './range-check.js'; export { divMod32, addMod32, divMod64, addMod64 }; diff --git a/src/lib/provable/gadgets/basic.ts b/src/lib/provable/gadgets/basic.ts index c36b49da77..5a3bd6f72c 100644 --- a/src/lib/provable/gadgets/basic.ts +++ b/src/lib/provable/gadgets/basic.ts @@ -2,16 +2,17 @@ * Basic gadgets that only use generic gates */ import { Fp } from '../../../bindings/crypto/finite-field.js'; -import type { Field, VarField } from '../field.js'; -import { FieldType, FieldVar, FieldConst, VarFieldVar } from '../core/fieldvar.js'; -import { toVar } from './common.js'; -import { Gates, fieldVar } from '../gates.js'; +import { assert } from '../../util/assert.js'; import { TupleN } from '../../util/types.js'; import { exists, existsOne } from '../core/exists.js'; import { createField } from '../core/field-constructor.js'; -import { assert } from '../../util/assert.js'; -import { ProvableType } from '../types/provable-intf.js'; +import { FieldConst, FieldType, FieldVar, VarFieldVar } from '../core/fieldvar.js'; +import type { Field, VarField } from '../field.js'; +import { Gates, fieldVar } from '../gates.js'; import { Provable } from '../provable.js'; +import { ProvableType } from '../types/provable-intf.js'; + +import { toVar } from './common.js'; export { assertMul, assertBilinear, arrayGet, assertOneOf, assertNotVectorEquals, arrayGetGeneric }; diff --git a/src/lib/provable/gadgets/bit-slices.ts b/src/lib/provable/gadgets/bit-slices.ts index b0f45c18c8..e44300751d 100644 --- a/src/lib/provable/gadgets/bit-slices.ts +++ b/src/lib/provable/gadgets/bit-slices.ts @@ -2,11 +2,12 @@ * Gadgets for converting between field elements and bit slices of various lengths */ import { bigIntToBits } from '../../../bindings/crypto/bigint-helpers.js'; +import { chunk } from '../../util/arrays.js'; +import { exists } from '../core/exists.js'; import { Field } from '../field.js'; import { UInt8 } from '../int.js'; -import { exists } from '../core/exists.js'; import { Provable } from '../provable.js'; -import { chunk } from '../../util/arrays.js'; + import { assert } from './common.js'; import type { Field3 } from './foreign-field.js'; import { l } from './range-check.js'; diff --git a/src/lib/provable/gadgets/bitwise.ts b/src/lib/provable/gadgets/bitwise.ts index 1e5e84a53e..815a816fa0 100644 --- a/src/lib/provable/gadgets/bitwise.ts +++ b/src/lib/provable/gadgets/bitwise.ts @@ -1,11 +1,12 @@ -import { Provable } from '../provable.js'; import { Fp } from '../../../bindings/crypto/finite-field.js'; +import { exists } from '../../provable/core/exists.js'; import { Field } from '../field.js'; import { Gates } from '../gates.js'; -import { assert, divideWithRemainder, toVar, bitSlice } from './common.js'; -import { rangeCheck32, rangeCheck64 } from './range-check.js'; +import { Provable } from '../provable.js'; + import { divMod32 } from './arithmetic.js'; -import { exists } from '../../provable/core/exists.js'; +import { assert, bitSlice, divideWithRemainder, toVar } from './common.js'; +import { rangeCheck32, rangeCheck64 } from './range-check.js'; export { xor, not, rotate64, rotate32, and, or, rightShift64, leftShift64, leftShift32 }; diff --git a/src/lib/provable/gadgets/blake2b.ts b/src/lib/provable/gadgets/blake2b.ts index 943c758810..08f5c5fc6b 100644 --- a/src/lib/provable/gadgets/blake2b.ts +++ b/src/lib/provable/gadgets/blake2b.ts @@ -1,11 +1,12 @@ // https://datatracker.ietf.org/doc/html/rfc7693.html -import { UInt64, UInt8 } from '../int.js'; -import { FlexibleBytes } from '../bytes.js'; -import { Bytes } from '../wrapped-classes.js'; -import { Gadgets } from './gadgets.js'; import { assert } from '../../util/errors.js'; +import { FlexibleBytes } from '../bytes.js'; +import { UInt8, UInt64 } from '../int.js'; import { Provable } from '../provable.js'; +import { Bytes } from '../wrapped-classes.js'; + import { wordToBytes } from './bit-slices.js'; +import { Gadgets } from './gadgets.js'; export { BLAKE2B }; diff --git a/src/lib/provable/gadgets/common.ts b/src/lib/provable/gadgets/common.ts index 9cf94098d9..426ce28622 100644 --- a/src/lib/provable/gadgets/common.ts +++ b/src/lib/provable/gadgets/common.ts @@ -1,10 +1,10 @@ -import type { Field, VarField } from '../field.js'; -import { FieldVar, VarFieldVar } from '../core/fieldvar.js'; import { Tuple } from '../../util/types.js'; import type { Bool } from '../bool.js'; -import { fieldVar } from '../gates.js'; import { existsOne } from '../core/exists.js'; import { createField, isBool } from '../core/field-constructor.js'; +import { FieldVar, VarFieldVar } from '../core/fieldvar.js'; +import type { Field, VarField } from '../field.js'; +import { fieldVar } from '../gates.js'; export { toVars, toVar, isVar, assert, bitSlice, bit, divideWithRemainder, packBits, isConstant }; diff --git a/src/lib/provable/gadgets/comparison.ts b/src/lib/provable/gadgets/comparison.ts index 8297515da6..ac7c8ba072 100644 --- a/src/lib/provable/gadgets/comparison.ts +++ b/src/lib/provable/gadgets/comparison.ts @@ -1,13 +1,14 @@ -import type { Field } from '../field.js'; -import type { Bool } from '../bool.js'; -import { createBool, createBoolUnsafe, createField } from '../core/field-constructor.js'; import { Fp } from '../../../bindings/crypto/finite-field.js'; import { assert } from '../../../lib/util/assert.js'; +import type { Bool } from '../bool.js'; import { exists, existsOne } from '../core/exists.js'; +import { createBool, createBoolUnsafe, createField } from '../core/field-constructor.js'; +import type { Field } from '../field.js'; +import { witness } from '../types/witness.js'; + import { assertMul } from './compatible.js'; import { Field3, ForeignField } from './foreign-field.js'; import { l, l2, multiRangeCheck } from './range-check.js'; -import { witness } from '../types/witness.js'; export { // generic comparison gadgets for inputs in a narrower range < p/2 diff --git a/src/lib/provable/gadgets/compatible.ts b/src/lib/provable/gadgets/compatible.ts index 490cda93e9..773d8dcda3 100644 --- a/src/lib/provable/gadgets/compatible.ts +++ b/src/lib/provable/gadgets/compatible.ts @@ -2,13 +2,14 @@ * Basic gadgets that only use generic gates, and are compatible with (create the same constraints as) * `plonk_constraint_system.ml` / R1CS_constraint_system. */ +import { Snarky } from '../../../bindings.js'; import { Fp } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../field.js'; import { FieldVar } from '../core/fieldvar.js'; -import { assert } from './common.js'; +import { Field } from '../field.js'; import { Gates } from '../gates.js'; + import { ScaledVar, emptyCell, reduceToScaledVar } from './basic.js'; -import { Snarky } from '../../../bindings.js'; +import { assert } from './common.js'; export { assertMulCompatible as assertMul, diff --git a/src/lib/provable/gadgets/elliptic-curve.ts b/src/lib/provable/gadgets/elliptic-curve.ts index 72a69a6ef7..04dc938774 100644 --- a/src/lib/provable/gadgets/elliptic-curve.ts +++ b/src/lib/provable/gadgets/elliptic-curve.ts @@ -1,10 +1,5 @@ -import { inverse, mod } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../field.js'; -import { Provable } from '../provable.js'; -import { assert } from './common.js'; -import { Field3, ForeignField, split, weakBound } from './foreign-field.js'; -import { l, l2, l2Mask, multiRangeCheck } from './range-check.js'; import { sha256 } from 'js-sha256'; + import { bigIntToBytes, bytesToBigInt } from '../../../bindings/crypto/bigint-helpers.js'; import { CurveAffine, @@ -12,12 +7,19 @@ import { affineAdd, affineDouble, } from '../../../bindings/crypto/elliptic-curve.js'; +import { inverse, mod } from '../../../bindings/crypto/finite-field.js'; +import { assertPositiveInteger } from '../../../bindings/crypto/non-negative.js'; import { Bool } from '../bool.js'; +import { exists } from '../core/exists.js'; +import { Field } from '../field.js'; +import { Provable } from '../provable.js'; import { provable } from '../types/provable-derivers.js'; -import { assertPositiveInteger } from '../../../bindings/crypto/non-negative.js'; + import { arrayGetGeneric, assertNotVectorEquals } from './basic.js'; import { sliceField3 } from './bit-slices.js'; -import { exists } from '../core/exists.js'; +import { assert } from './common.js'; +import { Field3, ForeignField, split, weakBound } from './foreign-field.js'; +import { l, l2, l2Mask, multiRangeCheck } from './range-check.js'; // external API export { EllipticCurve, Point, Ecdsa }; diff --git a/src/lib/provable/gadgets/foreign-field.ts b/src/lib/provable/gadgets/foreign-field.ts index 61d074a0f1..570878aef4 100644 --- a/src/lib/provable/gadgets/foreign-field.ts +++ b/src/lib/provable/gadgets/foreign-field.ts @@ -1,28 +1,29 @@ /** * Foreign field arithmetic gadgets. */ -import { inverse as modInverse, mod } from '../../../bindings/crypto/finite-field.js'; -import { provableTuple } from '../types/provable-derivers.js'; -import { Unconstrained } from '../types/unconstrained.js'; +import { mod, inverse as modInverse } from '../../../bindings/crypto/finite-field.js'; +import { Tuple, TupleN } from '../../util/types.js'; +import type { Bool } from '../bool.js'; +import { exists } from '../core/exists.js'; +import { createBool, createField, getField } from '../core/field-constructor.js'; import type { Field } from '../field.js'; import { Gates, foreignFieldAdd } from '../gates.js'; -import { exists } from '../core/exists.js'; import { modifiedField } from '../types/fields.js'; -import { Tuple, TupleN } from '../../util/types.js'; +import { provableTuple } from '../types/provable-derivers.js'; +import { ProvablePureExtended } from '../types/struct.js'; +import { Unconstrained } from '../types/unconstrained.js'; + import { assertOneOf } from './basic.js'; import { assert, bitSlice, toVar, toVars } from './common.js'; import { + compactMultiRangeCheck, l, - lMask, - multiRangeCheck, l2, l2Mask, l3, - compactMultiRangeCheck, + lMask, + multiRangeCheck, } from './range-check.js'; -import { createBool, createField, getField } from '../core/field-constructor.js'; -import type { Bool } from '../bool.js'; -import { ProvablePureExtended } from '../types/struct.js'; // external API export { ForeignField, Field3 }; diff --git a/src/lib/provable/gadgets/gadgets.ts b/src/lib/provable/gadgets/gadgets.ts index dc067bcf5f..09559bc7dd 100644 --- a/src/lib/provable/gadgets/gadgets.ts +++ b/src/lib/provable/gadgets/gadgets.ts @@ -1,41 +1,42 @@ /** * Wrapper file for various gadgets, with a namespace and doccomments. */ +import { Field } from '../wrapped.js'; + +import { addMod32, addMod64, divMod32, divMod64 } from './arithmetic.js'; +import { arrayGet, arrayGetGeneric } from './basic.js'; +import { sliceField3 } from './bit-slices.js'; +import { + and, + leftShift32, + leftShift64, + not, + or, + rightShift64, + rotate32, + rotate64, + xor, +} from './bitwise.js'; +import { BLAKE2B } from './blake2b.js'; +import { Field3, ForeignField, Sum as ForeignFieldSum } from './foreign-field.js'; +import { inTable, rangeCheck3x12 } from './lookup.js'; import { compactMultiRangeCheck, + isDefinitelyInRangeN, + l, + l2, + l2Mask, + l3, + lMask, multiRangeCheck, rangeCheck8, rangeCheck16, rangeCheck32, rangeCheck64, rangeCheckN, - isDefinitelyInRangeN, - l2Mask, - lMask, - l2, - l, - l3, } from './range-check.js'; -import { - not, - rotate32, - rotate64, - xor, - and, - or, - leftShift64, - rightShift64, - leftShift32, -} from './bitwise.js'; -import { Field } from '../wrapped.js'; -import { ForeignField, Field3, Sum as ForeignFieldSum } from './foreign-field.js'; -import { divMod32, addMod32, divMod64, addMod64 } from './arithmetic.js'; import { SHA2 } from './sha2.js'; import { SHA256 } from './sha256.js'; -import { BLAKE2B } from './blake2b.js'; -import { rangeCheck3x12, inTable } from './lookup.js'; -import { arrayGet, arrayGetGeneric } from './basic.js'; -import { sliceField3 } from './bit-slices.js'; export { Gadgets, Field3, ForeignFieldSum }; diff --git a/src/lib/provable/gadgets/native-curve.ts b/src/lib/provable/gadgets/native-curve.ts index a21df2766c..74614bc273 100644 --- a/src/lib/provable/gadgets/native-curve.ts +++ b/src/lib/provable/gadgets/native-curve.ts @@ -1,18 +1,19 @@ -import type { Field } from '../field.js'; -import type { Bool } from '../bool.js'; -import { Fp, Fq } from '../../../bindings/crypto/finite-field.js'; +import { Snarky } from '../../../bindings.js'; import { PallasAffine } from '../../../bindings/crypto/elliptic-curve.js'; -import { isOddAndHigh } from './comparison.js'; -import { Field3, ForeignField } from './foreign-field.js'; +import { Fp, Fq } from '../../../bindings/crypto/finite-field.js'; +import { MlPair } from '../../ml/base.js'; +import type { Bool } from '../bool.js'; import { exists } from '../core/exists.js'; -import { assert, bit, bitSlice, isConstant } from './common.js'; -import { l, multiRangeCheck, rangeCheck64, rangeCheckLessThan64 } from './range-check.js'; import { createBool, createBoolUnsafe, createField, getField } from '../core/field-constructor.js'; -import { Snarky } from '../../../bindings.js'; +import type { Field } from '../field.js'; import { Provable } from '../provable.js'; -import { MlPair } from '../../ml/base.js'; import { provable } from '../types/provable-derivers.js'; +import { assert, bit, bitSlice, isConstant } from './common.js'; +import { isOddAndHigh } from './comparison.js'; +import { Field3, ForeignField } from './foreign-field.js'; +import { l, multiRangeCheck, rangeCheck64, rangeCheckLessThan64 } from './range-check.js'; + export { scaleField, scaleShifted, diff --git a/src/lib/provable/gadgets/range-check.ts b/src/lib/provable/gadgets/range-check.ts index cb04e7f1f9..912acd6148 100644 --- a/src/lib/provable/gadgets/range-check.ts +++ b/src/lib/provable/gadgets/range-check.ts @@ -1,12 +1,13 @@ import { Snarky } from '../../../bindings.js'; import { Fp } from '../../../bindings/crypto/finite-field.js'; import { BinableFp } from '../../../mina-signer/src/field-bigint.js'; +import { TupleN } from '../../util/types.js'; +import { exists } from '../core/exists.js'; +import { createBool, createField } from '../core/field-constructor.js'; import type { Field } from '../field.js'; import { Gates } from '../gates.js'; + import { assert, bitSlice, toVar, toVars } from './common.js'; -import { exists } from '../core/exists.js'; -import { createBool, createField } from '../core/field-constructor.js'; -import { TupleN } from '../../util/types.js'; export { rangeCheck64, diff --git a/src/lib/provable/gadgets/sha2.ts b/src/lib/provable/gadgets/sha2.ts index 68c8cf7688..318396a265 100644 --- a/src/lib/provable/gadgets/sha2.ts +++ b/src/lib/provable/gadgets/sha2.ts @@ -1,11 +1,12 @@ import { mod } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../wrapped.js'; -import { UInt32, UInt64, UInt8 } from '../int.js'; -import { exists } from '../core/exists.js'; -import { FlexibleBytes } from '../bytes.js'; -import { Bytes } from '../wrapped-classes.js'; import { chunk } from '../../util/arrays.js'; import { TupleN } from '../../util/types.js'; +import { FlexibleBytes } from '../bytes.js'; +import { exists } from '../core/exists.js'; +import { UInt8, UInt32, UInt64 } from '../int.js'; +import { Bytes } from '../wrapped-classes.js'; +import { Field } from '../wrapped.js'; + import { divMod32, divMod64 } from './arithmetic.js'; import { bitSlice } from './common.js'; import { rangeCheck16 } from './range-check.js'; diff --git a/src/lib/provable/gadgets/sha256.ts b/src/lib/provable/gadgets/sha256.ts index a2e6848949..8fb7445941 100644 --- a/src/lib/provable/gadgets/sha256.ts +++ b/src/lib/provable/gadgets/sha256.ts @@ -5,13 +5,14 @@ * https://csrc.nist.gov/pubs/fips/180-4/upd1/final */ import { mod } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../wrapped.js'; -import { UInt32, UInt8 } from '../int.js'; -import { exists } from '../core/exists.js'; -import { FlexibleBytes } from '../bytes.js'; -import { Bytes } from '../wrapped-classes.js'; import { chunk } from '../../util/arrays.js'; import { TupleN } from '../../util/types.js'; +import { FlexibleBytes } from '../bytes.js'; +import { exists } from '../core/exists.js'; +import { UInt8, UInt32 } from '../int.js'; +import { Bytes } from '../wrapped-classes.js'; +import { Field } from '../wrapped.js'; + import { divMod32 } from './arithmetic.js'; import { bitSlice } from './common.js'; import { rangeCheck16 } from './range-check.js'; diff --git a/src/lib/provable/gates.ts b/src/lib/provable/gates.ts index 1a99f1d787..a1c7ae2f0e 100644 --- a/src/lib/provable/gates.ts +++ b/src/lib/provable/gates.ts @@ -1,10 +1,11 @@ import { Snarky } from '../../bindings.js'; -import type { Field } from './field.js'; -import { FieldVar, FieldConst } from './core/fieldvar.js'; import { MlArray, MlTuple } from '../ml/base.js'; -import { exists } from './core/exists.js'; import { TupleN } from '../util/types.js'; +import { exists } from './core/exists.js'; +import { FieldConst, FieldVar } from './core/fieldvar.js'; +import type { Field } from './field.js'; + export { Gates, rangeCheck0, diff --git a/src/lib/provable/group.ts b/src/lib/provable/group.ts index 908bf486a3..a74d341ed3 100644 --- a/src/lib/provable/group.ts +++ b/src/lib/provable/group.ts @@ -1,12 +1,13 @@ -import { Field } from './field.js'; -import { FieldVar } from './core/fieldvar.js'; -import { Scalar } from './scalar.js'; -import { Fp } from '../../bindings/crypto/finite-field.js'; import { GroupAffine, Pallas, PallasAffine } from '../../bindings/crypto/elliptic-curve.js'; -import { Provable } from './provable.js'; -import { Bool } from './bool.js'; +import { Fp } from '../../bindings/crypto/finite-field.js'; import { assert } from '../util/assert.js'; + +import { Bool } from './bool.js'; +import { FieldVar } from './core/fieldvar.js'; +import { Field } from './field.js'; import { add, scaleField, scaleShifted } from './gadgets/native-curve.js'; +import { Provable } from './provable.js'; +import { Scalar } from './scalar.js'; export { Group }; diff --git a/src/lib/provable/int.ts b/src/lib/provable/int.ts index 6187efdc93..461ae1ddbb 100644 --- a/src/lib/provable/int.ts +++ b/src/lib/provable/int.ts @@ -1,25 +1,26 @@ -import { Field, Bool } from './wrapped.js'; -import { AnyConstructor, Struct } from './types/struct.js'; -import { Types } from '../../bindings/mina-transaction/v1/types.js'; import * as TypesBigint from '../../bindings/mina-transaction/v1/transaction-leaves-bigint.js'; +import { Types } from '../../bindings/mina-transaction/v1/types.js'; +import { BinableFp } from '../../mina-signer/src/field-bigint.js'; +import { assert } from '../util/assert.js'; +import { TupleN } from '../util/types.js'; + +import { FieldVar } from './core/fieldvar.js'; import { HashInput } from './crypto/poseidon.js'; -import { Provable } from './provable.js'; -import * as RangeCheck from './gadgets/range-check.js'; -import * as Bitwise from './gadgets/bitwise.js'; -import { addMod32, addMod64 } from './gadgets/arithmetic.js'; import { checkBitLength, withMessage } from './field.js'; -import { FieldVar } from './core/fieldvar.js'; -import { CircuitValue, prop } from './types/circuit-value.js'; +import { addMod32, addMod64 } from './gadgets/arithmetic.js'; +import { bytesToWord, wordToBytes } from './gadgets/bit-slices.js'; +import * as Bitwise from './gadgets/bitwise.js'; import { assertLessThanGeneric, assertLessThanOrEqualGeneric, lessThanGeneric, lessThanOrEqualGeneric, } from './gadgets/comparison.js'; -import { assert } from '../util/assert.js'; -import { TupleN } from '../util/types.js'; -import { bytesToWord, wordToBytes } from './gadgets/bit-slices.js'; -import { BinableFp } from '../../mina-signer/src/field-bigint.js'; +import * as RangeCheck from './gadgets/range-check.js'; +import { Provable } from './provable.js'; +import { CircuitValue, prop } from './types/circuit-value.js'; +import { AnyConstructor, Struct } from './types/struct.js'; +import { Bool, Field } from './wrapped.js'; // external API export { UInt8, UInt32, UInt64, Int64, Sign }; diff --git a/src/lib/provable/merkle-list.ts b/src/lib/provable/merkle-list.ts index 0d3bab743d..40b007b946 100644 --- a/src/lib/provable/merkle-list.ts +++ b/src/lib/provable/merkle-list.ts @@ -1,12 +1,12 @@ -import { Bool, Field } from './wrapped.js'; -import { Provable } from './provable.js'; -import { Struct } from './types/struct.js'; +import { Poseidon, ProvableHashable, packToFields } from './crypto/poseidon.js'; import { assert } from './gadgets/common.js'; +import { Option } from './option.js'; +import { Provable } from './provable.js'; import { provableFromClass } from './types/provable-derivers.js'; -import { Poseidon, packToFields, ProvableHashable } from './crypto/poseidon.js'; -import { Unconstrained } from './types/unconstrained.js'; import { ProvableType, WithProvable } from './types/provable-intf.js'; -import { Option } from './option.js'; +import { Struct } from './types/struct.js'; +import { Unconstrained } from './types/unconstrained.js'; +import { Bool, Field } from './wrapped.js'; export { MerkleListBase, diff --git a/src/lib/provable/merkle-map.ts b/src/lib/provable/merkle-map.ts index c5096e0b71..b97df440dc 100644 --- a/src/lib/provable/merkle-map.ts +++ b/src/lib/provable/merkle-map.ts @@ -1,9 +1,10 @@ -import { arrayProp, CircuitValue } from './types/circuit-value.js'; -import { Field, Bool } from './wrapped.js'; +import { BinableFp } from '../../mina-signer/src/field-bigint.js'; + import { Poseidon } from './crypto/poseidon.js'; import { MerkleTree, MerkleWitness } from './merkle-tree.js'; import { Provable } from './provable.js'; -import { BinableFp } from '../../mina-signer/src/field-bigint.js'; +import { CircuitValue, arrayProp } from './types/circuit-value.js'; +import { Bool, Field } from './wrapped.js'; export { MerkleMap, MerkleMapWitness }; diff --git a/src/lib/provable/merkle-tree-indexed.ts b/src/lib/provable/merkle-tree-indexed.ts index 6cbc1c790a..98554ee45d 100644 --- a/src/lib/provable/merkle-tree-indexed.ts +++ b/src/lib/provable/merkle-tree-indexed.ts @@ -1,14 +1,15 @@ import { Poseidon as PoseidonBigint } from '../../bindings/crypto/poseidon.js'; -import { Bool, Field } from './wrapped.js'; -import { Option } from './option.js'; -import { Struct } from './types/struct.js'; import { From, InferValue } from '../../bindings/lib/provable-generic.js'; -import { assert } from './gadgets/common.js'; -import { Unconstrained } from './types/unconstrained.js'; -import { Provable } from './provable.js'; + import { Poseidon } from './crypto/poseidon.js'; +import { assert } from './gadgets/common.js'; import { conditionalSwap } from './merkle-tree.js'; +import { Option } from './option.js'; +import { Provable } from './provable.js'; import { provableFromClass } from './types/provable-derivers.js'; +import { Struct } from './types/struct.js'; +import { Unconstrained } from './types/unconstrained.js'; +import { Bool, Field } from './wrapped.js'; // external API export { IndexedMerkleMap, IndexedMerkleMapBase }; diff --git a/src/lib/provable/merkle-tree.ts b/src/lib/provable/merkle-tree.ts index d5cae22b30..58f48d617a 100644 --- a/src/lib/provable/merkle-tree.ts +++ b/src/lib/provable/merkle-tree.ts @@ -1,11 +1,10 @@ /** * This file contains all code related to the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree) implementation available in o1js. */ - -import { CircuitValue, arrayProp } from './types/circuit-value.js'; import { Poseidon } from './crypto/poseidon.js'; -import { Bool, Field } from './wrapped.js'; import { Provable } from './provable.js'; +import { CircuitValue, arrayProp } from './types/circuit-value.js'; +import { Bool, Field } from './wrapped.js'; // external API export { Witness, MerkleTree, MerkleWitness, BaseMerkleWitness }; diff --git a/src/lib/provable/option.ts b/src/lib/provable/option.ts index 5f9a5a58f8..b41eeee8be 100644 --- a/src/lib/provable/option.ts +++ b/src/lib/provable/option.ts @@ -1,9 +1,10 @@ import { InferValue } from '../../bindings/lib/provable-generic.js'; + import { Provable } from './provable.js'; +import { ProvableInferPureFrom, provable } from './types/provable-derivers.js'; +import { ProvableType } from './types/provable-intf.js'; import { InferProvable, Struct } from './types/struct.js'; -import { provable, ProvableInferPureFrom } from './types/provable-derivers.js'; import { Bool } from './wrapped.js'; -import { ProvableType } from './types/provable-intf.js'; export { Option, OptionOrValue }; diff --git a/src/lib/provable/packed.ts b/src/lib/provable/packed.ts index 8a57819453..da5e913ff5 100644 --- a/src/lib/provable/packed.ts +++ b/src/lib/provable/packed.ts @@ -1,12 +1,12 @@ -import { mapValue, provableFromClass } from './types/provable-derivers.js'; -import { HashInput, ProvableExtended } from './types/struct.js'; -import { Unconstrained } from './types/unconstrained.js'; +import { Poseidon, ProvableHashable, packToFields } from './crypto/poseidon.js'; import { Field } from './field.js'; import { assert } from './gadgets/common.js'; -import { Poseidon, ProvableHashable, packToFields } from './crypto/poseidon.js'; import { Provable } from './provable.js'; import { fields, modifiedField } from './types/fields.js'; +import { mapValue, provableFromClass } from './types/provable-derivers.js'; import { ProvableType, WithProvable } from './types/provable-intf.js'; +import { HashInput, ProvableExtended } from './types/struct.js'; +import { Unconstrained } from './types/unconstrained.js'; export { Packed, Hashed }; diff --git a/src/lib/provable/provable.ts b/src/lib/provable/provable.ts index 28467dadde..2b9ad5f04c 100644 --- a/src/lib/provable/provable.ts +++ b/src/lib/provable/provable.ts @@ -3,27 +3,28 @@ * - a namespace with tools for writing provable code * - the main interface for types that can be used in provable code */ +import { InferValue } from '../../bindings/lib/provable-generic.js'; +import { ToProvable } from '../../lib/provable/types/provable-intf.js'; +import { Context } from '../util/global-context.js'; + import { Bool } from './bool.js'; +import { + asProver, + constraintSystem, + generateWitness, + inCheckedComputation, + inProver, +} from './core/provable-context.js'; import { Field } from './field.js'; -import { Provable as Provable_, ProvableType } from './types/provable-intf.js'; -import type { FlexibleProvable, FlexibleProvableType, ProvableExtended } from './types/struct.js'; -import { Context } from '../util/global-context.js'; import { HashInput, InferJson, InferProvableType, InferredProvable, } from './types/provable-derivers.js'; -import { - inCheckedComputation, - inProver, - asProver, - constraintSystem, - generateWitness, -} from './core/provable-context.js'; +import { ProvableType, Provable as Provable_ } from './types/provable-intf.js'; +import type { FlexibleProvable, FlexibleProvableType, ProvableExtended } from './types/struct.js'; import { witness, witnessAsync, witnessFields } from './types/witness.js'; -import { InferValue } from '../../bindings/lib/provable-generic.js'; -import { ToProvable } from '../../lib/provable/types/provable-intf.js'; // external API export { Provable }; diff --git a/src/lib/provable/scalar-field.ts b/src/lib/provable/scalar-field.ts index 720ff69e45..340b9bd00c 100644 --- a/src/lib/provable/scalar-field.ts +++ b/src/lib/provable/scalar-field.ts @@ -1,4 +1,5 @@ import { Fq } from '../../bindings/crypto/finite-field.js'; + import { ForeignField, createForeignField } from './foreign-field.js'; import { field3ToShiftedScalar } from './gadgets/native-curve.js'; import { Provable } from './provable.js'; diff --git a/src/lib/provable/scalar.ts b/src/lib/provable/scalar.ts index 53ede4f4de..a090d3a0f6 100644 --- a/src/lib/provable/scalar.ts +++ b/src/lib/provable/scalar.ts @@ -1,18 +1,19 @@ import { Fq } from '../../bindings/crypto/finite-field.js'; import { Scalar as SignableFq } from '../../mina-signer/src/curve-bigint.js'; -import { Field, checkBitLength } from './field.js'; +import { assert } from '../util/assert.js'; + import { Bool } from './bool.js'; +import { Field, checkBitLength } from './field.js'; +import { isConstant } from './gadgets/common.js'; +import { field3FromBits } from './gadgets/foreign-field.js'; import { ShiftedScalar, field3ToShiftedScalar, fieldToShiftedScalar, shiftedScalarToField3, } from './gadgets/native-curve.js'; -import { isConstant } from './gadgets/common.js'; import { Provable } from './provable.js'; -import { assert } from '../util/assert.js'; import type { HashInput } from './types/provable-derivers.js'; -import { field3FromBits } from './gadgets/foreign-field.js'; export { Scalar, ScalarConst }; diff --git a/src/lib/provable/string.ts b/src/lib/provable/string.ts index d5060ab1a8..e44b0021ae 100644 --- a/src/lib/provable/string.ts +++ b/src/lib/provable/string.ts @@ -1,9 +1,9 @@ -import { Bool, Field } from './wrapped.js'; -import { Provable } from './provable.js'; -import { Poseidon, HashInput } from './crypto/poseidon.js'; +import { HashInput, Poseidon } from './crypto/poseidon.js'; import { Gadgets } from './gadgets/gadgets.js'; -import { Struct } from './types/struct.js'; +import { Provable } from './provable.js'; import { provable } from './types/provable-derivers.js'; +import { Struct } from './types/struct.js'; +import { Bool, Field } from './wrapped.js'; export { Character, CircuitString }; diff --git a/src/lib/provable/test/arithmetic.unit-test.ts b/src/lib/provable/test/arithmetic.unit-test.ts index 4694fe37a8..3a11ce9a2e 100644 --- a/src/lib/provable/test/arithmetic.unit-test.ts +++ b/src/lib/provable/test/arithmetic.unit-test.ts @@ -6,11 +6,11 @@ import { fieldWithRng, record, } from '../../testing/equivalent.js'; -import { Field } from '../wrapped.js'; +import { Random } from '../../testing/random.js'; +import { assert } from '../gadgets/common.js'; import { Gadgets } from '../gadgets/gadgets.js'; import { provable } from '../types/provable-derivers.js'; -import { assert } from '../gadgets/common.js'; -import { Random } from '../../testing/random.js'; +import { Field } from '../wrapped.js'; let uint = (length: number) => fieldWithRng(Random.biguint(length)); diff --git a/src/lib/provable/test/base64.unit-test.ts b/src/lib/provable/test/base64.unit-test.ts index 13378048a3..b8f89ddc9c 100644 --- a/src/lib/provable/test/base64.unit-test.ts +++ b/src/lib/provable/test/base64.unit-test.ts @@ -1,6 +1,7 @@ -import { Bytes } from '../wrapped-classes.js'; -import { describe, test } from 'node:test'; import { expect } from 'expect'; +import { describe, test } from 'node:test'; + +import { Bytes } from '../wrapped-classes.js'; function calculateB64DecodedBytesLength(base64String: string): number { // Calculate the length of the base64-encoded string diff --git a/src/lib/provable/test/bigint.unit-test.ts b/src/lib/provable/test/bigint.unit-test.ts index ed887f630f..f38c66a5ff 100644 --- a/src/lib/provable/test/bigint.unit-test.ts +++ b/src/lib/provable/test/bigint.unit-test.ts @@ -1,8 +1,7 @@ -import { createProvableBigInt } from '../bigint.js'; -import { Fq } from '../../../bindings/crypto/finite-field.js'; import { bls12_381 } from '@noble/curves/bls12-381'; import { secp521r1 } from '@noble/curves/p521'; +import { Fq } from '../../../bindings/crypto/finite-field.js'; import { equivalentProvable as equivalent, spec, @@ -10,6 +9,7 @@ import { unit, } from '../../testing/equivalent.js'; import { Random } from '../../testing/property.js'; +import { createProvableBigInt } from '../bigint.js'; import { ProvablePure } from '../types/provable-intf.js'; class SmallField extends createProvableBigInt(17n) {} diff --git a/src/lib/provable/test/bitwise.unit-test.ts b/src/lib/provable/test/bitwise.unit-test.ts index 14ea63dc68..650bc16251 100644 --- a/src/lib/provable/test/bitwise.unit-test.ts +++ b/src/lib/provable/test/bitwise.unit-test.ts @@ -1,24 +1,24 @@ -import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { - equivalentProvable as equivalent, - equivalentAsync, - field, - fieldWithRng, -} from '../../testing/equivalent.js'; +import { GateType } from '../../../bindings.js'; import { Fp, mod } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../wrapped.js'; -import { Gadgets } from '../gadgets/gadgets.js'; -import { Random } from '../../testing/property.js'; +import { ZkProgram } from '../../proof-system/zkprogram.js'; import { + and, constraintSystem, contains, equals, ifNotAllConstant, repeat, - and, withoutGenerics, } from '../../testing/constraint-system.js'; -import { GateType } from '../../../bindings.js'; +import { + equivalentProvable as equivalent, + equivalentAsync, + field, + fieldWithRng, +} from '../../testing/equivalent.js'; +import { Random } from '../../testing/property.js'; +import { Gadgets } from '../gadgets/gadgets.js'; +import { Field } from '../wrapped.js'; const maybeField = { ...field, diff --git a/src/lib/provable/test/blake2b.unit-test.ts b/src/lib/provable/test/blake2b.unit-test.ts index 6eace7dea3..8e4475b7ef 100644 --- a/src/lib/provable/test/blake2b.unit-test.ts +++ b/src/lib/provable/test/blake2b.unit-test.ts @@ -1,11 +1,13 @@ -import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Bytes } from '../wrapped-classes.js'; -import { Gadgets } from '../gadgets/gadgets.js'; import { blake2b as nobleBlake2b } from '@noble/hashes/blake2b'; -import { bytes } from './test-utils.js'; +import { expect } from 'expect'; + +import { ZkProgram } from '../../proof-system/zkprogram.js'; import { equivalentAsync, equivalentProvable } from '../../testing/equivalent.js'; import { Random, sample } from '../../testing/random.js'; -import { expect } from 'expect'; +import { Gadgets } from '../gadgets/gadgets.js'; +import { Bytes } from '../wrapped-classes.js'; + +import { bytes } from './test-utils.js'; sample(Random.nat(400), 5).forEach((preimageLength) => { let inputBytes = bytes(preimageLength); diff --git a/src/lib/provable/test/custom-gates-recursion.unit-test.ts b/src/lib/provable/test/custom-gates-recursion.unit-test.ts index 2ec61c4cf0..de6fc50d62 100644 --- a/src/lib/provable/test/custom-gates-recursion.unit-test.ts +++ b/src/lib/provable/test/custom-gates-recursion.unit-test.ts @@ -1,13 +1,13 @@ /** * This tests that we can use optional custom gates plus recursion in the same zkprogram proof. */ -import { Bool } from '../wrapped.js'; import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Provable } from '../provable.js'; +import { Crypto } from '../crypto/crypto.js'; import { assert } from '../gadgets/common.js'; import { Ecdsa, Point } from '../gadgets/elliptic-curve.js'; import { Field3 } from '../gadgets/foreign-field.js'; -import { Crypto } from '../crypto/crypto.js'; +import { Provable } from '../provable.js'; +import { Bool } from '../wrapped.js'; const Secp256k1 = Crypto.createCurve(Crypto.CurveParams.Secp256k1); diff --git a/src/lib/provable/test/dynamic-array.unit-test.ts b/src/lib/provable/test/dynamic-array.unit-test.ts index 9d322376a0..250006e994 100644 --- a/src/lib/provable/test/dynamic-array.unit-test.ts +++ b/src/lib/provable/test/dynamic-array.unit-test.ts @@ -1,8 +1,8 @@ -import { UInt8 } from '../int.js'; -import { Field } from '../field.js'; import { ZkProgram } from '../../proof-system/zkprogram.js'; import { DynamicArray } from '../dynamic-array.js'; +import { Field } from '../field.js'; import { assert } from '../gadgets/common.js'; +import { UInt8 } from '../int.js'; import { Provable } from '../provable.js'; // Out-of-circuit checks of dynamic arrays diff --git a/src/lib/provable/test/ecdsa.unit-test.ts b/src/lib/provable/test/ecdsa.unit-test.ts index 82c2aa3df8..2a2deab8b5 100644 --- a/src/lib/provable/test/ecdsa.unit-test.ts +++ b/src/lib/provable/test/ecdsa.unit-test.ts @@ -1,17 +1,9 @@ -import { createCurveAffine } from '../../../bindings/crypto/elliptic-curve.js'; -import { - Ecdsa, - EllipticCurve, - Point, - initialAggregator, - verifyEcdsaConstant, -} from '../gadgets/elliptic-curve.js'; -import { Field3 } from '../gadgets/foreign-field.js'; +import { expect } from 'expect'; + +import { bytesToBigInt } from '../../../bindings/crypto/bigint-helpers.js'; import { CurveParams } from '../../../bindings/crypto/elliptic-curve-examples.js'; -import { Provable } from '../provable.js'; +import { createCurveAffine } from '../../../bindings/crypto/elliptic-curve.js'; import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { assert } from '../gadgets/common.js'; -import { foreignField, uniformForeignField } from './test-utils.js'; import { First, Second, @@ -22,10 +14,20 @@ import { oneOf, record, } from '../../testing/equivalent.js'; -import { Bool } from '../bool.js'; import { Random } from '../../testing/random.js'; -import { bytesToBigInt } from '../../../bindings/crypto/bigint-helpers.js'; -import { expect } from 'expect'; +import { Bool } from '../bool.js'; +import { assert } from '../gadgets/common.js'; +import { + Ecdsa, + EllipticCurve, + Point, + initialAggregator, + verifyEcdsaConstant, +} from '../gadgets/elliptic-curve.js'; +import { Field3 } from '../gadgets/foreign-field.js'; +import { Provable } from '../provable.js'; + +import { foreignField, uniformForeignField } from './test-utils.js'; // quick tests const Secp256k1 = createCurveAffine(CurveParams.Secp256k1); diff --git a/src/lib/provable/test/elliptic-curve.unit-test.ts b/src/lib/provable/test/elliptic-curve.unit-test.ts index ce9b3b5ced..72d2936647 100644 --- a/src/lib/provable/test/elliptic-curve.unit-test.ts +++ b/src/lib/provable/test/elliptic-curve.unit-test.ts @@ -4,6 +4,7 @@ import { array, equivalentProvable, map, onlyIf, spec, unit } from '../../testin import { Random } from '../../testing/random.js'; import { assert } from '../gadgets/common.js'; import { EllipticCurve, Point, simpleMapToCurve } from '../gadgets/elliptic-curve.js'; + import { foreignField, throwError } from './test-utils.js'; // provable equivalence tests diff --git a/src/lib/provable/test/field.unit-test.ts b/src/lib/provable/test/field.unit-test.ts index 6958b1591d..29a11ed450 100644 --- a/src/lib/provable/test/field.unit-test.ts +++ b/src/lib/provable/test/field.unit-test.ts @@ -1,24 +1,25 @@ -import { Field } from '../wrapped.js'; -import { Fp } from '../../../bindings/crypto/finite-field.js'; -import { BinableFp } from '../../../mina-signer/src/field-bigint.js'; -import { test, Random } from '../../testing/property.js'; import { deepEqual, throws } from 'node:assert/strict'; -import { Provable } from '../provable.js'; + +import { Fp } from '../../../bindings/crypto/finite-field.js'; import { Binable } from '../../../bindings/lib/binable.js'; -import { ProvableExtended } from '../types/struct.js'; -import { FieldType } from '../core/fieldvar.js'; +import { BinableFp } from '../../../mina-signer/src/field-bigint.js'; import { + bigintField, + bool, equivalentProvable as equivalent, - oneOf, field, - bigintField, + oneOf, throwError, unit, - bool, } from '../../testing/equivalent.js'; +import { Random, test } from '../../testing/property.js'; +import { assert } from '../../util/assert.js'; +import { FieldType } from '../core/fieldvar.js'; import { synchronousRunners } from '../core/provable-context.js'; +import { Provable } from '../provable.js'; import { ProvablePure } from '../types/provable-intf.js'; -import { assert } from '../../util/assert.js'; +import { ProvableExtended } from '../types/struct.js'; +import { Field } from '../wrapped.js'; let { runAndCheckSync } = await synchronousRunners(); diff --git a/src/lib/provable/test/foreign-curve.unit-test.ts b/src/lib/provable/test/foreign-curve.unit-test.ts index 1cb147c23e..0213b0c107 100644 --- a/src/lib/provable/test/foreign-curve.unit-test.ts +++ b/src/lib/provable/test/foreign-curve.unit-test.ts @@ -1,9 +1,9 @@ -import { createForeignCurve } from '../crypto/foreign-curve.js'; -import { Fq } from '../../../bindings/crypto/finite-field.js'; import { Vesta as V } from '../../../bindings/crypto/elliptic-curve.js'; -import { Provable } from '../provable.js'; -import { Field } from '../field.js'; +import { Fq } from '../../../bindings/crypto/finite-field.js'; import { Crypto } from '../crypto/crypto.js'; +import { createForeignCurve } from '../crypto/foreign-curve.js'; +import { Field } from '../field.js'; +import { Provable } from '../provable.js'; class Vesta extends createForeignCurve(Crypto.CurveParams.Vesta) {} class Fp extends Vesta.Scalar {} diff --git a/src/lib/provable/test/foreign-field-gadgets.unit-test.ts b/src/lib/provable/test/foreign-field-gadgets.unit-test.ts index 1895bfa1f5..2921d807d3 100644 --- a/src/lib/provable/test/foreign-field-gadgets.unit-test.ts +++ b/src/lib/provable/test/foreign-field-gadgets.unit-test.ts @@ -1,19 +1,7 @@ -import type { FiniteField } from '../../../bindings/crypto/finite-field.js'; +import { GateType } from '../../../bindings.js'; import { exampleFields } from '../../../bindings/crypto/finite-field-examples.js'; -import { - array, - equivalent, - equivalentAsync, - equivalentProvable, - fromRandom, - record, - unit, -} from '../../testing/equivalent.js'; -import { Random } from '../../testing/random.js'; -import { Field3, Gadgets } from '../gadgets/gadgets.js'; +import type { FiniteField } from '../../../bindings/crypto/finite-field.js'; import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Provable } from '../provable.js'; -import { assert } from '../gadgets/common.js'; import { allConstant, and, @@ -26,10 +14,23 @@ import { repeat, withoutGenerics, } from '../../testing/constraint-system.js'; -import { GateType } from '../../../bindings.js'; +import { + array, + equivalent, + equivalentAsync, + equivalentProvable, + fromRandom, + record, + unit, +} from '../../testing/equivalent.js'; +import { Random } from '../../testing/random.js'; import { AnyTuple } from '../../util/types.js'; -import { foreignField, throwError, unreducedForeignField } from './test-utils.js'; +import { assert } from '../gadgets/common.js'; +import { Field3, Gadgets } from '../gadgets/gadgets.js'; import { l2 } from '../gadgets/range-check.js'; +import { Provable } from '../provable.js'; + +import { foreignField, throwError, unreducedForeignField } from './test-utils.js'; const { ForeignField } = Gadgets; diff --git a/src/lib/provable/test/foreign-field.unit-test.ts b/src/lib/provable/test/foreign-field.unit-test.ts index 85e88d3d3e..aef7171b56 100644 --- a/src/lib/provable/test/foreign-field.unit-test.ts +++ b/src/lib/provable/test/foreign-field.unit-test.ts @@ -1,7 +1,6 @@ -import { Field } from '../wrapped.js'; -import { AlmostForeignField, createForeignField } from '../foreign-field.js'; -import { Fq } from '../../../bindings/crypto/finite-field.js'; import { expect } from 'expect'; + +import { Fq } from '../../../bindings/crypto/finite-field.js'; import { bool, equivalentProvable as equivalent, @@ -10,9 +9,11 @@ import { throwError, unit, } from '../../testing/equivalent.js'; -import { test, Random } from '../../testing/property.js'; +import { Random, test } from '../../testing/property.js'; +import { AlmostForeignField, createForeignField } from '../foreign-field.js'; import { l } from '../gadgets/range-check.js'; import { ProvablePure } from '../types/provable-intf.js'; +import { Field } from '../wrapped.js'; // toy example - F_17 diff --git a/src/lib/provable/test/group.test.ts b/src/lib/provable/test/group.test.ts index 33c58bb8d9..e0451a89de 100644 --- a/src/lib/provable/test/group.test.ts +++ b/src/lib/provable/test/group.test.ts @@ -1,4 +1,4 @@ -import { Bool, Group, Scalar, Provable } from 'o1js'; +import { Bool, Group, Provable, Scalar } from 'o1js'; describe('group', () => { let g = Group({ x: -1, y: 2 }); diff --git a/src/lib/provable/test/group.unit-test.ts b/src/lib/provable/test/group.unit-test.ts index b0974f551c..2a1e669f29 100644 --- a/src/lib/provable/test/group.unit-test.ts +++ b/src/lib/provable/test/group.unit-test.ts @@ -1,13 +1,14 @@ -import { Group } from '../wrapped.js'; -import { test, Random } from '../../testing/property.js'; -import { Provable } from '../provable.js'; +import assert from 'assert'; + import { Poseidon } from '../../../mina-signer/src/poseidon-bigint.js'; -import { synchronousRunners } from '../core/provable-context.js'; -import { Scalar } from '../scalar.js'; -import { Field } from '../field.js'; import { equivalentProvable, spec, unit } from '../../testing/equivalent.js'; +import { Random, test } from '../../testing/property.js'; import { Bool } from '../bool.js'; -import assert from 'assert'; +import { synchronousRunners } from '../core/provable-context.js'; +import { Field } from '../field.js'; +import { Provable } from '../provable.js'; +import { Scalar } from '../scalar.js'; +import { Group } from '../wrapped.js'; let { runAndCheckSync } = await synchronousRunners(); diff --git a/src/lib/provable/test/int.test.ts b/src/lib/provable/test/int.test.ts index dfb3680cfa..4afdfb3858 100644 --- a/src/lib/provable/test/int.test.ts +++ b/src/lib/provable/test/int.test.ts @@ -1,4 +1,4 @@ -import { Provable, Int64, UInt64, UInt32, UInt8, Field, Bool, Sign } from 'o1js'; +import { Bool, Field, Int64, Provable, Sign, UInt8, UInt32, UInt64 } from 'o1js'; describe('int', () => { const NUMBERMAX = 2 ** 53 - 1; // JavaScript numbers can only safely store integers in the range -(2^53 − 1) to 2^53 − 1 diff --git a/src/lib/provable/test/keccak.unit-test.ts b/src/lib/provable/test/keccak.unit-test.ts index 2030bbf804..22ff1fe597 100644 --- a/src/lib/provable/test/keccak.unit-test.ts +++ b/src/lib/provable/test/keccak.unit-test.ts @@ -1,6 +1,3 @@ -import { Keccak } from '../crypto/keccak.js'; -import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { equivalentProvable, equivalent, equivalentAsync } from '../../testing/equivalent.js'; import { keccak_224, keccak_256, @@ -11,11 +8,16 @@ import { sha3_384, sha3_512, } from '@noble/hashes/sha3'; +import { expect } from 'expect'; + +import { ZkProgram } from '../../proof-system/zkprogram.js'; +import { equivalent, equivalentAsync, equivalentProvable } from '../../testing/equivalent.js'; +import { Random, sample, test } from '../../testing/property.js'; +import { Keccak } from '../crypto/keccak.js'; +import { UInt8 } from '../int.js'; import { Bytes } from '../wrapped-classes.js'; + import { bytes } from './test-utils.js'; -import { UInt8 } from '../int.js'; -import { test, Random, sample } from '../../testing/property.js'; -import { expect } from 'expect'; const RUNS = 1; diff --git a/src/lib/provable/test/lookup.unit-test.ts b/src/lib/provable/test/lookup.unit-test.ts index 4afa50e914..cbb08f5276 100644 --- a/src/lib/provable/test/lookup.unit-test.ts +++ b/src/lib/provable/test/lookup.unit-test.ts @@ -1,12 +1,13 @@ -import { Field } from '../field.js'; +import { Cache, FeatureFlags } from 'o1js'; + import { ZkProgram } from '../../proof-system/zkprogram.js'; +import { constraintSystem, contains } from '../../testing/constraint-system.js'; import { Spec, boolean, equivalentAsync, fieldWithRng } from '../../testing/equivalent.js'; import { Random } from '../../testing/property.js'; +import { Field } from '../field.js'; import { assert } from '../gadgets/common.js'; import { Gadgets } from '../gadgets/gadgets.js'; import { Gates } from '../gates.js'; -import { constraintSystem, contains } from '../../testing/constraint-system.js'; -import { FeatureFlags, Cache } from 'o1js'; let uint = (n: number | bigint): Spec => { return fieldWithRng(Random.bignat((1n << BigInt(n)) - 1n)); diff --git a/src/lib/provable/test/merkle-tree.test.ts b/src/lib/provable/test/merkle-tree.test.ts index ad4c6c7c84..333a46f841 100644 --- a/src/lib/provable/test/merkle-tree.test.ts +++ b/src/lib/provable/test/merkle-tree.test.ts @@ -1,4 +1,4 @@ -import { Poseidon, Field, MerkleTree, MerkleWitness } from 'o1js'; +import { Field, MerkleTree, MerkleWitness, Poseidon } from 'o1js'; describe('Merkle Tree', () => { it('root of empty tree of size 1', () => { diff --git a/src/lib/provable/test/merkle-tree.unit-test.ts b/src/lib/provable/test/merkle-tree.unit-test.ts index 88aff663d4..6380913781 100644 --- a/src/lib/provable/test/merkle-tree.unit-test.ts +++ b/src/lib/provable/test/merkle-tree.unit-test.ts @@ -1,13 +1,15 @@ -import { Bool, Field } from '../wrapped.js'; -import { MerkleTree, conditionalSwap } from '../merkle-tree.js'; -import { Random, test } from '../../testing/property.js'; import { expect } from 'expect'; + +import { constraintSystem } from '../../testing/constraint-system.js'; +import { field } from '../../testing/equivalent.js'; +import { Random, test } from '../../testing/property.js'; +import { synchronousRunners } from '../core/provable-context.js'; import { MerkleMap, MerkleMapWitness } from '../merkle-map.js'; import { IndexedMerkleMap, Leaf } from '../merkle-tree-indexed.js'; -import { synchronousRunners } from '../core/provable-context.js'; +import { MerkleTree, conditionalSwap } from '../merkle-tree.js'; import { Provable } from '../provable.js'; -import { constraintSystem } from '../../testing/constraint-system.js'; -import { field } from '../../testing/equivalent.js'; +import { Bool, Field } from '../wrapped.js'; + import { throwError } from './test-utils.js'; const height = 31; diff --git a/src/lib/provable/test/nullifier.unit-test.ts b/src/lib/provable/test/nullifier.unit-test.ts index 5cd9cac9e6..27fc9804a7 100644 --- a/src/lib/provable/test/nullifier.unit-test.ts +++ b/src/lib/provable/test/nullifier.unit-test.ts @@ -1,7 +1,7 @@ import { createNullifier } from '../../../mina-signer/src/nullifier.js'; -import { Field } from '../wrapped.js'; import { Nullifier } from '../crypto/nullifier.js'; import { PrivateKey } from '../crypto/signature.js'; +import { Field } from '../wrapped.js'; let priv = PrivateKey.random(); diff --git a/src/lib/provable/test/primitives.test.ts b/src/lib/provable/test/primitives.test.ts index a8ffcebf95..77f28a43e1 100644 --- a/src/lib/provable/test/primitives.test.ts +++ b/src/lib/provable/test/primitives.test.ts @@ -1,4 +1,5 @@ -import { Field, Bool, Provable } from 'o1js'; +import { Bool, Field, Provable } from 'o1js'; + describe('bool', () => { describe('inside circuit', () => { describe('toField', () => { diff --git a/src/lib/provable/test/primitives.unit-test.ts b/src/lib/provable/test/primitives.unit-test.ts index 75bea6f86e..2ee37d1a22 100644 --- a/src/lib/provable/test/primitives.unit-test.ts +++ b/src/lib/provable/test/primitives.unit-test.ts @@ -1,6 +1,7 @@ -import { Circuit, circuitMain } from '../../proof-system/circuit.js'; -import { UInt64, UInt32 } from '../int.js'; import { expect } from 'expect'; + +import { Circuit, circuitMain } from '../../proof-system/circuit.js'; +import { UInt32, UInt64 } from '../int.js'; import { Provable } from '../provable.js'; class Primitives extends Circuit { diff --git a/src/lib/provable/test/provable.test.ts b/src/lib/provable/test/provable.test.ts index ea341ca191..d697543ec3 100644 --- a/src/lib/provable/test/provable.test.ts +++ b/src/lib/provable/test/provable.test.ts @@ -1,4 +1,4 @@ -import { Bool, Provable, Int64, Struct, Field, PrivateKey, PublicKey } from 'o1js'; +import { Bool, Field, Int64, PrivateKey, Provable, PublicKey, Struct } from 'o1js'; describe('Provable', () => { it('Provable.if out of snark', () => { diff --git a/src/lib/provable/test/provable.unit-test.ts b/src/lib/provable/test/provable.unit-test.ts index 4dca8b9c26..0f1ccd175a 100644 --- a/src/lib/provable/test/provable.unit-test.ts +++ b/src/lib/provable/test/provable.unit-test.ts @@ -1,8 +1,9 @@ -import { it } from 'node:test'; -import { Provable } from '../provable.js'; -import { Field } from '../field.js'; import { expect } from 'expect'; +import { it } from 'node:test'; + import { exists } from '../core/exists.js'; +import { Field } from '../field.js'; +import { Provable } from '../provable.js'; await it('can witness large field array', async () => { let N = 100_000; diff --git a/src/lib/provable/test/range-check.unit-test.ts b/src/lib/provable/test/range-check.unit-test.ts index 29e779f28f..96b0d1d693 100644 --- a/src/lib/provable/test/range-check.unit-test.ts +++ b/src/lib/provable/test/range-check.unit-test.ts @@ -1,11 +1,5 @@ import { mod } from '../../../bindings/crypto/finite-field.js'; -import { Field } from '../wrapped.js'; import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Spec, boolean, equivalentAsync, fieldWithRng } from '../../testing/equivalent.js'; -import { Random } from '../../testing/property.js'; -import { assert } from '../gadgets/common.js'; -import { Gadgets } from '../gadgets/gadgets.js'; -import { l } from '../gadgets/range-check.js'; import { constraintSystem, contains, @@ -13,6 +7,12 @@ import { ifNotAllConstant, withoutGenerics, } from '../../testing/constraint-system.js'; +import { Spec, boolean, equivalentAsync, fieldWithRng } from '../../testing/equivalent.js'; +import { Random } from '../../testing/property.js'; +import { assert } from '../gadgets/common.js'; +import { Gadgets } from '../gadgets/gadgets.js'; +import { l } from '../gadgets/range-check.js'; +import { Field } from '../wrapped.js'; let uint = (n: number | bigint): Spec => { let uint = Random.bignat((1n << BigInt(n)) - 1n); diff --git a/src/lib/provable/test/sha2.unit-test.ts b/src/lib/provable/test/sha2.unit-test.ts index 804e92c399..efee7a6b66 100644 --- a/src/lib/provable/test/sha2.unit-test.ts +++ b/src/lib/provable/test/sha2.unit-test.ts @@ -1,15 +1,16 @@ // In-circuit tests of the SHA2 family of hash functions together with // test vectors extracted from https://www.di-mgt.com.au/sha_testvectors.html +import { sha224 as nobleSha224, sha256 as nobleSha256 } from '@noble/hashes/sha256'; +import { sha384 as nobleSha384, sha512 as nobleSha512 } from '@noble/hashes/sha512'; +import { expect } from 'expect'; import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Bytes } from '../wrapped-classes.js'; -import { Gadgets } from '../gadgets/gadgets.js'; -import { sha256 as nobleSha256, sha224 as nobleSha224 } from '@noble/hashes/sha256'; -import { sha384 as nobleSha384, sha512 as nobleSha512 } from '@noble/hashes/sha512'; -import { bytes } from './test-utils.js'; import { equivalentAsync, equivalentProvable } from '../../testing/equivalent.js'; import { Random, sample } from '../../testing/random.js'; -import { expect } from 'expect'; +import { Gadgets } from '../gadgets/gadgets.js'; +import { Bytes } from '../wrapped-classes.js'; + +import { bytes } from './test-utils.js'; // SHA2-224 TESTS { diff --git a/src/lib/provable/test/sha256.unit-test.ts b/src/lib/provable/test/sha256.unit-test.ts index d2bcafc27c..f56fb6f8d7 100644 --- a/src/lib/provable/test/sha256.unit-test.ts +++ b/src/lib/provable/test/sha256.unit-test.ts @@ -1,11 +1,13 @@ -import { ZkProgram } from '../../proof-system/zkprogram.js'; -import { Bytes } from '../wrapped-classes.js'; -import { Gadgets } from '../gadgets/gadgets.js'; import { sha256 as nobleSha256 } from '@noble/hashes/sha256'; -import { bytes } from './test-utils.js'; +import { expect } from 'expect'; + +import { ZkProgram } from '../../proof-system/zkprogram.js'; import { equivalentAsync, equivalentProvable } from '../../testing/equivalent.js'; import { Random, sample } from '../../testing/random.js'; -import { expect } from 'expect'; +import { Gadgets } from '../gadgets/gadgets.js'; +import { Bytes } from '../wrapped-classes.js'; + +import { bytes } from './test-utils.js'; sample(Random.nat(400), 5).forEach((preimageLength) => { let inputBytes = bytes(preimageLength); diff --git a/src/lib/provable/test/string.unit-test.ts b/src/lib/provable/test/string.unit-test.ts index 6741da13ba..b9d60aff06 100644 --- a/src/lib/provable/test/string.unit-test.ts +++ b/src/lib/provable/test/string.unit-test.ts @@ -1,6 +1,6 @@ -import { Bool, Character, Provable, CircuitString, Field } from 'o1js'; -import { describe, test } from 'node:test'; import { expect } from 'expect'; +import { describe, test } from 'node:test'; +import { Bool, Character, CircuitString, Field, Provable } from 'o1js'; describe('Circuit String', () => { describe('#equals', () => { diff --git a/src/lib/provable/test/struct.unit-test.ts b/src/lib/provable/test/struct.unit-test.ts index 9d9dfad2a4..0eea3ad33a 100644 --- a/src/lib/provable/test/struct.unit-test.ts +++ b/src/lib/provable/test/struct.unit-test.ts @@ -1,23 +1,24 @@ -import { Struct } from '../types/struct.js'; -import { provable } from '../types/provable-derivers.js'; -import { Unconstrained } from '../types/unconstrained.js'; -import { UInt32 } from '../int.js'; -import { PrivateKey, PublicKey } from '../crypto/signature.js'; +import assert from 'assert/strict'; import { expect } from 'expect'; -import { method, SmartContract } from '../../mina/v1/zkapp.js'; + +import { From } from '../../../bindings/lib/provable-generic.js'; +import { AccountUpdate } from '../../mina/v1/account-update.js'; import { LocalBlockchain, setActiveInstance, transaction } from '../../mina/v1/mina.js'; import { State, state } from '../../mina/v1/state.js'; -import { AccountUpdate } from '../../mina/v1/account-update.js'; -import { Provable } from '../provable.js'; -import { Field } from '../wrapped.js'; +import { SmartContract, method } from '../../mina/v1/zkapp.js'; import { Bool } from '../bool.js'; -import assert from 'assert/strict'; import { FieldType } from '../core/fieldvar.js'; -import { From } from '../../../bindings/lib/provable-generic.js'; -import { Group } from '../group.js'; -import { modifiedField } from '../types/fields.js'; +import { PrivateKey, PublicKey } from '../crypto/signature.js'; import { createForeignField } from '../foreign-field.js'; import { Field3 } from '../gadgets/foreign-field.js'; +import { Group } from '../group.js'; +import { UInt32 } from '../int.js'; +import { Provable } from '../provable.js'; +import { modifiedField } from '../types/fields.js'; +import { provable } from '../types/provable-derivers.js'; +import { Struct } from '../types/struct.js'; +import { Unconstrained } from '../types/unconstrained.js'; +import { Field } from '../wrapped.js'; let type = provable({ nested: { a: Number, b: Boolean }, diff --git a/src/lib/provable/test/test-utils.ts b/src/lib/provable/test/test-utils.ts index ffcb375eb7..bc8de5b3cd 100644 --- a/src/lib/provable/test/test-utils.ts +++ b/src/lib/provable/test/test-utils.ts @@ -1,12 +1,12 @@ +import { CurveAffine } from '../../../bindings/crypto/elliptic-curve.js'; import type { FiniteField } from '../../../bindings/crypto/finite-field.js'; import { ProvableSpec, map, spec } from '../../testing/equivalent.js'; import { Random } from '../../testing/random.js'; -import { Field3 } from '../gadgets/gadgets.js'; import { assert } from '../gadgets/common.js'; -import { Bytes } from '../wrapped-classes.js'; -import { CurveAffine } from '../../../bindings/crypto/elliptic-curve.js'; import { simpleMapToCurve } from '../gadgets/elliptic-curve.js'; +import { Field3 } from '../gadgets/gadgets.js'; import { provable } from '../types/provable-derivers.js'; +import { Bytes } from '../wrapped-classes.js'; export { foreignField, unreducedForeignField, uniformForeignField, bytes, pointSpec, throwError }; diff --git a/src/lib/provable/types/circuit-value.ts b/src/lib/provable/types/circuit-value.ts index a5d06614b5..5f8fef52a8 100644 --- a/src/lib/provable/types/circuit-value.ts +++ b/src/lib/provable/types/circuit-value.ts @@ -1,7 +1,9 @@ import 'reflect-metadata'; + +import { Provable } from '../provable.js'; import { Field } from '../wrapped.js'; + import { HashInput, NonMethods } from './provable-derivers.js'; -import { Provable } from '../provable.js'; import { AnyConstructor, FlexibleProvable } from './struct.js'; export { CircuitValue, prop, arrayProp }; diff --git a/src/lib/provable/types/fields.ts b/src/lib/provable/types/fields.ts index 12ebca3b32..c9b0aa523b 100644 --- a/src/lib/provable/types/fields.ts +++ b/src/lib/provable/types/fields.ts @@ -1,6 +1,7 @@ -import { ProvablePureExtended } from './struct.js'; -import type { Field } from '../field.js'; import { createField, getField } from '../core/field-constructor.js'; +import type { Field } from '../field.js'; + +import { ProvablePureExtended } from './struct.js'; export { modifiedField, fields }; diff --git a/src/lib/provable/types/provable-derivers.ts b/src/lib/provable/types/provable-derivers.ts index 96de6bda1d..c50b59c1de 100644 --- a/src/lib/provable/types/provable-derivers.ts +++ b/src/lib/provable/types/provable-derivers.ts @@ -1,28 +1,29 @@ +import { GenericHashInput } from '../../../bindings/lib/generic.js'; import { - Provable, - ProvableHashable, - ProvablePure, - ProvableType, - ToProvable, -} from './provable-intf.js'; -import type { Field } from '../wrapped.js'; -import { - createDerivers, - NonMethods, + Constructor, InferProvable as GenericInferProvable, - InferJson, InferredProvable as GenericInferredProvable, IsPure as GenericIsPure, NestedProvable as GenericNestedProvable, - createHashInput, - Constructor, - InferValue, + InferJson, InferJsonNested, - InferValueNested, InferProvableNested, + InferValue, + InferValueNested, + NonMethods, + createDerivers, + createHashInput, } from '../../../bindings/lib/provable-generic.js'; import { Tuple } from '../../util/types.js'; -import { GenericHashInput } from '../../../bindings/lib/generic.js'; +import type { Field } from '../wrapped.js'; + +import { + Provable, + ProvableHashable, + ProvablePure, + ProvableType, + ToProvable, +} from './provable-intf.js'; // external API export { diff --git a/src/lib/provable/types/struct.ts b/src/lib/provable/types/struct.ts index f506452755..ab0ffdce96 100644 --- a/src/lib/provable/types/struct.ts +++ b/src/lib/provable/types/struct.ts @@ -1,10 +1,11 @@ -import { Field, Bool, Scalar, Group } from '../wrapped.js'; -import { provable, provableTuple, HashInput, NonMethods } from './provable-derivers.js'; -import type { InferJson, InferProvable, InferredProvable, IsPure } from './provable-derivers.js'; -import { Provable } from '../provable.js'; -import { ProvablePure, ProvableType } from './provable-intf.js'; import { From, InferValue } from '../../../bindings/lib/provable-generic.js'; import { DynamicProof, Proof } from '../../proof-system/proof.js'; +import { Provable } from '../provable.js'; +import { Bool, Field, Group, Scalar } from '../wrapped.js'; + +import { HashInput, NonMethods, provable, provableTuple } from './provable-derivers.js'; +import type { InferJson, InferProvable, InferredProvable, IsPure } from './provable-derivers.js'; +import { ProvablePure, ProvableType } from './provable-intf.js'; // external API export { diff --git a/src/lib/provable/types/unconstrained.ts b/src/lib/provable/types/unconstrained.ts index 6938a14cf7..12cc9007f5 100644 --- a/src/lib/provable/types/unconstrained.ts +++ b/src/lib/provable/types/unconstrained.ts @@ -1,8 +1,9 @@ import { Snarky } from '../../../bindings.js'; -import type { Field } from '../field.js'; -import type { Provable } from '../provable.js'; import { assert } from '../../util/errors.js'; import { asProver, inCheckedComputation } from '../core/provable-context.js'; +import type { Field } from '../field.js'; +import type { Provable } from '../provable.js'; + import { witness } from './witness.js'; export { Unconstrained }; diff --git a/src/lib/provable/types/witness.ts b/src/lib/provable/types/witness.ts index b90f25c045..49199591a2 100644 --- a/src/lib/provable/types/witness.ts +++ b/src/lib/provable/types/witness.ts @@ -1,11 +1,12 @@ -import type { Field } from '../field.js'; -import type { FlexibleProvable, InferProvable } from './struct.js'; -import { Provable, ProvableType, ToProvable } from './provable-intf.js'; -import { inCheckedComputation, snarkContext } from '../core/provable-context.js'; -import { exists, existsAsync } from '../core/exists.js'; import { From } from '../../../bindings/lib/provable-generic.js'; import { TupleN } from '../../util/types.js'; +import { exists, existsAsync } from '../core/exists.js'; import { createField } from '../core/field-constructor.js'; +import { inCheckedComputation, snarkContext } from '../core/provable-context.js'; +import type { Field } from '../field.js'; + +import { Provable, ProvableType, ToProvable } from './provable-intf.js'; +import type { FlexibleProvable, InferProvable } from './struct.js'; export { witness, witnessAsync, witnessFields }; diff --git a/src/lib/provable/wrapped-classes.ts b/src/lib/provable/wrapped-classes.ts index efc4a0b3e6..ebfd3536c9 100644 --- a/src/lib/provable/wrapped-classes.ts +++ b/src/lib/provable/wrapped-classes.ts @@ -1,4 +1,4 @@ -import { Bytes as InternalBytes, createBytes, FlexibleBytes } from './bytes.js'; +import { FlexibleBytes, Bytes as InternalBytes, createBytes } from './bytes.js'; export { Bytes, FlexibleBytes }; diff --git a/src/lib/provable/wrapped.ts b/src/lib/provable/wrapped.ts index 0732c69721..3ad9f64772 100644 --- a/src/lib/provable/wrapped.ts +++ b/src/lib/provable/wrapped.ts @@ -1,5 +1,5 @@ -import { Field as InternalField } from './field.js'; import { Bool as InternalBool } from './bool.js'; +import { Field as InternalField } from './field.js'; import { Group as InternalGroup } from './group.js'; import { Scalar } from './scalar.js'; diff --git a/src/lib/testing/constraint-system.ts b/src/lib/testing/constraint-system.ts index 141e63ab4f..9c4b3165c4 100644 --- a/src/lib/testing/constraint-system.ts +++ b/src/lib/testing/constraint-system.ts @@ -6,18 +6,19 @@ */ import { Gate, GateType } from '../../bindings.js'; import { randomBytes } from '../../bindings/crypto/random.js'; -import { Field } from '../provable/field.js'; -import { FieldType, FieldVar } from '../provable/core/fieldvar.js'; -import { Provable } from '../provable/provable.js'; -import { Tuple } from '../util/types.js'; -import { Random } from './random.js'; -import { test } from './property.js'; import { Undefined, ZkProgram } from '../proof-system/zkprogram.js'; +import { FieldType, FieldVar } from '../provable/core/fieldvar.js'; import { printGates, summarizeGates, synchronousRunners, } from '../provable/core/provable-context.js'; +import { Field } from '../provable/field.js'; +import { Provable } from '../provable/provable.js'; +import { Tuple } from '../util/types.js'; + +import { test } from './property.js'; +import { Random } from './random.js'; export { constraintSystem, diff --git a/src/lib/testing/equivalent.ts b/src/lib/testing/equivalent.ts index 27ca01a90b..3fd739377e 100644 --- a/src/lib/testing/equivalent.ts +++ b/src/lib/testing/equivalent.ts @@ -1,14 +1,15 @@ /** * helpers for testing equivalence of two implementations, one of them on bigints */ -import { test, Random } from '../testing/property.js'; -import { Provable } from '../provable/provable.js'; import { deepEqual } from 'node:assert/strict'; + +import { synchronousRunners } from '../provable/core/provable-context.js'; +import { assert } from '../provable/gadgets/common.js'; +import { Provable } from '../provable/provable.js'; +import { provable } from '../provable/types/provable-derivers.js'; import { Bool, Field } from '../provable/wrapped.js'; +import { Random, test } from '../testing/property.js'; import { AnyTuple, Tuple } from '../util/types.js'; -import { provable } from '../provable/types/provable-derivers.js'; -import { assert } from '../provable/gadgets/common.js'; -import { synchronousRunners } from '../provable/core/provable-context.js'; export { equivalent, diff --git a/src/lib/testing/property.ts b/src/lib/testing/property.ts index 822fd6deeb..ca644457c0 100644 --- a/src/lib/testing/property.ts +++ b/src/lib/testing/property.ts @@ -1,4 +1,5 @@ import { Random } from './random.js'; + export { test }; export { Random, sample, withHardCoded } from './random.js'; diff --git a/src/lib/testing/random.ts b/src/lib/testing/random.ts index ab78c0fe87..8d7faa5858 100644 --- a/src/lib/testing/random.ts +++ b/src/lib/testing/random.ts @@ -1,43 +1,43 @@ +import { bytesToBigInt } from '../../bindings/crypto/bigint-helpers.js'; +import { mocks } from '../../bindings/crypto/constants.js'; +import type { FiniteField } from '../../bindings/crypto/finite-field.js'; +import { randomBytes } from '../../bindings/crypto/random.js'; +import { stringLengthInBytes } from '../../bindings/lib/binable.js'; +import { genericLayoutFold } from '../../bindings/lib/from-layout.js'; +import { PrimitiveTypeMap, primitiveTypeMap } from '../../bindings/lib/generic.js'; +import { jsLayout } from '../../bindings/mina-transaction/gen/v1/js-layout.js'; import { - customTypes, + AccountUpdate, + Json, Layout, TypeMap, - Json, - AccountUpdate, ZkappCommand, + customTypes, empty, } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; +import { tokenSymbolLength } from '../../bindings/mina-transaction/v1/derived-leaves.js'; import { + ActionState, + Actions, AuthRequired, Bool, Events, Field, - Actions, - ActionState, - VerificationKeyHash, + MayUseToken, + PublicKey, ReceiptChainHash, Sign, + StateHash, TokenId, TokenSymbol, + VerificationKeyHash, ZkappUri, - PublicKey, - StateHash, - MayUseToken, } from '../../bindings/mina-transaction/v1/transaction-leaves-bigint.js'; -import { genericLayoutFold } from '../../bindings/lib/from-layout.js'; -import { jsLayout } from '../../bindings/mina-transaction/gen/v1/js-layout.js'; -import { PrimitiveTypeMap, primitiveTypeMap } from '../../bindings/lib/generic.js'; -import { Scalar, PrivateKey, Group } from '../../mina-signer/src/curve-bigint.js'; +import { Group, PrivateKey, Scalar } from '../../mina-signer/src/curve-bigint.js'; +import { Signable } from '../../mina-signer/src/derivers-bigint.js'; +import { Memo } from '../../mina-signer/src/memo.js'; import { Signature } from '../../mina-signer/src/signature.js'; -import { randomBytes } from '../../bindings/crypto/random.js'; import { alphabet } from '../util/base58.js'; -import { bytesToBigInt } from '../../bindings/crypto/bigint-helpers.js'; -import { Memo } from '../../mina-signer/src/memo.js'; -import { Signable } from '../../mina-signer/src/derivers-bigint.js'; -import { tokenSymbolLength } from '../../bindings/mina-transaction/v1/derived-leaves.js'; -import { stringLengthInBytes } from '../../bindings/lib/binable.js'; -import { mocks } from '../../bindings/crypto/constants.js'; -import type { FiniteField } from '../../bindings/crypto/finite-field.js'; export { Random, sample, withHardCoded }; diff --git a/src/lib/testing/testing.unit-test.ts b/src/lib/testing/testing.unit-test.ts index 055085254b..1bcf11bd12 100644 --- a/src/lib/testing/testing.unit-test.ts +++ b/src/lib/testing/testing.unit-test.ts @@ -1,16 +1,18 @@ import { expect } from 'expect'; + import { jsLayout } from '../../bindings/mina-transaction/gen/v1/js-layout.js'; -import { Signature } from '../../mina-signer/src/signature.js'; import { AccountUpdate, + Json, PublicKey, UInt32, UInt64, - signableFromLayout, ZkappCommand, - Json, + signableFromLayout, } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import { test, Random } from './property.js'; +import { Signature } from '../../mina-signer/src/signature.js'; + +import { Random, test } from './property.js'; // some trivial roundtrip tests test(Random.accountUpdate, (accountUpdate, assert) => { diff --git a/src/lib/util/base58.ts b/src/lib/util/base58.ts index 533b15b308..2f84448b4c 100644 --- a/src/lib/util/base58.ts +++ b/src/lib/util/base58.ts @@ -1,7 +1,8 @@ -import { versionBytes } from '../../bindings/crypto/constants.js'; -import { Binable, withVersionNumber } from '../../bindings/lib/binable.js'; import { sha256 } from 'js-sha256'; + import { changeBase } from '../../bindings/crypto/bigint-helpers.js'; +import { versionBytes } from '../../bindings/crypto/constants.js'; +import { Binable, withVersionNumber } from '../../bindings/lib/binable.js'; export { toBase58Check, fromBase58Check, base58, withBase58, fieldEncodings, Base58, alphabet }; diff --git a/src/lib/util/base58.unit-test.ts b/src/lib/util/base58.unit-test.ts index d6e0c2f176..ba1f6dbda7 100644 --- a/src/lib/util/base58.unit-test.ts +++ b/src/lib/util/base58.unit-test.ts @@ -1,7 +1,9 @@ -import { fromBase58Check, toBase58Check } from './base58.js'; -import { Test } from '../../bindings.js'; import { expect } from 'expect'; -import { test, Random, withHardCoded } from '../testing/property.js'; + +import { Test } from '../../bindings.js'; +import { Random, test, withHardCoded } from '../testing/property.js'; + +import { fromBase58Check, toBase58Check } from './base58.js'; let mlTest = await Test(); diff --git a/src/mina-signer/README.md b/src/mina-signer/README.md index c34c19cfac..23e7dac429 100644 --- a/src/mina-signer/README.md +++ b/src/mina-signer/README.md @@ -15,6 +15,7 @@ npm install --save mina-signer ```js import Client from 'mina-signer'; + const client = new Client({ network: 'mainnet' }); // Generate keys diff --git a/src/mina-signer/mina-signer.ts b/src/mina-signer/mina-signer.ts index 6194a15acb..da11d50d68 100644 --- a/src/mina-signer/mina-signer.ts +++ b/src/mina-signer/mina-signer.ts @@ -1,7 +1,23 @@ +import { ZkappCommand } from '../bindings/mina-transaction/gen/v1/transaction-bigint.js'; +import * as TransactionJson from '../bindings/mina-transaction/gen/v1/transaction-json.js'; + import { PrivateKey, PublicKey } from './src/curve-bigint.js'; +import { Memo } from './src/memo.js'; +import { createNullifier } from './src/nullifier.js'; +import * as Rosetta from './src/rosetta.js'; +import { + signPayment, + signStakeDelegation, + signString, + verifyPayment, + verifyStakeDelegation, + verifyStringSignature, +} from './src/sign-legacy.js'; +import { signZkappCommand, verifyZkappCommandSignature } from './src/sign-zkapp-command.js'; +import { Signature, sign, verify } from './src/signature.js'; +import { hashPayment, hashStakeDelegation } from './src/transaction-hash.js'; import * as Json from './src/types.js'; -import type { SignedLegacy, Signed, NetworkId, SignedRosetta } from './src/types.js'; - +import type { NetworkId, Signed, SignedLegacy, SignedRosetta } from './src/types.js'; import { isPayment, isSignedDelegation, @@ -11,22 +27,6 @@ import { isStakeDelegation, isZkappCommand, } from './src/utils.js'; -import * as TransactionJson from '../bindings/mina-transaction/gen/v1/transaction-json.js'; -import { ZkappCommand } from '../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import { signZkappCommand, verifyZkappCommandSignature } from './src/sign-zkapp-command.js'; -import { - signPayment, - signStakeDelegation, - signString, - verifyPayment, - verifyStakeDelegation, - verifyStringSignature, -} from './src/sign-legacy.js'; -import { hashPayment, hashStakeDelegation } from './src/transaction-hash.js'; -import { Memo } from './src/memo.js'; -import * as Rosetta from './src/rosetta.js'; -import { sign, Signature, verify } from './src/signature.js'; -import { createNullifier } from './src/nullifier.js'; export { Client, Client as default, type NetworkId }; diff --git a/src/mina-signer/moveWebFiles.js b/src/mina-signer/moveWebFiles.js index c8103ca1bb..50fd0e10ed 100644 --- a/src/mina-signer/moveWebFiles.js +++ b/src/mina-signer/moveWebFiles.js @@ -1,5 +1,5 @@ -import glob from 'glob'; import { move } from 'fs-extra'; +import glob from 'glob'; let webFiles = glob.sync('./dist/tmp/**/*.web.js'); diff --git a/src/mina-signer/src/curve-bigint.ts b/src/mina-signer/src/curve-bigint.ts index 1a2bda2ac7..318f002819 100644 --- a/src/mina-signer/src/curve-bigint.ts +++ b/src/mina-signer/src/curve-bigint.ts @@ -1,10 +1,11 @@ -import { Fq, mod } from '../../bindings/crypto/finite-field.js'; -import { GroupProjective, Pallas } from '../../bindings/crypto/elliptic-curve.js'; import { versionBytes } from '../../bindings/crypto/constants.js'; +import { GroupProjective, Pallas } from '../../bindings/crypto/elliptic-curve.js'; +import { Fq, mod } from '../../bindings/crypto/finite-field.js'; import { record, withCheck, withVersionNumber } from '../../bindings/lib/binable.js'; import { base58, withBase58 } from '../../lib/util/base58.js'; -import { Bool, checkRange, Field, pseudoClass } from './field-bigint.js'; + import { BinableBigint, SignableBigint, signable } from './derivers-bigint.js'; +import { Bool, Field, checkRange, pseudoClass } from './field-bigint.js'; import { HashInputLegacy } from './poseidon-bigint.js'; export { Group, PublicKey, Scalar, PrivateKey, versionNumbers }; diff --git a/src/mina-signer/src/derivers-bigint.ts b/src/mina-signer/src/derivers-bigint.ts index 188cc5c78d..f9bd02d74b 100644 --- a/src/mina-signer/src/derivers-bigint.ts +++ b/src/mina-signer/src/derivers-bigint.ts @@ -1,7 +1,7 @@ import { bigIntToBytes } from '../../bindings/crypto/bigint-helpers.js'; -import { createDerivers } from '../../bindings/lib/provable-generic.js'; -import { GenericHashInput, GenericSignable } from '../../bindings/lib/generic.js'; import { BinableWithBits, defineBinable, withBits } from '../../bindings/lib/binable.js'; +import { GenericHashInput, GenericSignable } from '../../bindings/lib/generic.js'; +import { createDerivers } from '../../bindings/lib/provable-generic.js'; export { signable, SignableBigint, BinableBigint, BinableBool, HashInput, Signable }; diff --git a/src/mina-signer/src/field-bigint.ts b/src/mina-signer/src/field-bigint.ts index 7698d95632..340764126e 100644 --- a/src/mina-signer/src/field-bigint.ts +++ b/src/mina-signer/src/field-bigint.ts @@ -1,6 +1,7 @@ -import { randomBytes } from '../../bindings/crypto/random.js'; import { Fp, mod } from '../../bindings/crypto/finite-field.js'; -import { BinableBigint, HashInput, SignableBigint, BinableBool } from './derivers-bigint.js'; +import { randomBytes } from '../../bindings/crypto/random.js'; + +import { BinableBigint, BinableBool, HashInput, SignableBigint } from './derivers-bigint.js'; export { Field, Bool, UInt32, UInt64, Sign }; export { BinableFp, SignableFp }; diff --git a/src/mina-signer/src/memo.ts b/src/mina-signer/src/memo.ts index 4ae9703d34..5aefa5458c 100644 --- a/src/mina-signer/src/memo.ts +++ b/src/mina-signer/src/memo.ts @@ -1,5 +1,6 @@ +import { versionBytes } from '../../bindings/crypto/constants.js'; import { - Binable, + Binable as BinableT, defineBinable, stringFromBytes, stringLengthInBytes, @@ -7,13 +8,13 @@ import { withBits, } from '../../bindings/lib/binable.js'; import { base58 } from '../../lib/util/base58.js'; + import { HashInputLegacy, hashWithPrefix, packToFieldsLegacy, prefixes, } from './poseidon-bigint.js'; -import { versionBytes } from '../../bindings/crypto/constants.js'; export { Memo }; @@ -43,7 +44,7 @@ function hash(memo: string) { } const SIZE = 34; -const Binable: Binable = defineBinable({ +const Binable: BinableT = defineBinable({ toBytes(memo) { return stringToBytes(memo); }, diff --git a/src/mina-signer/src/nullifier.ts b/src/mina-signer/src/nullifier.ts index ce9029d173..422364c4fa 100644 --- a/src/mina-signer/src/nullifier.ts +++ b/src/mina-signer/src/nullifier.ts @@ -1,6 +1,7 @@ import { Fq } from '../../bindings/crypto/finite-field.js'; import { Poseidon } from '../../bindings/crypto/poseidon.js'; -import { Group, PublicKey, Scalar, PrivateKey } from './curve-bigint.js'; + +import { Group, PrivateKey, PublicKey, Scalar } from './curve-bigint.js'; import { Field } from './field-bigint.js'; import { Nullifier } from './types.js'; diff --git a/src/mina-signer/src/poseidon-bigint.ts b/src/mina-signer/src/poseidon-bigint.ts index 7d8676c2b4..28ef9ccd67 100644 --- a/src/mina-signer/src/poseidon-bigint.ts +++ b/src/mina-signer/src/poseidon-bigint.ts @@ -1,10 +1,11 @@ -import { Field, sizeInBits } from './field-bigint.js'; -import { Poseidon, PoseidonLegacy } from '../../bindings/crypto/poseidon.js'; import { prefixes } from '../../bindings/crypto/constants.js'; -import { createHashInput } from '../../bindings/lib/provable-generic.js'; +import { Poseidon, PoseidonLegacy } from '../../bindings/crypto/poseidon.js'; import { GenericHashInput } from '../../bindings/lib/generic.js'; +import { createHashInput } from '../../bindings/lib/provable-generic.js'; import { createHashHelpers } from '../../lib/provable/crypto/hash-generic.js'; +import { Field, sizeInBits } from './field-bigint.js'; + export { Poseidon, HashHelpers, diff --git a/src/mina-signer/src/random-transaction.ts b/src/mina-signer/src/random-transaction.ts index f6d244ad43..5ad625c935 100644 --- a/src/mina-signer/src/random-transaction.ts +++ b/src/mina-signer/src/random-transaction.ts @@ -1,12 +1,13 @@ -import { SignedLegacy } from './transaction-hash.js'; -import { DelegationJson, PaymentJson } from './sign-legacy.js'; -import { Random } from '../../lib/testing/property.js'; import { PublicKey, ZkappCommand, } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; +import { Random } from '../../lib/testing/property.js'; + import { PrivateKey } from './curve-bigint.js'; +import { DelegationJson, PaymentJson } from './sign-legacy.js'; import { Signature } from './signature.js'; +import { SignedLegacy } from './transaction-hash.js'; import { NetworkId } from './types.js'; export { RandomTransaction }; diff --git a/src/mina-signer/src/rosetta.ts b/src/mina-signer/src/rosetta.ts index 2726e9d496..a4c27d8ea5 100644 --- a/src/mina-signer/src/rosetta.ts +++ b/src/mina-signer/src/rosetta.ts @@ -1,8 +1,8 @@ import { Binable } from '../../bindings/lib/binable.js'; -import { PublicKey, PrivateKey, Scalar } from './curve-bigint.js'; + +import { PrivateKey, PublicKey, Scalar } from './curve-bigint.js'; import { Field } from './field-bigint.js'; import { Memo } from './memo.js'; -import { Signature, SignatureJson } from './signature.js'; import { DelegationJson, PaymentJson, @@ -11,6 +11,7 @@ import { verifyPayment, verifyStakeDelegation, } from './sign-legacy.js'; +import { Signature, SignatureJson } from './signature.js'; import { NetworkId, SignedRosetta } from './types.js'; import * as Json from './types.js'; diff --git a/src/mina-signer/src/sign-legacy.ts b/src/mina-signer/src/sign-legacy.ts index 5fa57f69fd..60723f0e19 100644 --- a/src/mina-signer/src/sign-legacy.ts +++ b/src/mina-signer/src/sign-legacy.ts @@ -1,10 +1,11 @@ -import { UInt32, UInt64 } from './field-bigint.js'; +import { bytesToBits, stringToBytes } from '../../bindings/lib/binable.js'; +import { Json } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; + import { PrivateKey, PublicKey } from './curve-bigint.js'; -import { HashInputLegacy } from './poseidon-bigint.js'; +import { UInt32, UInt64 } from './field-bigint.js'; import { Memo } from './memo.js'; -import { SignatureJson, Signature, signLegacy, verifyLegacy } from './signature.js'; -import { Json } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import { bytesToBits, stringToBytes } from '../../bindings/lib/binable.js'; +import { HashInputLegacy } from './poseidon-bigint.js'; +import { Signature, SignatureJson, signLegacy, verifyLegacy } from './signature.js'; import { NetworkId } from './types.js'; export { diff --git a/src/mina-signer/src/sign-legacy.unit-test.ts b/src/mina-signer/src/sign-legacy.unit-test.ts index 3e181fd1cf..7996d1400b 100644 --- a/src/mina-signer/src/sign-legacy.unit-test.ts +++ b/src/mina-signer/src/sign-legacy.unit-test.ts @@ -1,10 +1,10 @@ -import { - payments, - delegations, - strings, - keypair, - signatures, -} from './test-vectors/legacySignatures.js'; +import { expect } from 'expect'; + +import { Random, test } from '../../lib/testing/property.js'; + +import { PublicKey, Scalar } from './curve-bigint.js'; +import { Field } from './field-bigint.js'; +import { RandomTransaction } from './random-transaction.js'; import { PaymentJson, signPayment, @@ -15,11 +15,13 @@ import { verifyStringSignature, } from './sign-legacy.js'; import { Signature, SignatureJson } from './signature.js'; -import { expect } from 'expect'; -import { PublicKey, Scalar } from './curve-bigint.js'; -import { Field } from './field-bigint.js'; -import { Random, test } from '../../lib/testing/property.js'; -import { RandomTransaction } from './random-transaction.js'; +import { + delegations, + keypair, + payments, + signatures, + strings, +} from './test-vectors/legacySignatures.js'; import { NetworkId } from './types.js'; let { privateKey, publicKey } = keypair; diff --git a/src/mina-signer/src/sign-zkapp-command.ts b/src/mina-signer/src/sign-zkapp-command.ts index da47923617..f47682db25 100644 --- a/src/mina-signer/src/sign-zkapp-command.ts +++ b/src/mina-signer/src/sign-zkapp-command.ts @@ -1,14 +1,15 @@ -import { Bool, Field, Sign, UInt32 } from './field-bigint.js'; -import { PrivateKey, PublicKey } from './curve-bigint.js'; +import { mocks } from '../../bindings/crypto/constants.js'; import { - Json, AccountUpdate, + Json, ZkappCommand, } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import { hashWithPrefix, packToFields, prefixes } from './poseidon-bigint.js'; + +import { PrivateKey, PublicKey } from './curve-bigint.js'; +import { Bool, Field, Sign, UInt32 } from './field-bigint.js'; import { Memo } from './memo.js'; +import { hashWithPrefix, packToFields, prefixes } from './poseidon-bigint.js'; import { Signature, signFieldElement, verifyFieldElement, zkAppBodyPrefix } from './signature.js'; -import { mocks } from '../../bindings/crypto/constants.js'; import { NetworkId } from './types.js'; // external API diff --git a/src/mina-signer/src/sign-zkapp-command.unit-test.ts b/src/mina-signer/src/sign-zkapp-command.unit-test.ts index 83c4ea2118..e17bbea41e 100644 --- a/src/mina-signer/src/sign-zkapp-command.unit-test.ts +++ b/src/mina-signer/src/sign-zkapp-command.unit-test.ts @@ -1,4 +1,6 @@ import { expect } from 'expect'; + +import { Pickles, Test } from '../../bindings.js'; import { mocks } from '../../bindings/crypto/constants.js'; import { AccountUpdate, @@ -11,19 +13,19 @@ import { AccountUpdate as AccountUpdateSnarky, ZkappCommand as ZkappCommandSnarky, } from '../../lib/mina/v1/account-update.js'; -import { FieldConst } from '../../lib/provable/core/fieldvar.js'; -import { packToFields as packToFieldsSnarky } from '../../lib/provable/crypto/poseidon.js'; import { Network, setActiveInstance } from '../../lib/mina/v1/mina.js'; import { Ml, MlHashInput } from '../../lib/ml/conversion.js'; +import { FieldConst } from '../../lib/provable/core/fieldvar.js'; +import { packToFields as packToFieldsSnarky } from '../../lib/provable/crypto/poseidon.js'; import { PrivateKey as PrivateKeySnarky, PublicKey as PublicKeySnarky, } from '../../lib/provable/crypto/signature.js'; import { Random, test, withHardCoded } from '../../lib/testing/property.js'; + import { PrivateKey, PublicKey } from './curve-bigint.js'; -import { hashWithPrefix, packToFields, prefixes } from './poseidon-bigint.js'; -import { Pickles, Test } from '../../bindings.js'; import { Memo } from './memo.js'; +import { hashWithPrefix, packToFields, prefixes } from './poseidon-bigint.js'; import { RandomTransaction } from './random-transaction.js'; import { accountUpdateFromFeePayer, diff --git a/src/mina-signer/src/signature.ts b/src/mina-signer/src/signature.ts index 7a21c0794d..5bb0c4a6b0 100644 --- a/src/mina-signer/src/signature.ts +++ b/src/mina-signer/src/signature.ts @@ -1,21 +1,23 @@ import { blake2b } from 'blakejs'; + +import { versionBytes } from '../../bindings/crypto/constants.js'; +import { Pallas } from '../../bindings/crypto/elliptic-curve.js'; +import { bitsToBytes, bytesToBits, record, withVersionNumber } from '../../bindings/lib/binable.js'; +import { base58 } from '../../lib/util/base58.js'; + +import { Group, PrivateKey, PublicKey, Scalar, versionNumbers } from './curve-bigint.js'; import { Field } from './field-bigint.js'; -import { Group, Scalar, PrivateKey, versionNumbers, PublicKey } from './curve-bigint.js'; import { HashInput, + HashInputLegacy, + HashLegacy, + Poseidon, hashWithPrefix, + inputToBitsLegacy, packToFields, - prefixes, - Poseidon, - HashInputLegacy, packToFieldsLegacy, - inputToBitsLegacy, - HashLegacy, + prefixes, } from './poseidon-bigint.js'; -import { bitsToBytes, bytesToBits, record, withVersionNumber } from '../../bindings/lib/binable.js'; -import { base58 } from '../../lib/util/base58.js'; -import { versionBytes } from '../../bindings/crypto/constants.js'; -import { Pallas } from '../../bindings/crypto/elliptic-curve.js'; import { NetworkId } from './types.js'; export { diff --git a/src/mina-signer/src/signature.unit-test.ts b/src/mina-signer/src/signature.unit-test.ts index 128d31fda1..abbf2068be 100644 --- a/src/mina-signer/src/signature.unit-test.ts +++ b/src/mina-signer/src/signature.unit-test.ts @@ -1,15 +1,17 @@ // unit tests dedicated to testing consistency of the signature algorithm import { expect } from 'expect'; -import { sign, Signature, signFieldElement, verify, verifyFieldElement } from './signature.js'; + import { Test } from '../../bindings.js'; -import { Field } from './field-bigint.js'; -import { PrivateKey, PublicKey } from './curve-bigint.js'; -import { PrivateKey as PrivateKeySnarky } from '../../lib/provable/crypto/signature.js'; import { p } from '../../bindings/crypto/finite-field.js'; import { AccountUpdate } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; -import { HashInput } from './derivers-bigint.js'; import { Ml } from '../../lib/ml/conversion.js'; import { FieldConst } from '../../lib/provable/core/fieldvar.js'; +import { PrivateKey as PrivateKeySnarky } from '../../lib/provable/crypto/signature.js'; + +import { PrivateKey, PublicKey } from './curve-bigint.js'; +import { HashInput } from './derivers-bigint.js'; +import { Field } from './field-bigint.js'; +import { Signature, sign, signFieldElement, verify, verifyFieldElement } from './signature.js'; import { NetworkId } from './types.js'; let mlTest = await Test(); diff --git a/src/mina-signer/src/test-vectors/accountUpdate.ts b/src/mina-signer/src/test-vectors/accountUpdate.ts index 31e3d5e211..938dcae0f4 100644 --- a/src/mina-signer/src/test-vectors/accountUpdate.ts +++ b/src/mina-signer/src/test-vectors/accountUpdate.ts @@ -1,5 +1,5 @@ -import * as Json from '../../../bindings/mina-transaction/gen/v1/transaction-json.js'; import { mocks } from '../../../bindings/crypto/constants.js'; +import * as Json from '../../../bindings/mina-transaction/gen/v1/transaction-json.js'; export { accountUpdateExample }; diff --git a/src/mina-signer/src/transaction-hash.ts b/src/mina-signer/src/transaction-hash.ts index 062de55651..48be00ba83 100644 --- a/src/mina-signer/src/transaction-hash.ts +++ b/src/mina-signer/src/transaction-hash.ts @@ -1,31 +1,33 @@ -import { Bool, Field, UInt32, UInt64 } from './field-bigint.js'; +import { blake2b } from 'blakejs'; + +import { versionBytes } from '../../bindings/crypto/constants.js'; import { Binable, BinableString, - BinableUint64, BinableUint32, + BinableUint64, defineBinable, enumWithArgument, record, stringToBytes, withVersionNumber, } from '../../bindings/lib/binable.js'; +import { base58, withBase58 } from '../../lib/util/base58.js'; + +import { PublicKey, Scalar } from './curve-bigint.js'; +import { Bool, Field, UInt32, UInt64 } from './field-bigint.js'; import { - Common, - Delegation, - Payment, - UserCommand, - UserCommandEnum, - PaymentJson, + Common as CommonT, DelegationJson, + Delegation as DelegationT, + PaymentJson, + Payment as PaymentT, + UserCommandEnum, + UserCommand as UserCommandT, delegationFromJson, paymentFromJson, } from './sign-legacy.js'; -import { PublicKey, Scalar } from './curve-bigint.js'; import { Signature, SignatureJson } from './signature.js'; -import { blake2b } from 'blakejs'; -import { base58, withBase58 } from '../../lib/util/base58.js'; -import { versionBytes } from '../../bindings/crypto/constants.js'; export { hashPayment, @@ -72,7 +74,7 @@ function hashSignedCommand(command: SignedCommand) { // helper -function userCommandToEnum({ common, body }: UserCommand): UserCommandEnum { +function userCommandToEnum({ common, body }: UserCommandT): UserCommandEnum { let { tag: type, ...value } = body; switch (type) { case 'Payment': @@ -95,12 +97,12 @@ function userCommandToEnum({ common, body }: UserCommand): UserCommandEnum { // binable let BinablePublicKey = record({ x: Field, isOdd: Bool }, ['x', 'isOdd']); -type GlobalSlotSinceGenesis = Common['validUntil']; +type GlobalSlotSinceGenesis = CommonT['validUntil']; let GlobalSlotSinceGenesis = enumWithArgument<[GlobalSlotSinceGenesis]>([ { type: 'SinceGenesis', value: BinableUint32 }, ]); -const Common = record( +const Common = record( { fee: BinableUint64, feePayer: BinablePublicKey, @@ -110,14 +112,14 @@ const Common = record( }, ['fee', 'feePayer', 'nonce', 'validUntil', 'memo'] ); -const Payment = record( +const Payment = record( { receiver: BinablePublicKey, amount: BinableUint64, }, ['receiver', 'amount'] ); -const Delegation = record({ newDelegate: BinablePublicKey }, ['newDelegate']); +const Delegation = record({ newDelegate: BinablePublicKey }, ['newDelegate']); type DelegationEnum = { type: 'SetDelegate'; value: Delegation }; const DelegationEnum = enumWithArgument<[DelegationEnum]>([ { type: 'SetDelegate', value: Delegation }, diff --git a/src/mina-signer/src/transaction-hash.unit-test.ts b/src/mina-signer/src/transaction-hash.unit-test.ts index 5fdf5ad230..a05dce6da9 100644 --- a/src/mina-signer/src/transaction-hash.unit-test.ts +++ b/src/mina-signer/src/transaction-hash.unit-test.ts @@ -1,29 +1,31 @@ +import { expect } from 'expect'; + import { Test } from '../../bindings.js'; +import { versionBytes } from '../../bindings/crypto/constants.js'; +import { test } from '../../lib/testing/property.js'; + +import { PublicKey } from './curve-bigint.js'; +import { Memo } from './memo.js'; +import { RandomTransaction } from './random-transaction.js'; +import { + CommonJson, + DelegationJson, + PaymentJson, + commonFromJson, + delegationFromJson, + paymentFromJson, +} from './sign-legacy.js'; +import { Signature, SignatureJson } from './signature.js'; import { Common, - hashPayment, - hashStakeDelegation, SignedCommand, SignedCommandV1, SignedLegacy, + hashPayment, + hashStakeDelegation, userCommandToEnum, userCommandToV1, } from './transaction-hash.js'; -import { - PaymentJson, - commonFromJson, - paymentFromJson, - CommonJson, - DelegationJson, - delegationFromJson, -} from './sign-legacy.js'; -import { Signature, SignatureJson } from './signature.js'; -import { PublicKey } from './curve-bigint.js'; -import { Memo } from './memo.js'; -import { expect } from 'expect'; -import { versionBytes } from '../../bindings/crypto/constants.js'; -import { test } from '../../lib/testing/property.js'; -import { RandomTransaction } from './random-transaction.js'; let mlTest = await Test(); diff --git a/src/mina-signer/src/types.ts b/src/mina-signer/src/types.ts index 82ba80d8ae..4b76920283 100644 --- a/src/mina-signer/src/types.ts +++ b/src/mina-signer/src/types.ts @@ -1,4 +1,5 @@ import type { ZkappCommand as ZkappCommandJson } from '../../bindings/mina-transaction/gen/v1/transaction-json.js'; + import type { SignatureJson } from './signature.js'; export type UInt32 = number | bigint | string; diff --git a/src/mina-signer/src/utils.ts b/src/mina-signer/src/utils.ts index 3ed3e557d9..7eb7e0df79 100644 --- a/src/mina-signer/src/utils.ts +++ b/src/mina-signer/src/utils.ts @@ -1,12 +1,12 @@ import { SignatureJson } from './signature.js'; import type { Payment, - StakeDelegation, - ZkappCommand, + SignableData, Signed, SignedAny, SignedLegacy, - SignableData, + StakeDelegation, + ZkappCommand, } from './types.js'; function hasCommonProperties(data: SignableData | ZkappCommand) { diff --git a/src/mina-signer/tests/rosetta.test.ts b/src/mina-signer/tests/rosetta.test.ts index f8a46b78ac..1225904bf7 100644 --- a/src/mina-signer/tests/rosetta.test.ts +++ b/src/mina-signer/tests/rosetta.test.ts @@ -1,15 +1,15 @@ import Client from '../dist/node/mina-signer/mina-signer.js'; +import { PublicKey } from '../dist/node/mina-signer/src/curve-bigint.js'; +import { Field } from '../dist/node/mina-signer/src/field-bigint.js'; import { + UnsignedTransaction, fieldFromHex, fieldToHex, - signatureJsonToHex, - signatureJsonFromHex, - UnsignedTransaction, publicKeyToHex, signTransaction, + signatureJsonFromHex, + signatureJsonToHex, } from '../dist/node/mina-signer/src/rosetta.js'; -import { PublicKey } from '../dist/node/mina-signer/src/curve-bigint.js'; -import { Field } from '../dist/node/mina-signer/src/field-bigint.js'; describe('Rosetta', () => { let client: Client; diff --git a/src/mina-signer/tests/verify-in-snark.unit-test.ts b/src/mina-signer/tests/verify-in-snark.unit-test.ts index bb06fad820..983f8d19f3 100644 --- a/src/mina-signer/tests/verify-in-snark.unit-test.ts +++ b/src/mina-signer/tests/verify-in-snark.unit-test.ts @@ -1,9 +1,10 @@ -import { Field } from '../../lib/provable/wrapped.js'; +import { expect } from 'expect'; + import { ZkProgram } from '../../lib/proof-system/zkprogram.js'; -import Client from '../mina-signer.js'; import { PrivateKey, Signature } from '../../lib/provable/crypto/signature.js'; -import { expect } from 'expect'; import { Provable } from '../../lib/provable/provable.js'; +import { Field } from '../../lib/provable/wrapped.js'; +import Client from '../mina-signer.js'; let fields = [10n, 20n, 30n, 340817401n, 2091283n, 1n, 0n]; let privateKey = 'EKENaWFuAiqktsnWmxq8zaoR8bSgVdscsghJE5tV6hPoNm8qBKWM'; diff --git a/src/mina-signer/tests/zkapp.unit-test.ts b/src/mina-signer/tests/zkapp.unit-test.ts index 61bd8c2276..9092fa5d26 100644 --- a/src/mina-signer/tests/zkapp.unit-test.ts +++ b/src/mina-signer/tests/zkapp.unit-test.ts @@ -1,12 +1,13 @@ +import { expect } from 'expect'; + +import { mocks } from '../../bindings/crypto/constants.js'; import { ZkappCommand } from '../../bindings/mina-transaction/gen/v1/transaction-bigint.js'; import * as TransactionJson from '../../bindings/mina-transaction/gen/v1/transaction-json.js'; -import Client from '../mina-signer.js'; -import { accountUpdateExample } from '../src/test-vectors/accountUpdate.js'; -import { expect } from 'expect'; import { Transaction } from '../../lib/mina/v1/mina.js'; import { PrivateKey } from '../../lib/provable/crypto/signature.js'; +import Client from '../mina-signer.js'; import { Signature } from '../src/signature.js'; -import { mocks } from '../../bindings/crypto/constants.js'; +import { accountUpdateExample } from '../src/test-vectors/accountUpdate.js'; const client = new Client({ network: 'devnet' }); let { publicKey, privateKey } = client.genKeys(); diff --git a/src/tests/fake-proof.ts b/src/tests/fake-proof.ts index 3adc7c4b52..28e1e3f032 100644 --- a/src/tests/fake-proof.ts +++ b/src/tests/fake-proof.ts @@ -1,18 +1,18 @@ +import assert from 'assert'; import { + Field, Mina, PrivateKey, + Proof, + Provable, SmartContract, + Struct, UInt64, - method, + Unconstrained, ZkProgram, + method, verify, - Struct, - Field, - Proof, - Unconstrained, - Provable, } from 'o1js'; -import assert from 'assert'; const RealProgram = ZkProgram({ name: 'real', diff --git a/src/tests/inductive-proofs-internal.ts b/src/tests/inductive-proofs-internal.ts index 52f0b61a94..0743c91cd7 100644 --- a/src/tests/inductive-proofs-internal.ts +++ b/src/tests/inductive-proofs-internal.ts @@ -1,4 +1,5 @@ -import { Field, ZkProgram, assert, Provable, Proof, Experimental } from 'o1js'; +import { Experimental, Field, Proof, Provable, ZkProgram, assert } from 'o1js'; + import { tic, toc } from '../examples/utils/tic-toc.js'; let log: string[] = []; diff --git a/src/tests/inductive-proofs.ts b/src/tests/inductive-proofs.ts index 1cce8b154d..93b415aa81 100644 --- a/src/tests/inductive-proofs.ts +++ b/src/tests/inductive-proofs.ts @@ -1,4 +1,5 @@ -import { SelfProof, Field, ZkProgram, Proof, JsonProof } from 'o1js'; +import { Field, JsonProof, Proof, SelfProof, ZkProgram } from 'o1js'; + import { tic, toc } from '../examples/utils/tic-toc.js'; let MaxProofsVerifiedZero = ZkProgram({ diff --git a/src/tests/transaction-flow.ts b/src/tests/transaction-flow.ts index 8621af91d3..80f3450c6f 100644 --- a/src/tests/transaction-flow.ts +++ b/src/tests/transaction-flow.ts @@ -1,21 +1,21 @@ +import assert from 'node:assert'; import { AccountUpdate, - Provable, Field, Lightnet, Mina, PrivateKey, - Struct, + Provable, PublicKey, + Reducer, SmartContract, State, - state, - method, - Reducer, - fetchAccount, + Struct, TokenId, + fetchAccount, + method, + state, } from 'o1js'; -import assert from 'node:assert'; class Event extends Struct({ pub: PublicKey, value: Field }) {} diff --git a/tests/artifacts/javascript/on-chain-state-mgmt-zkapp-ui.js b/tests/artifacts/javascript/on-chain-state-mgmt-zkapp-ui.js index 2a705fefab..89861976ae 100644 --- a/tests/artifacts/javascript/on-chain-state-mgmt-zkapp-ui.js +++ b/tests/artifacts/javascript/on-chain-state-mgmt-zkapp-ui.js @@ -1,5 +1,5 @@ import { logEvents } from './e2e-tests-helpers.js'; -import { adminPrivateKey, HelloWorld } from './examples/zkapps/hello-world/hello-world.js'; +import { HelloWorld, adminPrivateKey } from './examples/zkapps/hello-world/hello-world.js'; import { RecursiveProgram } from './examples/zkprogram/recursive-program.js'; import { AccountUpdate, Field, Mina, verify } from './index.js'; diff --git a/tests/fixtures/on-chain-state-mgmt-zkapp.ts b/tests/fixtures/on-chain-state-mgmt-zkapp.ts index 5357bc6dd1..68e95100b2 100644 --- a/tests/fixtures/on-chain-state-mgmt-zkapp.ts +++ b/tests/fixtures/on-chain-state-mgmt-zkapp.ts @@ -1,4 +1,5 @@ import { test as base } from '@playwright/test'; + import { OnChainStateMgmtZkAppPage } from '../pages/on-chain-state-mgmt-zkapp.js'; type OnChainStateMgmtZkAppFixture = { diff --git a/tests/pages/on-chain-state-mgmt-zkapp.ts b/tests/pages/on-chain-state-mgmt-zkapp.ts index 614eb2e97f..92916dcdb2 100644 --- a/tests/pages/on-chain-state-mgmt-zkapp.ts +++ b/tests/pages/on-chain-state-mgmt-zkapp.ts @@ -1,4 +1,4 @@ -import { expect, type Locator, type Page } from '@playwright/test'; +import { type Locator, type Page, expect } from '@playwright/test'; export class OnChainStateMgmtZkAppPage { readonly page: Page; diff --git a/tests/vk-regression/diverse-zk-program-run.ts b/tests/vk-regression/diverse-zk-program-run.ts index 9db2e4f59b..3573112c3a 100644 --- a/tests/vk-regression/diverse-zk-program-run.ts +++ b/tests/vk-regression/diverse-zk-program-run.ts @@ -1,5 +1,6 @@ import assert from 'node:assert'; -import { diverse, Bytes128 } from './diverse-zk-program.js'; + +import { Bytes128, diverse } from './diverse-zk-program.js'; console.log('testing proof generation for diverse program'); await diverse.compile(); diff --git a/tests/vk-regression/diverse-zk-program.ts b/tests/vk-regression/diverse-zk-program.ts index f58212368b..7df3274d35 100644 --- a/tests/vk-regression/diverse-zk-program.ts +++ b/tests/vk-regression/diverse-zk-program.ts @@ -1,19 +1,19 @@ import { - ZkProgram, - Crypto, - createEcdsa, - createForeignCurve, + AccountUpdate, Bytes, - assert, - Provable, + Crypto, Field, Hash, MerkleWitness, - PublicKey, PrivateKey, - Signature, - AccountUpdate, + Provable, + PublicKey, SelfProof, + Signature, + ZkProgram, + assert, + createEcdsa, + createForeignCurve, } from 'o1js'; export { diverse, Bytes128 }; diff --git a/tests/vk-regression/plain-constraint-system.ts b/tests/vk-regression/plain-constraint-system.ts index f3500365b4..1bf74e2f43 100644 --- a/tests/vk-regression/plain-constraint-system.ts +++ b/tests/vk-regression/plain-constraint-system.ts @@ -1,14 +1,14 @@ import { + Bool, + Bytes, Field, - Group, Gadgets, + Group, + Hash, + Nullifier, Provable, Scalar, - Hash, - Bytes, - Bool, UInt64, - Nullifier, } from 'o1js'; export { GroupCS, BitwiseCS, HashCS, BasicCS, CryptoCS }; diff --git a/tests/vk-regression/vk-regression.ts b/tests/vk-regression/vk-regression.ts index 621481a13c..27781103b3 100644 --- a/tests/vk-regression/vk-regression.ts +++ b/tests/vk-regression/vk-regression.ts @@ -1,13 +1,15 @@ import fs from 'fs'; -import { Voting_ } from '../../src/examples/zkapps/voting/voting.js'; -import { Membership_ } from '../../src/examples/zkapps/voting/membership.js'; -import { HelloWorld } from '../../src/examples/zkapps/hello-world/hello-world.js'; -import { TokenContract, createDex } from '../../src/examples/zkapps/dex/dex.js'; -import { ecdsa, keccakAndEcdsa, ecdsaEthers } from '../../src/examples/crypto/ecdsa/ecdsa.js'; -import { SHA256Program } from '../../src/examples/crypto/sha256/sha256.js'; + import { BLAKE2BProgram } from '../../src/examples/crypto/blake2b/blake2b.js'; -import { GroupCS, BitwiseCS, HashCS, BasicCS, CryptoCS } from './plain-constraint-system.js'; +import { ecdsa, ecdsaEthers, keccakAndEcdsa } from '../../src/examples/crypto/ecdsa/ecdsa.js'; +import { SHA256Program } from '../../src/examples/crypto/sha256/sha256.js'; +import { TokenContract, createDex } from '../../src/examples/zkapps/dex/dex.js'; +import { HelloWorld } from '../../src/examples/zkapps/hello-world/hello-world.js'; +import { Membership_ } from '../../src/examples/zkapps/voting/membership.js'; +import { Voting_ } from '../../src/examples/zkapps/voting/voting.js'; + import { diverse } from './diverse-zk-program.js'; +import { BasicCS, BitwiseCS, CryptoCS, GroupCS, HashCS } from './plain-constraint-system.js'; // toggle this for quick iteration when debugging vk regressions const skipVerificationKeys = false;