All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.25.0 (2023-09-04)
- Provide runtime callstacks for brillig failures and return errors in acvm_js (#523)
0.24.1 (2023-09-03)
0.24.0 (2023-08-31)
- acvm: Remove the
Backend
trait (#514) - acir: Remove unused
Directive
opcodes (#510) - acir: Add predicate to MemoryOp (#503)
- acvm: Remove unused arguments from
Backend
trait (#511) - Assertion messages embedded in the circuit (#484)
- acir: Add predicate to MemoryOp (#503) (ca9eebe)
- Assertion messages embedded in the circuit (#484) (06b97c5)
- acir: Remove unused
Directive
opcodes (#510) (cfd8cbf) - acvm: Remove the
Backend
trait (#514) (681535d) - acvm: Remove unused arguments from
Backend
trait (#511) (ae65355)
0.23.0 (2023-08-30)
- Return an iterator from
new_locations()
instead of collecting (#507) - acvm: remove
CommonReferenceString
trait and preprocess method (#508) - acvm: Remove
BlackBoxFunctionSolver
fromBackend
trait (#494) - acvm: Pass
BlackBoxFunctionSolver
toACVM
by reference
- acvm_js: Add
execute_circuit_with_black_box_solver
to prevent reinitialization ofBlackBoxFunctionSolver
(3877e0e) - Expose a
BlackBoxFunctionSolver
containing a barretenberg wasm fromblackbox_solver
(#494) (a1d4b71)
- acvm: Pass
BlackBoxFunctionSolver
toACVM
by reference (3877e0e) - acvm: Remove
BlackBoxFunctionSolver
fromBackend
trait (#494) (a1d4b71) - acvm: remove
CommonReferenceString
trait and preprocess method (#508) (3827dd3) - Return an iterator from
new_locations()
instead of collecting (#507) (8d49a5c)
0.22.0 (2023-08-18)
- Switched from OpcodeLabel to OpcodeLocation and ErrorLocation (#493)
- acvm: check for index out-of-bounds on memory operations (#468)
- acvm: check for index out-of-bounds on memory operations (#468) (740468c)
- print error location with fmt (#497) (575a9e5)
- Switched from OpcodeLabel to OpcodeLocation and ErrorLocation (#493) (27a5a93)
0.21.0 (2023-07-26)
- acir: Remove
Block
,RAM
andROM
opcodes (#457) - acvm: Remove
OpcodeResolution
enum (#400) - acvm: Support stepwise execution of ACIR (#399)
- acvm: Remove
OpcodeResolution
enum (#400) (d0ce48c) - acvm: Support stepwise execution of ACIR (#399) (6a03950)
0.20.1 (2023-07-26)
- add optimisations to fallback black box functions on booleans (#446) (2cfb2a8)
- stdlib: Add fallback implementation of
Keccak256
black box function (#445) (f7ebb03)
0.20.0 (2023-07-20)
- atomic memory opcodes (#447)
- atomic memory opcodes (#447) (3261c7a)
- brillig: Support integers which fit inside a
FieldElement
(#403) (f992412) - stdlib: Add fallback implementation of
HashToField128Security
black box function (#435) (ed40f22)
0.19.1 (2023-07-17)
0.19.0 (2023-07-15)
- move to bincode and GzEncoding for artifacts (#436)
0.18.2 (2023-07-12)
- acvm: reexport
blackbox_solver
crate fromacvm
(#431) (517e942) - stdlib: Add fallback implementation of
Blake2s
black box function (#424) (982d940)
0.18.1 (2023-07-12)
0.18.0 (2023-07-12)
- add backend-solvable blackboxes to brillig & unify implementations (#422)
- acvm: Remove
CircuitSimplifer
(#421) - acvm: Add
circuit: &Circuit
toeth_contract_from_vk
function signature (#420) - Returns index of failing opcode and transformation mapping (#412)
- acvm: Add
circuit: &Circuit
toeth_contract_from_vk
function signature (#420) (744e9da) - add backend-solvable blackboxes to brillig & unify implementations (#422) (093342e)
- derive PartialOrd, Ord, and Hash on RegisterIndex (#425) (7f6b0dc)
- Returns index of failing opcode and transformation mapping (#412) (79950e9)
- stdlib: Add fallback implementation of
SHA256
black box function (#407) (040369a)
0.17.0 (2023-07-07)
- acir: add
EcdsaSecp256r1
blackbox function (#408)
0.16.0 (2023-07-06)
- acvm: replace
PartialWitnessGeneratorStatus
withACVMStatus
(#410) - acir: revert changes to
SchnorrVerify
opcode (#409) - acvm: Replace
PartialWitnessGenerator
trait withBlackBoxFunctionSolver
(#378) - acvm: Encapsulate internal state of ACVM within a struct (#384)
- remove unused
OpcodeResolutionError::IncorrectNumFunctionArguments
variant (#397) - acir: Remove
Oracle
opcode (#368) - acir: Use fixed length data structures in black box function inputs/outputs where possible. (#386)
- acir: Implement
Add
trait forWitness
& make output ofMul
onExpression
optional (#393)
- acir: Implement
Add
trait forWitness
& make output ofMul
onExpression
optional (#393) (5bcdfc6) - acir: Remove
Oracle
opcode (#368) (63354df) - acir: Use fixed length data structures in black box function inputs/outputs where possible. (#386) (b139d4d)
- acvm: Derive
Copy
forLanguage
(#406) (69a6c22) - acvm: Encapsulate internal state of ACVM within a struct (#384) (84d4867)
- acvm: Replace
PartialWitnessGenerator
trait withBlackBoxFunctionSolver
(#378) (73fbc95) - acvm: replace
PartialWitnessGeneratorStatus
withACVMStatus
(#410) (fc3240d) - brillig: implemented first blackbox functions (#401) (62d40f7)
0.15.1 (2023-06-20)
0.15.0 (2023-06-15)
- brillig: Accept multiple inputs/outputs for foreign calls (#367)
- acvm: Make internals of ACVM private (#353)
- Add method to generate updated
Brillig
opcode fromUnresolvedBrilligCall
(#363) (fda5dbe) - brillig: Accept multiple inputs/outputs for foreign calls (#367) (78d62b2)
- brillig: Set
VMStatus
toFailure
rather than panicking on invalid foreign call response (#375) (c49d82c)
- brillig: Correct signed division implementation (#356) (4eefda0)
- brillig: Explicitly wrap on arithmetic operations (#365) (c0544a9)
0.14.2 (2023-06-08)
0.14.1 (2023-06-07)
0.14.0 (2023-06-06)
- acir: Verify Proof (#291)
0.13.3 (2023-06-05)
- Empty commit to trigger release-please (e8f0748)
0.13.2 (2023-06-02)
0.13.1 (2023-06-01)
- brillig: Proper error handling for Brillig failures (#329) (cffa110)
- ci: Add brillig_vm to release-please & link versions (#332) (84bd22e)
- ci: Correct typo to avoid
undefined
in changelogs (#333) (d3424c0)
0.13.0 (2023-06-01)
- added hash index to pedersen (#281)
- Add variable length keccak opcode (#314)
- Remove AES opcode (#302)
- acir, acvm: Remove ComputeMerkleRoot opcode #296
- Remove manual serialization of
Opcode
s in favour ofserde
(#286) - Remove backend solvable methods from the interface and solve them in ACVM (#264)
- Reorganize code related to
PartialWitnessGenerator
(#287)
- acir, acvm: Remove ComputeMerkleRoot opcode #296 (8b3923e)
- Add
Brillig
opcode to introduce custom non-determinism to ACVM (#152) (3c6740a) - Add variable length keccak opcode (#314) (7bfd169)
- added hash index to pedersen (#281) (61820b6)
- Remove backend solvable methods from the interface and solve them in ACVM (#264) (69916cb)
- Remove AES opcode (#302) (a429a54)
- Remove manual serialization of
Opcode
s in favour ofserde
(#286) (8a3812f) - Reorganize code related to
PartialWitnessGenerator
(#287) (b9d61a1)
0.12.0 (2023-05-17)
- remove deprecated circuit hash functions (#288)
- allow backends to specify support for all opcode variants (#273)
- acvm: Add CommonReferenceString backend trait (#231)
- Introduce WitnessMap data structure to avoid leaking internal structure (#252)
- use struct variants for blackbox function calls (#269)
- acvm: Backend trait must implement Debug (#275)
- remove
OpcodeResolutionError::UnexpectedOpcode
(#274) - acvm: rename
hash_to_field128_security
tohash_to_field_128_security
(#271) - acvm: update black box solver interfaces to match
pwg:black_box::solve
(#268) - acvm: expose separate solvers for AND and XOR opcodes (#266)
- acvm: Simplification pass for ACIR (#151)
- Remove
solve
from PWG trait & introduce separate solvers for each blackbox (#257)
- acvm: Add CommonReferenceString backend trait (#231) (eeddcf1)
- acvm: Simplification pass for ACIR (#151) (7bc42c6)
- acvm: update black box solver interfaces to match
pwg:black_box::solve
(#268) (0098b7d) - Introduce WitnessMap data structure to avoid leaking internal structure (#252) (b248e60)
- Remove
solve
from PWG trait & introduce separate solvers for each blackbox (#257) (3f3dd74) - use struct variants for blackbox function calls (#269) (a83333b)
- acvm: Backend trait must implement Debug (#275) (3288b4c)
- acvm: expose separate solvers for AND and XOR opcodes (#266) (84b5d18)
- acvm: rename
hash_to_field128_security
tohash_to_field_128_security
(#271) (fad9af2) - allow backends to specify support for all opcode variants (#273) (efd37fe)
- remove
OpcodeResolutionError::UnexpectedOpcode
(#274) (0e71aac) - remove deprecated circuit hash functions (#288) (1a22c75)
0.11.0 (2023-05-04)
- acvm: Introduce Error type for fallible Backend traits (#248)
- acvm: Add generic error for failing to solve an opcode (#251) (bc89528)
- acvm: Introduce Error type for fallible Backend traits (#248) (45c45f7)
- Add Keccak Hash function (#259) (443c734)
0.10.3 (2023-04-28)
0.10.2 (2023-04-28)
0.10.1 (2023-04-28)
0.10.0 (2023-04-26)
- return
Result<OpcodeResolution, OpcodeResolutionError>
fromsolve_range_opcode
(#238) - acvm: have all black box functions return
Result<OpcodeResolution, OpcodeResolutionError>
(#237) - acvm: implement
hash_to_field_128_security
(#230) - replace
MerkleMembership
opcode withComputeMerkleRoot
(#233) - require
Backend
to implementDefault
trait (#223) - Make GeneralOptimizer crate visible (#220)
- return
PartialWitnessGeneratorStatus
fromPartialWitnessGenerator.solve
(#213) - organise operator implementations for Expression (#190)
- acvm: have all black box functions return
Result<OpcodeResolution, OpcodeResolutionError>
(#237) (e8e93fd) - acvm: implement
hash_to_field_128_security
(#230) (198fb69) - Add range opcode optimization (#219) (7abe6e5)
- implement
add_mul
onExpression
(#207) (f156e18) - implement
FieldElement::from<bool>()
(#203) (476cfa2) - replace
MerkleMembership
opcode withComputeMerkleRoot
(#233) (74bfee8) - require
Backend
to implementDefault
trait (#223) (00282dc) - return
PartialWitnessGeneratorStatus
fromPartialWitnessGenerator.solve
(#213) (e877bed) - return
Result<OpcodeResolution, OpcodeResolutionError>
fromsolve_range_opcode
(#238) (15d3c5a)
- Make GeneralOptimizer crate visible (#220) (64bb346)
- organise operator implementations for Expression (#190) (a619df6)
0.9.0 (2023-04-07)
- acvm: Remove deprecated eth_contract_from_cs from SmartContract trait (#185)
- acvm: make
Backend
trait object safe (#180)
0.8.1 (2023-03-30)
0.8.0 (2023-03-28)
- acir: Read Log Directive (#156)
0.7.1 (2023-03-27)
0.7.0 (2023-03-23)
- Add initial oracle opcode (#149)
- acir: Add RAM and ROM opcodes
- acir: Add a public outputs field (#56)
- acir: remove
Linear
struct (#145) - acvm: remove
prove_with_meta
andverify_from_cs
fromProofSystemCompiler
(#140) - acvm: Remove truncate and oddrange directives (#142)
- acir: Add a public outputs field (#56) (5f358a9)
- acir: Add RAM and ROM opcodes (73e9f25)
- Add initial oracle opcode (#149) (88ee2f8)
- acir: remove
Linear
struct (#145) (bbb6d92) - acvm: remove
prove_with_meta
andverify_from_cs
fromProofSystemCompiler
(#140) (35dd181) - acvm: Remove truncate and oddrange directives (#142) (85dd6e8)
0.6.0 (2023-03-03)
- acir: rename
term_addition
topush_addition_term
- acir: rename
term_multiplication
topush_multiplication_term
(#122) - acir: remove
UnknownWitness
(#123) - add block opcode (#114)
- acir: add useful methods from
noirc_evaluator
ontoExpression
(#125) (d3d5f89) - add block opcode (#114) (097cfb0)
- acir: correctly display expressions with non-unit coefficients (d3d5f89)
- ci: publish acvm_stdlib before acvm (#117) (ca6defc)
- acir: remove
UnknownWitness
(#123) (9f002c7) - acir: rename
term_addition
topush_addition_term
(d389385) - acir: rename
term_multiplication
topush_multiplication_term
(#122) (d389385)
0.5.0 (2023-02-22)
- acvm: switch to accepting public inputs as a map (#96)
- acvm: add
eth_contract_from_vk
to `SmartContract - update
ProofSystemCompiler
to not take ownership of keys (#111) - update
ProofSystemCompiler
methods to take&Circuit
(#108) - acir: make PublicInputs use a BTreeSet rather than Vec (#99)
- refactor ToRadix to ToRadixLe and ToRadixBe (#58)
- acir: Add keccak256 Opcode (#91)
- reorganise compiler in terms of optimisers and transformers (#88)
- acir: Add keccak256 Opcode (#91) (b909146)
- acir: make PublicInputs use a BTreeSet rather than Vec (#99) (53666b7)
- acvm: add
eth_contract_from_vk
to `SmartContract (#113) (373c18f) - acvm: switch to accepting public inputs as a map (#96) (f57ba57)
- ci: Add release workflow (#89) (db8e828)
- ci: Publish crates upon release (#104) (b265920)
- update
ProofSystemCompiler
methods to take&Circuit
(#108) (af56ca9) - update
ProofSystemCompiler
to not take ownership of keys (#111) (39b8a41) - Update Arkworks' dependencies on
acir_field
(#69) (65d6130)
- ci: Update dependency versions in the workspace file (#103) (9acc266)
- Clean up Log Directive hex output (#97) (d23c735)
- refactor ToRadix to ToRadixLe and ToRadixBe (#58) (2427a27)
- reorganise compiler in terms of optimisers and transformers (#88) (9329307)
- Removed duplicated logic in match branch
- Add log directive
- Expose
acir_field
throughacir
crate - Add permutation directive
- Add preprocess methods to ACVM interface
- Changed spellings of many functions to be correct using spellchecker
-
ACVM compile method now returns an Error for when a function cannot be reduced to arithmetic gates
-
Backtrack changes from noir-lang/noir/587
- Added stdlib module to hold all of the standard opcodes
- added
read
,write
methods for circuit
- XOR, Range and AND gates are no longer special case. They are now another opcode in the GadgetCall
- Move fallback module to
stdlib
- Optimizer code and any other passes will live in acvm. acir is solely for defining the IR now.
- ACIR passes now live under the compiler parent module
- Moved opcode module in acir crate to circuit/opcode
- Rename GadgetCall to BlackBoxFuncCall
- Rename opcode file to blackbox_functions . Similarly OPCODE is now BlackBoxFunc
- Renamed GateResolution::UnsupportedOpcode to GateResolution::UnsupportedBlackBoxFunc
- Renamed GadgetDefinition to FuncDefinition
- Rename GadgetInput to FunctionInput
- Rename Gate -> Opcode . Similarly gate.rs is now opcodes.rs
- Rename CustomGate::supports_gate -> CustomGate::supports_opcode
- Rename GateResolution to OpcodeResolution
- Rename Split directive to ToBits
- Field element printing function was modified to uses ascii superscript numbers and ascii multiplication
- Refactor the way we print ACIR (This is a first draft and will change with more feedback)
- Rename
solve_gadget_call
trait method on ProofSystemCompile tosolve_blackbox_function_call
- API for
compile
now requires a function pointer which tells us whether a blackbox function is supported - Renamed Directive::Oddrange to Directive::OddRange
- Renamed FieldElement::to_bytes to FieldElement::to_be_bytes
- Selector struct has been removed as it is no longer being used. It is also not being used by Noir.
- CustomGate trait -- There is a method in the ProofSystemCompiler Trait that backends can use to indicate whether they support a particular black box function
- Remove OpcodeResolution enum from pwg. The happy case is strictly when the witness has been solved
- Removed ToBits and ToBytes opcode