a MASP (multi asset shielded pool) that allows for users to deposit and transfer ERC20s privately
Our project is RomanKyoto, a Cross-Chain Multi Asset Shielded Pool.
It allows users to deposit, and then privately transfer ERC-20 tokens across. Users can then withdraw their tokens from the pool at any time, and can withdraw however much or little they want (up to their current balance in the MASP).
We currently only support private single chain deposit, withdrawals, and transfers. CCIP contracts are created, but we need additional integration for cross-chain private transfers.
This is a hardhat/circom circuit based project.
First things first, we utilised our private transfer proving model for a shielded asset pool largely based on the tornado nova protocol, but unique differentiator is that we support multiple assets within the same contract.
Our proving model is based on UTXO notes stored within the contracts merkle root. Each time a user deposits an asset, they create a record (an encrypted 'note' with a value) within the contracts merkle tree.
Once a user has a note, they can transfer values up to that amount (or up to the sum of any other notes they have) to other addresses.
If a user has a note, they can also just withdraw that amount straight back to the erc20 that that note represents.
Our example flow in our integration test:
We deployed these contracts to Base Sepolia (https://sepolia.basescan.org/address/0xC60B012f38017f512D2069aE3210Ad36075ACA6f) and Polygon Cardano (https://cardona-zkevm.polygonscan.com/address/0xC60B012f38017f512D2069aE3210Ad36075ACA6f) as their cheaper transaction costs make these more expensive proving operations much more feasible.