After a recent talk Milen had on Zero Knowledge Proofs in front of the Bulgarian developers community, we decided to dive deeper into this topic and discuss further on our monthly meetup how on-chain confidential transactions could be achieved using zero knowledge protocols.
So last week on our 10th Blockchain Developers Meetup we did that.
Developers news digest
As usual we stared with covering the latest news in the blockchain space which directly relate to us as developers:
- Pocketh: a “pocket knife for auditing smart contracts” from Zeppelin
- Sandcastle, an Eth SQL language pre-alpha available in Remix.
- A Scratch3 extension to make it easy and kid-friendly to build games on Eth
- Solidity v0.5.8 “further completes ABIEncoderV2, SMTChecker and Yul and improves the optimizer.” Also Solidity v0.4.26 backports bugfixes for v4
- Truffle and Ganache new releasesVitalik’s design for a minimal mixer
- Prysmatic labs – new update on ETH 2.0 – they’ve outlined a number of milestones saying new developers are welcome to come on board for testing
- ZCash – Significant effort put towards final review, testing and documenting this week’s 2.0.5 release. Several bugs were discovered so they are taking the time to properly address.
- Bitcoin Core 0.18.0 released
- Proposal for support of Schnorr signatures and Taproot script commitments: Pieter Wuille posted to the Bitcoin-Dev mailing list a proposed BIP for Taproot (using Schnorr signatures) and a proposed BIP for Tapscript, a small variation on Bitcoin’s current Script language to be used with Taproot encumbrances.
Zero-Knowledge
Then we’ve proceeded with the actual topic that brought us together on this particular meetup – zero-knowledge based confidential transactions with zkSNARKs. We’ve talked briefly about the history of zero knowledge proofs – from their first paper appearance at the Forum of Computer Science (FOCS) back in ’85 – invented in 1982 by three scientists – Goldwasser, Micali and Rackoff, to what turned out to be one of the most beautiful and influential concepts in computer science ever since.
Zero knowledge proofs nowadays find various practical application, such as signature schemes, protocol designs, identification schemes and more.
During our meetup we’ve actually focused more on zkSNARKs which stands for Zero-Knowledge Succinct Non-interactive ARgument of Knowledge, and built up a cryptographically secure on-chain (ethereum) implementation of proof, written in Solidity.
We used two libraries/tools in order for us to generate the witness (secret string for the proof) and built our proof function: snarkjs
and circom
.
Resources
- video recording [will be updated soon]
- presentation
Further read
- ZoKrates
- ZkSnarks example
Also published on Medium.