zkMove 0.2.0 is out! It’s a big step forward compared to v0.1.0. some important features are implemented, circuit performance optimized, and also bugs fixed! We’re thrilled to introduce to you what we have achieved in the last three months.

New Features

In the last release, we set the goal that zkmove should achieve full move bytecode compatibility.

Now, in this release, we have added support for vectors, generics - the two important parts of the move language, and also LdConst, which makes declaring const values in move possible.

  • When designing constraints for vectors, we concluded to a new value and adressing system, unifying the way of expressing move value in the circuit.
  • We used as much information in bytecodes as we could to implement performant constraints for move generics.

After this, we are nearly 100% compatible with move. It means almost all the move contracts you write can be proved by zkmove (with several computation limits related to proving).


We have done a lot of work to refactor our circuits, resulting to less cell usages and decreasing proving time.

  • One big change is that step cells are arranged according to the opcode. Each step only uses the cells it needs, no more, no less.
  • The cells for step condition are halved, further reducing cell usage.

The release also fixed some hidden bugs in previous release, leading to a more robust and steady zkmove.

What’s Next

Over the next few months, we will continue to implement new features, including transaction and state model, as well as proof aggregation and verification.