The problem O1JS SHA256 Hash Function Circuit solves
Using efficient binary hash function inside zk circuits
Challenges I ran into
- The native binary gadgets in O1JS are hard-coded to operate on 64-bit Field elements which made it not practical to develop SHA256 swiftly.
- The rotate, shift, and rangeCheck functions in o1js are not flexible and only operate on 64-bit field elements.
- I tried to simulate the bitwise functions as in sha256 circuit in circomlib but I hadn't enough time to debug and make things work correctly.
- The library is quite rich but I sometimes spend a lot of time trying to find documentation for certain API.
- Working with a DSL used a TS framework made practical and flexible to implement logic and have a development experience similar to normal TS language, but sometimes I feel that I am a bit lost distinguishing circuit logic from the normal TS logic, Other DSL having kind of different language helped me before to have a clearer mental model.
- It would have been better to have a better documentation in general to save time from reading and looking at the source code intensively.