---
# System prepended metadata

title: zkEVM Circuits - Next Milestone Planning

---

# zkEVM Circuits - Next Milestone Planning

Summary: the team is spliting the next milestone into 3: 
- Improve Ethereum test passing
    - 90% (passing) / 10% (failing)
- Tech debt
    - Circuit input builder + Constraint builder refactor (reduce code repetition)
    - link code+specs+doc
- Word HI/LO
    - Create the specs
    - Refactor the circuits
*(also will be reviewing specs and contributions from other teams)*

Timeline: **2-3 months** (** finish between end April or end of May by skipping March**)

[Increase opcode support](https://github.com/privacy-scaling-explorations/zkevm-circuits/milestone/1)


## Notes
##### Improve Ethereum test passing
- Target this milestone in **2-3 months** (**between end April or end of May**). How much percentage could we cover?
- Currently, we're in 22% passing. 1% panicing. Most failing tests are due to unimplemented things.
- Most important things to test are **CREATE and CREATE 2**
- Out of gas, etc have been implemented.
- Good target: **90%/10%**
    - 90% working
    - 10% failing or not implemented
- Note: this is not exactly test coverage becuase all the test are already written by EF people, client teams need to pass them.
- Note: Polygon Hermez in their first alpha they were at 96%.
- Question: do we fix the milestone or the timeline?
- Decision: try to aim for this 90% and see how far we get in the timeline above, but not block the 
- Question: do we include tasks for the test tool?
- Answer:
    - Non tech debt: we should change the test tool in the way we can call prover.assert_satissfy so we can propagate the error and get annotations. (**Create task**) Basically, get all the traces when a test fails
##### Tech Debt
- Carlos compiled all the "todo" notes in the code. Maybe half of them are things already implemented and the other half might require new tasks: https://hackmd.io/KwrlKYWoRF2NAoT977Aduw **Action item:** let's make a follow up call to classify them
- Need to look at the list above and prioritize them.

##### Tech Debt from Edu

(1-dup) Unify the types `Block`, `Call`, `Step`, `Transaction` between these two:
- `zkevm-circuits/src/witness`
- `bus-mapping/src/circuit_input_builder`
- names and variables instead of indices

(2) In the EVM Circuit ExecSteps assignment we're gathering witness data by accessing rw operations by index, which is not very readable.  Example: https://github.com/privacy-scaling-explorations/zkevm-circuits/blob/fadb11b9643fd66a730db95a6561a0482991ce9e/zkevm-circuits/src/evm_circuit/execution/callop.rs#L452
- Try to share these witnesses from the bus-mapping to the circuits in a structured way

(3-dup) Currently we have a CellManager in Keccak and another implementation in EVM. And maybe a new one coming up in MPT. Can we unify them?
- We have ConstraintBuilder/CellManager in 4 places: EVM circuit, State circuit, Keccak circuit, MPT circuit.
- (3.1) Need to write extensive documentation for ConstraintBuilder/CellManager.
- Create a proposal for a ConstraintBuilder/CellManager that could benefit the community like also ZCash. 
- Stretch goal: implement the agreed proposal.

(4) Build wrappers on top of halo2 to have more succint code to query columns:
- Example solution A: https://github.com/privacy-scaling-explorations/zkevm-circuits/pull/972#issuecomment-1404002401
- Example solution B: Leo's proposal
- ???

3&4 are improvements on the constraint builder. Good to figure out biggest improvements we could work on. The code to query a column is very verbose (make it succint)