Merge pull request #1145 from Zokrates/update-zokrates-js
Update zokrates-js
This commit is contained in:
commit
5d80087645
14 changed files with 246 additions and 78 deletions
|
@ -10,7 +10,7 @@ npm install zokrates-js
|
|||
|
||||
##### Bundlers
|
||||
**Note:** As this library uses a model where the wasm module itself is natively an ES module, you will need a bundler of some form.
|
||||
Currently the only known bundler known to be fully compatible with `zokrates-js` is [Webpack](https://webpack.js.org/).
|
||||
Currently the only known bundler known to be fully compatible with `zokrates-js` is [Webpack](https://webpack.js.org/) (`experiments.asyncWebAssembly` must be enabled).
|
||||
The choice of this default was done to reflect the trends of the JS ecosystem.
|
||||
```js
|
||||
import { initialize } from 'zokrates-js';
|
||||
|
@ -18,7 +18,7 @@ import { initialize } from 'zokrates-js';
|
|||
|
||||
##### Node
|
||||
```js
|
||||
import { initialize } from 'zokrates-js/node'; // or require('zokrates-js/node')
|
||||
const { initialize } = require('zokrates-js')
|
||||
```
|
||||
|
||||
## Example
|
||||
|
|
4
zokrates_js/.gitignore
vendored
4
zokrates_js/.gitignore
vendored
|
@ -4,5 +4,5 @@ target
|
|||
pkg
|
||||
wasm-pack.log
|
||||
stdlib
|
||||
stdlib.json
|
||||
metadata.json
|
||||
stdlib.js
|
||||
metadata.js
|
6
zokrates_js/Cargo.lock
generated
6
zokrates_js/Cargo.lock
generated
|
@ -2084,7 +2084,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zokrates_abi"
|
||||
version = "0.1.6"
|
||||
version = "0.1.7"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_derive",
|
||||
|
@ -2099,7 +2099,7 @@ version = "0.1.0"
|
|||
|
||||
[[package]]
|
||||
name = "zokrates_core"
|
||||
version = "0.6.11"
|
||||
version = "0.6.12"
|
||||
dependencies = [
|
||||
"ark-bls12-377",
|
||||
"ark-bw6-761",
|
||||
|
@ -2184,7 +2184,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zokrates_js"
|
||||
version = "1.0.41"
|
||||
version = "1.0.43"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"indexmap",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "zokrates_js"
|
||||
version = "1.0.42"
|
||||
version = "1.0.43"
|
||||
authors = ["Darko Macesic"]
|
||||
edition = "2018"
|
||||
|
||||
|
@ -18,5 +18,4 @@ zokrates_common = { path = "../zokrates_common" }
|
|||
zokrates_field = { path = "../zokrates_field" }
|
||||
zokrates_abi = { path = "../zokrates_abi" }
|
||||
console_error_panic_hook = "0.1.6"
|
||||
|
||||
indexmap = "~1.6.2" # see https://github.com/rustwasm/wasm-bindgen/issues/2770#issuecomment-1041102532
|
165
zokrates_js/LICENSE
Normal file
165
zokrates_js/LICENSE
Normal file
|
@ -0,0 +1,165 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
|
@ -1,39 +1,41 @@
|
|||
/** general */
|
||||
const gulp = require('gulp');
|
||||
const dree = require('dree');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const toml = require('toml');
|
||||
|
||||
/** stdlib constants */
|
||||
const stdlibRoot = '../zokrates_stdlib/stdlib';
|
||||
const stdlibOutput = 'stdlib.json';
|
||||
const gulp = require("gulp");
|
||||
const dree = require("dree");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const toml = require("toml");
|
||||
|
||||
const stdlibRoot = "../zokrates_stdlib/stdlib";
|
||||
const options = {
|
||||
extensions: ['zok']
|
||||
extensions: ["zok"],
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes standard library directory tree to a json file.
|
||||
*/
|
||||
gulp.task('stdlib', (done) => {
|
||||
// Serializes the standard library directory tree to a js file.
|
||||
gulp.task("stdlib", (done) => {
|
||||
var stdlib = {};
|
||||
dree.scan(stdlibRoot, options, function (file) {
|
||||
const content = fs.readFileSync(file.path).toString();
|
||||
stdlib[file.relativePath] = content;
|
||||
});
|
||||
|
||||
fs.writeFileSync(path.resolve(__dirname, stdlibOutput), JSON.stringify(stdlib));
|
||||
fs.writeFileSync(
|
||||
path.resolve(__dirname, "stdlib.js"),
|
||||
`module.exports = ${JSON.stringify(stdlib)}`
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task('metadata', (done) => {
|
||||
const config = toml.parse(fs.readFileSync('../zokrates_cli/Cargo.toml').toString());
|
||||
gulp.task("metadata", (done) => {
|
||||
const config = toml.parse(
|
||||
fs.readFileSync("../zokrates_cli/Cargo.toml").toString()
|
||||
);
|
||||
const metadata = JSON.stringify({
|
||||
version: config.package.version
|
||||
version: config.package.version,
|
||||
});
|
||||
fs.writeFileSync(path.resolve(__dirname, 'metadata.json'), metadata);
|
||||
fs.writeFileSync(
|
||||
path.resolve(__dirname, "metadata.js"),
|
||||
`module.exports = ${metadata}`
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task('setup', gulp.parallel('stdlib', 'metadata'));
|
||||
gulp.task("setup", gulp.parallel("stdlib", "metadata"));
|
||||
|
|
2
zokrates_js/index.d.ts
vendored
2
zokrates_js/index.d.ts
vendored
|
@ -78,7 +78,7 @@ declare module "zokrates-js" {
|
|||
exportSolidityVerifier(verificationKey: VerificationKey): string;
|
||||
utils: {
|
||||
formatProof(proof: Proof): any[];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export interface Metadata {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import wrapper from './wrapper.js';
|
||||
import stdlib from './stdlib.json';
|
||||
import metadata from './metadata.json';
|
||||
import wrapper from "./wrapper.js";
|
||||
import stdlib from "./stdlib.js";
|
||||
import metadata from "./metadata.js";
|
||||
|
||||
const initialize = async () => {
|
||||
const zokrates = await import('./pkg/index.js');
|
||||
const zokrates = await import("./pkg/index.js");
|
||||
return wrapper({ zokrates, stdlib });
|
||||
}
|
||||
};
|
||||
|
||||
export { initialize, metadata };
|
3
zokrates_js/node/index.d.ts
vendored
3
zokrates_js/node/index.d.ts
vendored
|
@ -1,3 +0,0 @@
|
|||
declare module "zokrates-js/node" {
|
||||
export * from "zokrates-js";
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
const wrapper = require('../wrapper.js');
|
||||
const stdlib = require('../stdlib.json');
|
||||
const metadata = require('../metadata.json');
|
||||
const wrapper = require("../wrapper.js");
|
||||
const stdlib = require("../stdlib.js");
|
||||
const metadata = require("../metadata.js");
|
||||
|
||||
const initialize = async () => {
|
||||
return wrapper({
|
||||
zokrates: require('./pkg/index.js'),
|
||||
stdlib
|
||||
zokrates: require("./pkg/index.js"),
|
||||
stdlib,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { initialize, metadata };
|
2
zokrates_js/package-lock.json
generated
2
zokrates_js/package-lock.json
generated
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "zokrates-js",
|
||||
"version": "1.0.41",
|
||||
"version": "1.0.43",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
{
|
||||
"name": "zokrates-js",
|
||||
"main": "index.js",
|
||||
"author": "Darko Macesic <darem966@gmail.com>",
|
||||
"version": "1.0.42",
|
||||
"version": "1.0.43",
|
||||
"module": "index.js",
|
||||
"main": "node/index.js",
|
||||
"description": "JavaScript bindings for ZoKrates",
|
||||
"contributors": [
|
||||
"Darko Macesic <darem966@gmail.com>",
|
||||
"Thibaut Schaeffer <thibaut@schaeff.fr>"
|
||||
],
|
||||
"keywords": [
|
||||
"zokrates",
|
||||
"wasm-bindgen",
|
||||
"snarks",
|
||||
"zksnarks"
|
||||
],
|
||||
"license": "GPLv3",
|
||||
|
@ -15,11 +20,14 @@
|
|||
"index.js",
|
||||
"index.d.ts",
|
||||
"wrapper.js",
|
||||
"stdlib.json",
|
||||
"metadata.json",
|
||||
"README.md"
|
||||
"stdlib.js",
|
||||
"metadata.js"
|
||||
],
|
||||
"types": "index.d.ts",
|
||||
"exports": {
|
||||
"import": "./index.js",
|
||||
"require": "./node/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"wasm-pack": "wasm-pack build --out-name index",
|
||||
"setup": "npm install && gulp setup",
|
||||
|
@ -31,8 +39,8 @@
|
|||
"build:bundler:dev": "rimraf pkg && npm run wasm-pack -- --target bundler --dev && npm run clean-pkg",
|
||||
"build:node": "rimraf node/pkg && npm run wasm-pack -- --target nodejs -d node/pkg --release && npm run clean-node-pkg",
|
||||
"build:node:dev": "rimraf node/pkg && npm run wasm-pack -- --target nodejs -d node/pkg --dev && npm run clean-node-pkg",
|
||||
"clean-pkg": "rimraf pkg/README.md",
|
||||
"clean-node-pkg": "rimraf node/pkg/README.md",
|
||||
"clean-pkg": "rimraf pkg/README.md pkg/.gitignore",
|
||||
"clean-node-pkg": "rimraf node/pkg/README.md node/pkg/.gitignore",
|
||||
"pretest": "npm run setup && npm run build:node:dev",
|
||||
"test": "npm run run-tests",
|
||||
"run-tests": "mocha --timeout 30000 --require esm --recursive tests"
|
||||
|
|
|
@ -30,7 +30,7 @@ describe("tests", function () {
|
|||
});
|
||||
|
||||
it("should resolve stdlib module", () => {
|
||||
const stdlib = require("../stdlib.json");
|
||||
const stdlib = require("../stdlib.js");
|
||||
assert.doesNotThrow(() => {
|
||||
const code = `import "${
|
||||
Object.keys(stdlib)[0]
|
||||
|
|
|
@ -56,11 +56,7 @@ module.exports = (dep) => {
|
|||
computeWitness: (input, args) => {
|
||||
const { program, abi } =
|
||||
input instanceof Uint8Array ? { program: input, abi: null } : input;
|
||||
return zokrates.compute_witness(
|
||||
program,
|
||||
abi,
|
||||
JSON.stringify(args)
|
||||
);
|
||||
return zokrates.compute_witness(program, abi, JSON.stringify(args));
|
||||
},
|
||||
setup: (program, options) => {
|
||||
return zokrates.setup(program, options);
|
||||
|
@ -83,8 +79,8 @@ module.exports = (dep) => {
|
|||
utils: {
|
||||
formatProof: (proof, options) => {
|
||||
return zokrates.format_proof(proof, options);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const withOptions = (options) => {
|
||||
|
@ -108,8 +104,9 @@ module.exports = (dep) => {
|
|||
exportSolidityVerifier: (vk) =>
|
||||
defaultProvider.exportSolidityVerifier(vk, options),
|
||||
utils: {
|
||||
formatProof: (proof) => defaultProvider.utils.formatProof(proof, options),
|
||||
}
|
||||
formatProof: (proof) =>
|
||||
defaultProvider.utils.formatProof(proof, options),
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue