From 2962f30ed5214e9ef95df5dfe91aa376d7476c06 Mon Sep 17 00:00:00 2001 From: poma Date: Thu, 28 Nov 2019 11:52:17 +0700 Subject: [PATCH 1/3] fix address formatting in tests --- test/ERC20Mixer.test.js | 49 +++++++++++++++-------------------------- test/ETHMixer.test.js | 21 ++++-------------- 2 files changed, 22 insertions(+), 48 deletions(-) diff --git a/test/ERC20Mixer.test.js b/test/ERC20Mixer.test.js index 30a178f..ad7e07b 100644 --- a/test/ERC20Mixer.test.js +++ b/test/ERC20Mixer.test.js @@ -25,6 +25,8 @@ const MerkleTree = require('../lib/MerkleTree') const rbigint = (nbytes) => snarkjs.bigInt.leBuff2int(crypto.randomBytes(nbytes)) const pedersenHash = (data) => circomlib.babyJub.unpackPoint(circomlib.pedersenHash.hash(data))[0] +const toFixedHex = (number, length = 32) => '0x' + bigInt(number).toString(16).padStart(length * 2, '0') +const getRandomRecipient = () => rbigint(20) function generateDeposit() { let deposit = { @@ -36,21 +38,6 @@ function generateDeposit() { return deposit } -function getRandomRecipient() { - let recipient = rbigint(20) - while (toHex(recipient.toString()).length !== 42) { - recipient = rbigint(20) - } - return recipient -} - -function toFixedHex(number, length = 32) { - let str = bigInt(number).toString(16) - while (str.length < length * 2) str = '0' + str - str = '0x' + str - return str -} - contract('ERC20Mixer', accounts => { let mixer let token @@ -161,10 +148,10 @@ contract('ERC20Mixer', accounts => { const balanceMixerBefore = await token.balanceOf(mixer.address) const balanceRelayerBefore = await token.balanceOf(relayer) - const balanceRecieverBefore = await token.balanceOf(toHex(recipient.toString())) + const balanceRecieverBefore = await token.balanceOf(toFixedHex(recipient, 20)) const ethBalanceOperatorBefore = await web3.eth.getBalance(operator) - const ethBalanceRecieverBefore = await web3.eth.getBalance(toHex(recipient.toString())) + const ethBalanceRecieverBefore = await web3.eth.getBalance(toFixedHex(recipient, 20)) const ethBalanceRelayerBefore = await web3.eth.getBalance(relayer) let isSpent = await mixer.isSpent(toFixedHex(input.nullifierHash)) isSpent.should.be.equal(false) @@ -184,8 +171,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerAfter = await token.balanceOf(mixer.address) const balanceRelayerAfter = await token.balanceOf(relayer) const ethBalanceOperatorAfter = await web3.eth.getBalance(operator) - const balanceRecieverAfter = await token.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverAfter = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverAfter = await token.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverAfter = await web3.eth.getBalance(toFixedHex(recipient, 20)) const ethBalanceRelayerAfter = await web3.eth.getBalance(relayer) const feeBN = toBN(fee.toString()) balanceMixerAfter.should.be.eq.BN(toBN(balanceMixerBefore).sub(toBN(tokenDenomination))) @@ -242,10 +229,10 @@ contract('ERC20Mixer', accounts => { const balanceMixerBefore = await token.balanceOf(mixer.address) const balanceRelayerBefore = await token.balanceOf(relayer) - const balanceRecieverBefore = await token.balanceOf(toHex(recipient.toString())) + const balanceRecieverBefore = await token.balanceOf(toFixedHex(recipient, 20)) const ethBalanceOperatorBefore = await web3.eth.getBalance(operator) - const ethBalanceRecieverBefore = await web3.eth.getBalance(toHex(recipient.toString())) + const ethBalanceRecieverBefore = await web3.eth.getBalance(toFixedHex(recipient, 20)) const ethBalanceRelayerBefore = await web3.eth.getBalance(relayer) let isSpent = await mixer.isSpent(toFixedHex(input.nullifierHash)) isSpent.should.be.equal(false) @@ -263,8 +250,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerAfter = await token.balanceOf(mixer.address) const balanceRelayerAfter = await token.balanceOf(relayer) const ethBalanceOperatorAfter = await web3.eth.getBalance(operator) - const balanceRecieverAfter = await token.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverAfter = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverAfter = await token.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverAfter = await web3.eth.getBalance(toFixedHex(recipient, 20)) const ethBalanceRelayerAfter = await web3.eth.getBalance(relayer) const feeBN = toBN(fee.toString()) balanceMixerAfter.should.be.eq.BN(toBN(balanceMixerBefore).sub(toBN(tokenDenomination))) @@ -384,8 +371,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerBefore = await usdtToken.balanceOf(mixer.address) const balanceRelayerBefore = await usdtToken.balanceOf(relayer) const ethBalanceOperatorBefore = await web3.eth.getBalance(operator) - const balanceRecieverBefore = await usdtToken.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverBefore = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverBefore = await usdtToken.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverBefore = await web3.eth.getBalance(toFixedHex(recipient, 20)) let isSpent = await mixer.isSpent(input.nullifierHash.toString(16).padStart(66, '0x00000')) isSpent.should.be.equal(false) @@ -405,8 +392,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerAfter = await usdtToken.balanceOf(mixer.address) const balanceRelayerAfter = await usdtToken.balanceOf(relayer) const ethBalanceOperatorAfter = await web3.eth.getBalance(operator) - const balanceRecieverAfter = await usdtToken.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverAfter = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverAfter = await usdtToken.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverAfter = await web3.eth.getBalance(toFixedHex(recipient, 20)) const feeBN = toBN(fee.toString()) balanceMixerAfter.should.be.eq.BN(toBN(balanceMixerBefore).sub(toBN(tokenDenomination))) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore)) @@ -473,8 +460,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerBefore = await token.balanceOf(mixer.address) const balanceRelayerBefore = await token.balanceOf(relayer) const ethBalanceOperatorBefore = await web3.eth.getBalance(operator) - const balanceRecieverBefore = await token.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverBefore = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverBefore = await token.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverBefore = await web3.eth.getBalance(toFixedHex(recipient, 20)) let isSpent = await mixer.isSpent(input.nullifierHash.toString(16).padStart(66, '0x00000')) isSpent.should.be.equal(false) @@ -495,8 +482,8 @@ contract('ERC20Mixer', accounts => { const balanceMixerAfter = await token.balanceOf(mixer.address) const balanceRelayerAfter = await token.balanceOf(relayer) const ethBalanceOperatorAfter = await web3.eth.getBalance(operator) - const balanceRecieverAfter = await token.balanceOf(toHex(recipient.toString())) - const ethBalanceRecieverAfter = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverAfter = await token.balanceOf(toFixedHex(recipient, 20)) + const ethBalanceRecieverAfter = await web3.eth.getBalance(toFixedHex(recipient, 20)) const feeBN = toBN(fee.toString()) balanceMixerAfter.should.be.eq.BN(toBN(balanceMixerBefore).sub(toBN(tokenDenomination))) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore)) diff --git a/test/ETHMixer.test.js b/test/ETHMixer.test.js index a2622af..9d01f22 100644 --- a/test/ETHMixer.test.js +++ b/test/ETHMixer.test.js @@ -23,6 +23,8 @@ const MerkleTree = require('../lib/MerkleTree') const rbigint = (nbytes) => snarkjs.bigInt.leBuff2int(crypto.randomBytes(nbytes)) const pedersenHash = (data) => circomlib.babyJub.unpackPoint(circomlib.pedersenHash.hash(data))[0] +const toFixedHex = (number, length = 32) => '0x' + bigInt(number).toString(16).padStart(length * 2, '0') +const getRandomRecipient = () => rbigint(20) function generateDeposit() { let deposit = { @@ -43,27 +45,12 @@ function BNArrayToStringArray(array) { return arrayToPrint } -function getRandomRecipient() { - let recipient = rbigint(20) - while (toHex(recipient.toString()).length !== 42) { - recipient = rbigint(20) - } - return recipient -} - function snarkVerify(proof) { proof = unstringifyBigInts2(proof) const verification_key = unstringifyBigInts2(require('../build/circuits/withdraw_verification_key.json')) return snarkjs['groth'].isValid(verification_key, proof, proof.publicSignals) } -function toFixedHex(number, length = 32) { - let str = bigInt(number).toString(16) - while (str.length < length * 2) str = '0' + str - str = '0x' + str - return str -} - contract('ETHMixer', accounts => { let mixer const sender = accounts[0] @@ -212,7 +199,7 @@ contract('ETHMixer', accounts => { const balanceMixerBefore = await web3.eth.getBalance(mixer.address) const balanceRelayerBefore = await web3.eth.getBalance(relayer) const balanceOperatorBefore = await web3.eth.getBalance(operator) - const balanceRecieverBefore = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverBefore = await web3.eth.getBalance(toFixedHex(recipient, 20)) let isSpent = await mixer.isSpent(toFixedHex(input.nullifierHash)) isSpent.should.be.equal(false) @@ -232,7 +219,7 @@ contract('ETHMixer', accounts => { const balanceMixerAfter = await web3.eth.getBalance(mixer.address) const balanceRelayerAfter = await web3.eth.getBalance(relayer) const balanceOperatorAfter = await web3.eth.getBalance(operator) - const balanceRecieverAfter = await web3.eth.getBalance(toHex(recipient.toString())) + const balanceRecieverAfter = await web3.eth.getBalance(toFixedHex(recipient, 20)) const feeBN = toBN(fee.toString()) balanceMixerAfter.should.be.eq.BN(toBN(balanceMixerBefore).sub(toBN(value))) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore)) From e83f528f6f1ea530b5a138b9e1b7481249475c9a Mon Sep 17 00:00:00 2001 From: poma Date: Thu, 28 Nov 2019 15:04:09 +0700 Subject: [PATCH 2/3] remove unused import --- test/ERC20Mixer.test.js | 2 +- test/ETHMixer.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ERC20Mixer.test.js b/test/ERC20Mixer.test.js index ad7e07b..8c8ec24 100644 --- a/test/ERC20Mixer.test.js +++ b/test/ERC20Mixer.test.js @@ -5,7 +5,7 @@ require('chai') .should() const fs = require('fs') -const { toBN, toHex } = require('web3-utils') +const { toBN } = require('web3-utils') const { takeSnapshot, revertSnapshot } = require('../lib/ganacheHelper') const Mixer = artifacts.require('./ERC20Mixer.sol') diff --git a/test/ETHMixer.test.js b/test/ETHMixer.test.js index 9d01f22..12af43f 100644 --- a/test/ETHMixer.test.js +++ b/test/ETHMixer.test.js @@ -5,7 +5,7 @@ require('chai') .should() const fs = require('fs') -const { toBN, toHex, randomHex } = require('web3-utils') +const { toBN, randomHex } = require('web3-utils') const { takeSnapshot, revertSnapshot } = require('../lib/ganacheHelper') const Mixer = artifacts.require('./ETHMixer.sol') From d9f4b1607664ffaa06c48a807f97d6047d9d6ffe Mon Sep 17 00:00:00 2001 From: Roman Semenov Date: Thu, 5 Dec 2019 22:52:01 +0700 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98d164e..0879f52 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Tornado mixer [![Build Status](https://travis-ci.org/peppersec/tornado-mixer.svg?branch=master)](https://travis-ci.org/peppersec/tornado-mixer) +# Tornado mixer [![Build Status](https://travis-ci.org/tornadocash/tornado-core.svg?branch=master)](https://travis-ci.org/tornadocash/tornado-core) Tornado is a non-custodial Ethereum and ERC20 mixer based on zkSNARKs. It improves transaction privacy by breaking the on-chain link between recipient and destination addresses. It uses a smart contract that accepts ETH deposits that can be withdrawn by a different address. Whenever ETH is withdrawn by the new address, there is no way to link the withdrawal to the deposit, ensuring complete privacy.