1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00
ZoKrates/zokrates_js/index.js

61 lines
No EOL
1.7 KiB
JavaScript

import { appendExtension, getAbsolutePath } from './utils';
import stdlib from './stdlib.json';
const initialize = async () => {
const EXTENSION_ZOK = '.zok';
const RESERVED_PATHS = [
'ecc/',
'signature/',
'hashes/',
'utils/'
];
// load web assembly module
const zokrates = await import('./pkg/index.js');
const resolveModule = (location, path, callback) => {
if (isReserved(location) || isReserved(path)) {
return resolveFromStandardLibrary(location, path);
}
return callback(location, path);
}
const isReserved = (path) => RESERVED_PATHS.some(p => path.startsWith(p));
const resolveFromStandardLibrary = (location, path) => {
let key = appendExtension(getAbsolutePath(location, path), EXTENSION_ZOK);
let source = stdlib[key];
return source ? { source, location: key } : null;
}
return {
compile: (source, location, callback) => {
let result = zokrates.compile(source, location, (location, path) =>
resolveModule(location, path, callback)
);
return {
program: Array.from(result.program),
abi: result.abi
}
},
setup: (program) => {
let result = zokrates.setup(program);
return {
vk: result.vk,
pk: Array.from(result.pk)
};
},
computeWitness: (artifacts, args) => {
return zokrates.compute_witness(artifacts, JSON.stringify(Array.from(args)));
},
exportSolidityVerifier: (verifyingKey, isAbiv2) => {
return zokrates.export_solidity_verifier(verifyingKey, isAbiv2);
},
generateProof: (program, witness, provingKey) => {
return zokrates.generate_proof(program, witness, provingKey);
}
}
}
export { initialize };