PolyMix

PolyMix

Elevate Your Security, Embrace Cryptographic Privacy

The problem PolyMix solves

Polymix offers individuals a way to enhance the privacy and security of their digital transactions.

Enhanced Privacy: By utilizing a crypto mixer, individuals can obscure the traceability of their transactions, making it harder for others to link their financial activities to their identity. This heightened privacy protects sensitive financial information from prying eyes.

Increased Security: Crypto mixers help protect against transaction analysis and tracking. They provide an additional layer of security by breaking the transaction trail, making it difficult for potential attackers or malicious actors to gain insights into one's financial behavior.

Preserving Financial Confidentiality: Using a crypto mixer allows individuals to maintain their financial confidentiality. It enables them to keep their transaction history private and safeguards their financial information from being exposed or exploited.

To ensure strict compliance with Anti-Money Laundering (AML) regulations, our Polymix platform has implemented stringent measures. While Polymix is designed for public use, we acknowledge the potential misuse for illicit activities. To address this concern, we have introduced a verification process where only verified entities and authorized personnel can withdraw funds from the mixer. This precautionary measure safeguards against the misuse of the platform and reinforces our commitment to maintaining a secure and responsible financial ecosystem.

Challenges we ran into

The biggest challenge that we ran into was that we were not really sure on what format the input data should be fed into the verifier contract which is on-chain and verifies the proof generated by groth16.

const proofInput = await { "root": utils.BNToDecimal(decodedData.root), "nullifierHash": input.nullifierHash, "recipient": utils.BNToDecimal(account.address), "secret": utils.BN256ToBin(input.secret).split(""), "nullifier": utils.BN256ToBin(input.nullifier).split(""), "hashPairings": decodedData.hashPairings.map((n) => utils.BNToDecimal(n)), "hashDirections": decodedData.pairDirection };

We went through the snarkjs library verifier contract documentation and it was not realy helpful since this is relatively new technology.

Later we reached out to the community and they helped us fixing this issue.

Discussion