Releases: iden3/circom
Releases · iden3/circom
v2.2.0
October 07, 2024 circom 2.2.0
New features
- Buses: more information here.
Changes
- 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.
Extensions
- Allowing array assignments of different sizes.
- Improving error reports when parsing.
- Improving documentation.
Fixed bugs
- 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.
v2.1.9
April 23, 2024 circom 2.1.9
Extensions
- 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.
Fixed bugs
- 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.
v2.1.8
Jan 17, 2024 circom 2.1.8
Extensions
- 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.
Fixed bugs
- Printing errors and warnings in custom gates correctly
- Removing panic caused by edge case in function display_trace()
v2.1.7
Dec 15, 2023 circom 2.1.7
Extensions
- 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.
Fixed Bugs
- 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.
v2.1.6
June 22, 2023 circom 2.1.6
Extensions
- 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.
Bugs
- 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.
v2.1.5
March 15, 2023 circom 2.1.5
Extensions
- 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.
Fixed Bugs
- 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).
v2.1.4
February 10, 2023 circom 2.1.4
Extensions
- Improving the efficiency of the parser regarding the anonymous 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).
Fixed Bugs
- Solving bug in the release of the memory of the components.
v2.1.3
January 16, 2023 circom 2.1.3
Extensions
- 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.
Fixed Bugs
- 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
v2.1.2
v2.1.1
November 4, 2022 circom 2.1.1
Extensions
- 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.
Fixed bugs
- Fixing bug in C++ witness generation: function Fr_toInt in fr.asm
- Improving error handling division by zero (instead of throwing a panic)