The frontend is a React 16 app written in TypeScript. It uses Parcel to handle source bundling.
First, get at least 0.102 Kovan ETH (0.1 plus gas fees) from a faucet. Next, navigate to the UI in your web browser.
Enter the recipient's ETH address and click "Mix 0.1 ETH". This will trigger a MetaMask popup. Click submit. Do not close your browser window until you see the Countdown page.
Keep this browser window open till midnight UTC for the page to automatically
mix the funds. To speed up this process for testing purposes, you can set the
timestamp of the last entry in the localStorage MIXER JSON array to 0, and
a yellow button will appear which you can click to trigger the mix.
This mix process downloads about 40MB worth of gzipped zk-SNARK keys and
circuit data, generates a proof, and submits it to a centralised but
noncustodial relayer. The relayer verifies the proof and submits a mix()
transaction to the mixer contract located
here.
For a hot-reloading development setup, run the following command in this directory:
npm run watchAnd launch http://localhost:1234 in your browser.
To create a production build, run:
npm run buildAll stylesheets are written in LESS and stored in less/.
index.html imports index.less. In turn, index.less imports all other
stylesheets named index.less in various subfolders.
We use convention to separate of style concerns.
-
constants.less: defines colour values, lengths, font sizes, and any absolute values used by the other stylesheets. -
routes/index.less: defines styles common to all routes, and also imports all stylesheets inroutes/. -
routes/<name>.less: defines styles specific toroutes/<name>.tsx -
components/index.less: defines styles common to all components, and also imports all stylesheets incomponents/. -
components/<name>.less: defines styles specific tocomponents/<name>.tsx
The layout should be responsive. Media queries should go into each individual
stylesheet. e.g. constants.less should contain a media query which sets
different margins for different screen sizes, deposit.less should handle its
own responsive styles, etc.