- Buses: more information here.
- input/output keywords are the first token in declarations (though having it after "signal" is still accepted).
- The default option for constraint simplification is --O1 (instead of --O2 which was the default until now). More information in here.
- Allowing array assignments of different sizes.
- Improving error reports when parsing.
- Improving documentation.
- Main with no inputs is now executed once.
- Fixing complement function to depend on the prime number used.
- Applying modulo prime number to any constant in the circuit.
- Fixing minor panic: the number of signals passed to the anonymous component must be equal to the actual number of inputs.
- Improvement of error messages: providing more descriptive messages.
- Improvement of documentation and new sections: detailed explanation of the applied simplification techniques and precise description of constraint-related output formats.
- Allowing arbitrary number of different input names in the main component.
- Removing non-determinism in R1CS generation: fixing assignment order of anonymous components inputs.
- Fixing an error when computing array accesses involving complex expressions in multidimensional arrays.
- Improving known/unknown analysis: arrays of vars combining known/unknown positions.
- Fixing minor panics: main component not calling to a template, anonymous component with wrong number of arguments, log messages containing line breaks.
- Adding flag --simplification_substitutions: outputs a .json file including information about the substitutions performed during the constraint simplifications
- Adding the prime number secq256r1.
- Removing non-determinism in R1CS generation: fixing assignment order of anonymous components inputs
- Improving error message: case assignment to signal of not initialized component
- Removing unnecessary clones
- Improving documentation: types of signal assignments, output-file format descriptions, compilation options,
- Improving the README file with more community tools and projects.
- Printing errors and warnings in custom gates correctly
- Removing panic caused by edge case in function display_trace()
- Fixing typos and improving documentation.
- Improving error messages: missing tags in inputs and use of operator ++x.
- Adding info of number of private inputs in witness in R1CS message and removing message of circom safe.
- Fixing a panic produced when the two branches of an if instruction are not compatible.
- Fixing C++ code generated: input counter decrease inside assert => Moved outside the assert.
- Fixing c++ code generated for macos with clang 14.0.0.
- Fixing a bug in parallel definition at component level not working as expected.
- Fixing a bug in parallel components not working as expected when considering assignments of the inputs given by names (A()(in_1 <== x, in_2 <== y)).
- Fixing a bug in c++ code generation produced when the last assigned input has size 0.
- Fixing a panic: handling case array of components with different signals (signals defined inside blocks ifs).
- Fixing a panic: error when processing sizes of arrays of variables in functions, panic in merger when processing complex expressions.
- Improving tag propagation: array case.
- Handling new prime numbers: pallas, vesta, grumpkin
- Improving array access index computation in the code generated intermediate representation: using cheap addition and multiplication operations when possible.
- Updating the documentation.
- Added check on the name of the circom file when --C is used to avoid clashes with reserved names. When the file is called main.circom, fr.circom or calcwit.circom it is changed to main_c, fr_c and calcwit_c respectively.
- Fixing a bug while parsing anonymous components.
- Fixing a problem in calls to anonymous components with signal names.
- Fixing a bug in wasm witness generation that happened when doing a call inside an array index.
- Executing the main method without inputs in wasm witness generation.
- Definition of signals and components can be done now inside if blocks IF the condition is known at compilation time. If the condition is unknown and depends on the value of signals, then the compiler throws an error.
- Improving the --inspect option. It now detects underconstrained signals and assignments using <-- in which <== could be used.
- Improving the efficiency of the compiler. It does not execute the inspect and constraint generation phase only if there are not the corresponding flags.
- Improving --O1 simplification: removing signals that do not appear in any constraint and avoiding unnecessary constraint normalizations.
- Improving parallel: array assignments of outputs and efficiency by updating numThread while waiting and setting maxThreads to 32.
- Handling better the parser errors and improving error messages to output more information. (parser, type checking and constraint generation errors).
- Showing warnings when errors are found.
- Reducing writing time for output files.
- Updating the documentation.
- Fixing a problem with the memory release of the components (in C).
- Fixing a problem with the parallel execution during the witness generation (in C).
- Fixing a bug: functions are executed even if they output signals when they contain logs or asserts.
- Fixing a bug: During the witness generation, the computation of expressions like x**x was buggy (in wasm).
- Improving the efficiency of the parser regarding the anonnymous components and tuples.
- Improving the substitution process: better compilation times for --O1 and --O2.
- Improving the handling of the underscore substitution.
- Extending the substitution to allow the inheritance of signal tags.
- Removing unused signal when applying --O1. (If a signal does not appear in any constraint, it is removed).
- Solving bug in the release of the memory of the components.
- Improving error messages: invalid access and invalid assignment.
- Avoiding side effects in out of bounds log operations.
- Adding check to detect components that are created but do not receive all their inputs.
- Fixing field size of goldilocks when writing r1cs file.
- Fixing a problem with the use of integer division and ===, <== operators. If an integer division is involved in the expression of one of these operators, then we consider the expression as no quadratic.
- Fixing bug in code generation of constraint equalities with arrays
- Fixed bug in C++ witness generation: function release_memory_component failed when releasing the memory of an array of components with some empty positions
- Fixed bug in logging of arithmetic expressions
- New feature of anonymous components: programmers can pass the parameters indicate the input names receiving the values.See here.
- circom now exits with 0 when it finishes successfully (last version exists with Exist(0) which broke some projects).
- Improving tags assignment: case multiple assignments in an array giving the same value to a tag.
- Allowing in cpp the use of binary, octal and hexadecimal numbers as inputs from a json file
- Adding support for non-64bit architectures.
- Witness_calculator adapted to work with negative numbers in the json input.
- Fixing bug in C++ witness generation: function Fr_toInt in fr.asm
- Improving error handling division by zero (instead of throwing a panic)
- Improving the memory consumption during the C++ witness generation.
- Adding a warning if the programmer is using the operator <-- when it is possible to use <== instead (if the right side is a quadratic expression and the instruction is not contained in a custom template).
- Signal ids in custom templates changed to 64 bits.
- Array sizes are expected to be usize. Now, we throw an error in other case.
- Separating optimization option -O2 in two different options: --O2 and --O2rounds. Explanation can be found here. The default option is currently --O2.
- Writing Sections 4 and 5 of the r1cs file, only if "pragma custom_templates" is used (which is needed if custom templates are present).
- Improving --O1 optimization.
- Adding a new documentation section about the different compilation options and flags.
- Fixing -l option to disallow several values for one option: each value must have its own -l option.
- Adding a link option -l that works as usual in other programming languages, to include a directory to look for the circuits indicated by the directive include.
- Adding a warning if the programmer is using the operator <-- when it is possible to use <== instead (if the right side is a quadratic expression).
- circom returns 0 if everything was correct and a number greater than 0 if something was wrong.
- Changing the log operator to work as usual in other programming languages.
- The keyword parallel can be used per instance instead of per template. Now, parallel can be indicated before the instantiation call to make parallel such a particular instance.
- Wasm Functions getMinorVersion and getPatchVersion to obtain the minor and the patch version.
- Fixing main.cpp to allow handling a main component without inputs.
- New log version has to be applied in every version of wasm files. (By a mistake, it was not updated for every wasm files.)
- Log operation receives as parameters a list of expressions and string. (Documentation is here.
- New heuristics that improves the constraint simplification process is added by default. The old version of the simplification process can be still used using the option "--use_old_simplification_heuristics".
- Initialization of every array position to 0 in both C and WASM witness generator.
- New check of size vector when vector assignment:
+ If a vector is assigned in a smaller vector, then an error is produced.
+ If a vector is assigned in a larger vector, then a warning is produced. (The remaining positions will have their previous values, or 0
otherwise. - Improvement of the trace error message.
- Adding three new prime numbers in circom and a flag to choose which one to use.
- Adding custom templates to circom. (Documentation is here).
- Adding published binaries for mac, linux and windows.
- Removing non-determinism in linear constraints that cannot be removed.
- Making deterministic the code generation.
- Adding signal one in the wires counting for optimization option '-O0'.
- Bug in conditional creation of components inside loops
- Improvement of unused signals removal in constraint optimization.
- macos (x86_64) support for cpp backend added: use template to generate makefile (Not available for M1).
- wabt dependency swapped to wast dependency instead.
- Improvement of the known/unknown analysis.
- Single signal declaration with initialization added for both <== and <--.
- Input signal size check added in wasm/JS and C++ generated code.
- Recommendation of using C++ when the memory needed is beyond WebAssembly limit added.
- Making deterministic the R1CS file: constraints will be always written in the R1CS file in the same order.
- Bug in C++ error trace management for asserts in functions.
- Bug in multiple line(s) comments.
- Bug in unassigned inputs of arrays of size 0.
- Bug in the use of constant division operation on constraints.
- Bug in evaluation of expressions involving subcomponents signals.
- Improvement in the check all array dimensions in its definition have known size.
- A new verbose flag is added: If –verbose is set the compiler shows log messages during constraint generation.
- Bug in functions that return calls to other functions.
- A check that all inputs are set is added in the wasm/JS and C++ generated code.
- Improvement of the “merge_code” implementation in code generators.
- Error trace printed in the C++ code when an assert fails.
- Compiler versions in circom programs handling added (improving the pragma instruction).
- Arrays of components with uninstantiated positions are handled.
- Comments in the wat code only generated when –wat flag is used.
- Bug in the line number generation for wasm error message.
- Bug: R1CS map is an array of 64bit elements (instead of 32bit).
- Bug on the initial memory size (too large) defined in the generated wasm code and error message handling in wasm generation added.
- Bug with use of circuit file names with dots.