# 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)
{"metaMigratedAt":"2023-06-17T19:44:30.340Z","metaMigratedFrom":"Content","title":"zkEVM Circuits - Next Milestone Planning","breaks":true,"contributors":"[{\"id\":\"c8765ae7-422c-473e-a690-767865a7d8aa\",\"add\":5401,\"del\":3062},{\"id\":\"2ab60db2-afc6-40a9-b042-6d5f2047e866\",\"add\":60,\"del\":3},{\"id\":\"43027194-d6c0-4e63-87d9-de70c4997852\",\"add\":1042,\"del\":11},{\"id\":\"c676ac5b-8053-4516-a896-838aaf48a316\",\"add\":97,\"del\":0}]"}