Compare commits

...

9 Commits

Author SHA1 Message Date
Jordi Baylina
cb9a5b536e 0.0.14 2018-10-24 20:06:09 +02:00
Jordi Baylina
70c88be334 One and only one file compilation at a time 2018-10-24 20:05:50 +02:00
Jordi Baylina
25759e53cd 0.0.13 2018-10-24 20:00:07 +02:00
Jordi Baylina
4fa0c79e26 If without else 2018-10-24 19:59:50 +02:00
Jordi Baylina
e685392523 Fix title in readme 2018-10-23 08:06:23 +02:00
Jordi Baylina
e81c4f1331 0.0.12 2018-10-22 08:36:49 +02:00
Jordi Baylina
483c9c0c26 deps 2018-10-22 08:36:43 +02:00
Jordi Baylina
eb1834833d 0.0.11 2018-10-22 07:00:00 +02:00
Jordi Baylina
49a6120eeb Cli parameters standarized to C 2018-10-22 06:59:47 +02:00
7 changed files with 34 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
# Circon # Circom
Circon is a language designed to write arithmetic circuits that can be used in zero knowledge proofs. Circon is a language designed to write arithmetic circuits that can be used in zero knowledge proofs.

18
cli.js
View File

@@ -30,10 +30,8 @@ const version = require("./package").version;
const argv = require("yargs") const argv = require("yargs")
.version(version) .version(version)
.usage("circom -s [input source circuit file] -o [output definition circuit file]") .usage("circom [input source circuit file] -o [output definition circuit file]")
.alias("s", "source")
.alias("o", "output") .alias("o", "output")
.require(["s","o"])
.help("h") .help("h")
.alias("h", "help") .alias("h", "help")
.epilogue(`Copyright (C) 2018 0kims association .epilogue(`Copyright (C) 2018 0kims association
@@ -43,10 +41,20 @@ const argv = require("yargs")
repo directory at https://github.com/iden3/circom `) repo directory at https://github.com/iden3/circom `)
.argv; .argv;
const fullFileName = path.resolve(process.cwd(), argv.source); if (argv._.length == 0) {
console.log("File to compile not specified");
process.exit(1);
} else if (argv._.length > 1) {
console.log("Only one circuit at a time is permited");
process.exit(1);
}
const fullFileName = path.resolve(process.cwd(), argv._[0]);
const outName = argv.output ? argv.output : "circuit.json";
compiler(fullFileName).then( (cir) => { compiler(fullFileName).then( (cir) => {
fs.writeFileSync(argv.output, JSON.stringify(cir, null, 1), "utf8"); fs.writeFileSync(outName, JSON.stringify(cir, null, 1), "utf8");
process.exit(0);
}, (err) => { }, (err) => {
console.log(err); console.log(err);
console.error(`ERROR at ${err.errFile}:${err.pos.first_line},${err.pos.first_column}-${err.pos.last_line},${err.pos.last_column} ${err.errStr}`); console.error(`ERROR at ${err.errFile}:${err.pos.first_line},${err.pos.first_column}-${err.pos.last_line},${err.pos.last_column} ${err.errStr}`);

11
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "circom", "name": "circom",
"version": "0.0.10", "version": "0.0.14",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -1469,14 +1469,15 @@
} }
}, },
"snarkjs": { "snarkjs": {
"version": "0.1.0", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/snarkjs/-/snarkjs-0.1.0.tgz", "resolved": "https://registry.npmjs.org/snarkjs/-/snarkjs-0.1.3.tgz",
"integrity": "sha512-i+OOKwATef3/oUleae9FHt/qACPYH1M5gjQkdYYkyRYqScIuZHCmNSf6Q5RWJT5hmOkTEor+T2C5qwKSrzzGSg==", "integrity": "sha512-z5HhuNt019ZzNzUztETK31rpjRRSz3Uzy8TjGgSROf+9ZT9i6dbdWkjTC3fh5o9H+R/2+hcR+7IKAmpIR56V+A==",
"dev": true, "dev": true,
"requires": { "requires": {
"big-integer": "^1.6.35", "big-integer": "^1.6.35",
"chai": "^4.1.2", "chai": "^4.1.2",
"eslint": "^5.3.0" "eslint": "^5.3.0",
"yargs": "^12.0.2"
}, },
"dependencies": { "dependencies": {
"ajv": { "ajv": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "circom", "name": "circom",
"version": "0.0.10", "version": "0.0.14",
"description": "Language to generate logic circuits", "description": "Language to generate logic circuits",
"main": "index.js", "main": "index.js",
"directories": { "directories": {
@@ -38,6 +38,6 @@
"eslint": "^5.0.1", "eslint": "^5.0.1",
"eslint-plugin-mocha": "^5.0.0", "eslint-plugin-mocha": "^5.0.0",
"jison": "^0.4.18", "jison": "^0.4.18",
"snarkjs": "0.1.3" "snarkjs": "0.1.4"
} }
} }

View File

@@ -31,7 +31,7 @@ module.exports = compile;
const parser = require("../parser/jaz.js").parser; const parser = require("../parser/jaz.js").parser;
const timeout = ms => new Promise(res => setTimeout(res, ms)) const timeout = ms => new Promise(res => setTimeout(res, ms));
async function compile(srcFile) { async function compile(srcFile) {
const fullFileName = srcFile; const fullFileName = srcFile;

View File

@@ -578,8 +578,10 @@ function execIf(ctx, ast) {
exec(ctx, ast.then); exec(ctx, ast.then);
if (ctx.error) return; if (ctx.error) return;
} else { } else {
exec(ctx, ast.else); if (ast.else) {
if (ctx.error) return; exec(ctx, ast.else);
if (ctx.error) return;
}
} }
} }

View File

@@ -246,9 +246,13 @@ function genIf(ctx, ast) {
if (ctx.error) return; if (ctx.error) return;
const thenBody = gen(ctx, ast.then); const thenBody = gen(ctx, ast.then);
if (ctx.error) return; if (ctx.error) return;
const elseBody = gen(ctx, ast.else); if (ast.else) {
if (ctx.error) return; const elseBody = gen(ctx, ast.else);
return `if (${condition}) {\n${thenBody}\n} else {\n${elseBody}\n}\n`; if (ctx.error) return;
return `if (${condition}) {\n${thenBody}\n} else {\n${elseBody}\n}\n`;
} else {
return `if (${condition}) {\n${thenBody}\n}\n`;
}
} }