This repository is work in progress
This prototype implements a subset of the features of the CBDC proposal by Matthias Babel, Alexander Bechtel, Jonas Gross, Benjamin Schellinger, and Johannes Sedlmeir.
So far, the prototype implements the Merkle-tree for storing the commitments, a list for the nullifiers, and the basics for account and transaction management. In addition, it supports fully private transactions while respecting account transaction limits, ensuring compliance by design. Further we implemented the integration of a digital ID and a revocation check of it for each transfer.
This is achieved by implementing generic zero-knowledge proofs (zk-SNARKs) using the iden3 libraries circom and snarkjs.
For information on how zero-knowledge proofs work, https://github.com/matter-labs/awesome-zero-knowledge-proofs is an awesome source of material.
The academic paper is available here.
- Semi-private transactions
- Fully transparent transactions
- Install nodejs(@v16.0.0) and npm(@7.10.0) (for instructions, see, e.g., https://heynode.com/tutorial/install-nodejs-locally-nvm/)
- Clone this repository including submodules:
git clone https://github.com/applied-crypto/cbdc --recurse-submodules
- Go to the cbdc directory:
cd cbdc/cbdc
- Install dependencies:
npm install
- Run an example transaction:
node test.js