During week 4 I have finished with a draft of my project proposal and some slides to make a presentation. I managed to make contact with a mentor and the authors of EIP-5988. I am still waiting for some feedback of my project from the mentor. At the same time I got some interesting information on the work being done by the authors of EIP-5988.
While waiting for a feedback on my project, I invested my time learning some libraries that will be important for the project, for example, FLINT and blstlib
. Both libraries have code that can be used to implement finite field arithmetic with very efficient algorithms. Although blstlib
is only for the BLS12-381 curve, I still feal that learning to use a well-known library for elliptic curves can be relevant.
I also spent time making a deep study of the PLONK paper and repositories implementing PLONK, like this one in Python. In the future, I feel that it may be interesting to write a tutorial for implementing PLONK. Even though the paper is well-written, the presentation of the results can be challenging to developers with no background in ring theory. I will leave this for a future personal project.
The main reason of using Poseidon as a hash function is to obtain smaller arithmetic circuits. This inmediately leads to less constraints in R1CS, which is an intermediate representation of arithmetic circuits in current zero-knowledge proof systems. There is also a more recent version called Poseidon2, that was published less than two months ago in the Cryptology ePrint Archive. This new version promises faster execution and less constraints for PLONK circuits. I still need to read the details of Poseidon2 and see if it will be possible to incorporate it into the project.