Toadnado is a mixer that allows you to deposit from both L2 (scroll) and L1. You can then anonymously withdraw on L2 to a new address. This doesn't reveal from which address you deposited, or even which chain. The anonymity set spans across both L1 and L2 :D
Today's bridges do not preserve privacy. We build Toadnado to prove that they can, and it's cool! We hope it will inspire future bridge protocols to add better privacy.
We used scrolls new L1SLOAD opcode to read the L1 commitment-root atomically from L1. ☝️🤓
"Let my people go, so that they may worship me. If you refuse to let them go, I will plague your whole country with frogs." — Exodus 8:1–4
To get started with toadnado, follow the steps below:
-
git clone
and install dependencies withyarn install
in the root directory: -
deploy the contracts
yarn hardhat run ./scripts/deploy.ts --network sepolia
install
curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash
noirup --version 0.30.0
compile circuits
cd circuits/prover/; nargo compile
generate verifier contract
cd circuits/prover/; nargo codegen-verifier; cp contract/prover/plonk_vk.sol ../../contracts/plonk_vk.sol
run a local test node
yarn hardhat node
run test
yarn test
(you need to copy paste output into merkle-tree.sol)
yarn generate-zeros