of my project:
I have good news and bad news.. and then good news again. The good news is I have a working implementation for zk-snark proof verification on the EOS blockchain. The bad news is that the verification time is way too long for the EOS main net. On EOS transactions that take longer than 30 ms are NOT being executed. The current verification time for a simple proof of knowledge of a blake2s hash value is about 150 ms which is 5 times more than the EOS main net allows. The code I'm using is my own C++ implementation/portation of the ZCash Sapling verifier which means it is already optimized for cheap on chain verification using the pairing friendly BLS12-381 elliptic curve for example. There is no way on earth I can reduce the verification time by a factor of five - especially not for the final Spend-Circuit which will have way more inputs than a simple hash function.
However, there is a solution to that problem: For the merkle tree I was planning to utilize LiquidApps vRAM anyway and they offer a service called vCPU as well for computationally intensive functions that are very expensive to execute on chain (after all you don't want users to have to allocate 150 ms or more of CPU just for one single private transaction, right?). While the proof verification is something you actually WANT to be verified on chain in order to be trustless the only way to make private transactions (based on zk-snarks) on the EOS main net happen is to utilize something like vCPU. Another way would be to ask block producers to increase the execution time limit to 200 ms or so but again users would have to pay a lot of CPU per private transaction and there might be other reasons why increasing the limit might be a bad idea (tbh I'm not sure why this limit exists in the first place but most certainly there is a good reason for it). However, the cool thing about LiquidApps services is they are customizable to increase degrees of decentralization. So for instance the proof verification could happen on multiple DSPs simultaniously in order to increase "trustlessness". I think there is a certain number of DSPs where everyone could agree that the proof verification would be "trustless enough" even though it does not happen using the EOS CPU. In addition to that everything is recorded on chain anyway which makes all private transactions auditable and provable (includeing the zero knowledge proofs of course). This is due to the facts that all DSPs are EOS nodes and all LiquidApps code is included in the EOS smart contracts which utilize them.
So yeah, that's the current state of the project. It's gonna happen guys, we will have private transactions on EOS soon. I will pause the development for now to set up a website and put my ideas/concepts together in a short whitepaper to officially announce the project and resume development afterwards. A lot of the work is already done and tested. Stay tuned for more!
sounds awesome👍
Обсуждают сегодня