fix tests, reorder constructor parameters

This commit is contained in:
poma 2019-10-06 08:36:01 +03:00
parent a77c04ea5a
commit c889a88b4d
5 changed files with 27 additions and 18 deletions

View File

@ -39,9 +39,7 @@ You can see example usage in cli.js, it works both in console and in browser.
1. `npm install` 1. `npm install`
1. `cp .env.example .env` 1. `cp .env.example .env`
1. `npm run build:circuit` - this may take 10 minutes or more 1. `npm run build` - this may take 10 minutes or more
1. `npm run build:contract`
1. `npm run browserify`
1. `npx ganache-cli` 1. `npx ganache-cli`
1. `npm run test` - optionally run tests. It may fail for the first time, just run one more time. 1. `npm run test` - optionally run tests. It may fail for the first time, just run one more time.

View File

@ -18,11 +18,11 @@ contract ERC20Mixer is Mixer {
constructor( constructor(
address _verifier, address _verifier,
uint256 _denomination,
uint8 _merkleTreeHeight, uint8 _merkleTreeHeight,
uint256 _emptyElement, uint256 _emptyElement,
address payable _operator, address payable _operator,
address _token, address _token
uint256 _denomination
) Mixer(_verifier, _denomination, _merkleTreeHeight, _emptyElement, _operator) public { ) Mixer(_verifier, _denomination, _merkleTreeHeight, _emptyElement, _operator) public {
token = _token; token = _token;
} }

View File

@ -20,11 +20,11 @@ module.exports = function(deployer, network, accounts) {
const mixer = await deployer.deploy( const mixer = await deployer.deploy(
ERC20Mixer, ERC20Mixer,
verifier.address, verifier.address,
TOKEN_AMOUNT,
MERKLE_TREE_HEIGHT, MERKLE_TREE_HEIGHT,
EMPTY_ELEMENT, EMPTY_ELEMENT,
accounts[0], accounts[0],
token, token,
TOKEN_AMOUNT
) )
console.log('ERC20Mixer\'s address ', mixer.address) console.log('ERC20Mixer\'s address ', mixer.address)
}) })

View File

@ -52,11 +52,11 @@ contract('ERC20Mixer', accounts => {
const levels = MERKLE_TREE_HEIGHT || 16 const levels = MERKLE_TREE_HEIGHT || 16
const zeroValue = EMPTY_ELEMENT || 1337 const zeroValue = EMPTY_ELEMENT || 1337
let tokenDenomination = TOKEN_AMOUNT || '1000000000000000000' // 1 ether let tokenDenomination = TOKEN_AMOUNT || '1000000000000000000' // 1 ether
const value = ETH_AMOUNT || '1000000000000000000' // 1 ether
let snapshotId let snapshotId
let prefix = 'test' let prefix = 'test'
let tree let tree
const fee = bigInt(ETH_AMOUNT).shr(1) || bigInt(1e17) const fee = bigInt(ETH_AMOUNT).shr(1) || bigInt(1e17)
const refund = ETH_AMOUNT || '1000000000000000000' // 1 ether
const receiver = getRandomReceiver() const receiver = getRandomReceiver()
const relayer = accounts[1] const relayer = accounts[1]
let groth16 let groth16
@ -96,7 +96,7 @@ contract('ERC20Mixer', accounts => {
const commitment = 43 const commitment = 43
await token.approve(mixer.address, tokenDenomination) await token.approve(mixer.address, tokenDenomination)
let { logs } = await mixer.deposit(commitment, { value, from: sender }) let { logs } = await mixer.deposit(commitment, { from: sender })
logs[0].event.should.be.equal('Deposit') logs[0].event.should.be.equal('Deposit')
logs[0].args.commitment.should.be.eq.BN(toBN(commitment)) logs[0].args.commitment.should.be.eq.BN(toBN(commitment))
@ -114,9 +114,9 @@ contract('ERC20Mixer', accounts => {
const balanceUserBefore = await token.balanceOf(user) const balanceUserBefore = await token.balanceOf(user)
await token.approve(mixer.address, tokenDenomination, { from: user }) await token.approve(mixer.address, tokenDenomination, { from: user })
// Uncomment to measure gas usage // Uncomment to measure gas usage
// let gas = await mixer.deposit.estimateGas(toBN(deposit.commitment.toString()), { value, from: user, gasPrice: '0' }) // let gas = await mixer.deposit.estimateGas(toBN(deposit.commitment.toString()), { from: user, gasPrice: '0' })
// console.log('deposit gas:', gas) // console.log('deposit gas:', gas)
await mixer.deposit(toBN(deposit.commitment.toString()), { value, from: user, gasPrice: '0' }) await mixer.deposit(toBN(deposit.commitment.toString()), { from: user, gasPrice: '0' })
const balanceUserAfter = await token.balanceOf(user) const balanceUserAfter = await token.balanceOf(user)
balanceUserAfter.should.be.eq.BN(toBN(balanceUserBefore).sub(toBN(tokenDenomination))) balanceUserAfter.should.be.eq.BN(toBN(balanceUserBefore).sub(toBN(tokenDenomination)))
@ -130,6 +130,7 @@ contract('ERC20Mixer', accounts => {
relayer, relayer,
receiver, receiver,
fee, fee,
refund,
// private // private
nullifier: deposit.nullifier, nullifier: deposit.nullifier,
@ -152,7 +153,7 @@ contract('ERC20Mixer', accounts => {
// Uncomment to measure gas usage // Uncomment to measure gas usage
// gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' }) // gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' })
// console.log('withdraw gas:', gas) // console.log('withdraw gas:', gas)
const { logs } = await mixer.withdraw(proof, publicSignals, { from: relayer, gasPrice: '0' }) const { logs } = await mixer.withdraw(proof, publicSignals, { value: refund, from: relayer, gasPrice: '0' })
const balanceMixerAfter = await token.balanceOf(mixer.address) const balanceMixerAfter = await token.balanceOf(mixer.address)
const balanceRelayerAfter = await token.balanceOf(relayer) const balanceRelayerAfter = await token.balanceOf(relayer)
@ -164,7 +165,7 @@ contract('ERC20Mixer', accounts => {
balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore).add(feeBN)) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore).add(feeBN))
ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore)) ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore))
balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination).sub(feeBN))) balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination).sub(feeBN)))
ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(value))) ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(refund)))
logs[0].event.should.be.equal('Withdraw') logs[0].event.should.be.equal('Withdraw')
logs[0].args.nullifierHash.should.be.eq.BN(toBN(input.nullifierHash.toString())) logs[0].args.nullifierHash.should.be.eq.BN(toBN(input.nullifierHash.toString()))
@ -196,7 +197,7 @@ contract('ERC20Mixer', accounts => {
console.log('approve done') console.log('approve done')
const allowanceUser = await usdtToken.allowance(user, mixer.address) const allowanceUser = await usdtToken.allowance(user, mixer.address)
console.log('allowanceUser', allowanceUser.toString()) console.log('allowanceUser', allowanceUser.toString())
await mixer.deposit(toBN(deposit.commitment.toString()), { value, from: user, gasPrice: '0' }) await mixer.deposit(toBN(deposit.commitment.toString()), { from: user, gasPrice: '0' })
console.log('deposit done') console.log('deposit done')
const balanceUserAfter = await usdtToken.balanceOf(user) const balanceUserAfter = await usdtToken.balanceOf(user)
@ -212,6 +213,7 @@ contract('ERC20Mixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
// private // private
nullifier: deposit.nullifier, nullifier: deposit.nullifier,
@ -235,7 +237,7 @@ contract('ERC20Mixer', accounts => {
// Uncomment to measure gas usage // Uncomment to measure gas usage
// gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' }) // gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' })
// console.log('withdraw gas:', gas) // console.log('withdraw gas:', gas)
const { logs } = await mixer.withdraw(proof, publicSignals, { from: relayer, gasPrice: '0' }) const { logs } = await mixer.withdraw(proof, publicSignals, { value: refund, from: relayer, gasPrice: '0' })
const balanceMixerAfter = await usdtToken.balanceOf(mixer.address) const balanceMixerAfter = await usdtToken.balanceOf(mixer.address)
const balanceRelayerAfter = await usdtToken.balanceOf(relayer) const balanceRelayerAfter = await usdtToken.balanceOf(relayer)
@ -247,7 +249,7 @@ contract('ERC20Mixer', accounts => {
balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore)) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore))
ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore).add(feeBN)) ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore).add(feeBN))
balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination))) balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination)))
ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(value)).sub(feeBN)) ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(refund)).sub(feeBN))
logs[0].event.should.be.equal('Withdraw') logs[0].event.should.be.equal('Withdraw')
@ -276,7 +278,7 @@ contract('ERC20Mixer', accounts => {
console.log('balanceUserBefore', balanceUserBefore.toString()) console.log('balanceUserBefore', balanceUserBefore.toString())
await token.approve(mixer.address, tokenDenomination, { from: user }) await token.approve(mixer.address, tokenDenomination, { from: user })
console.log('approve done') console.log('approve done')
await mixer.deposit(toBN(deposit.commitment.toString()), { value, from: user, gasPrice: '0' }) await mixer.deposit(toBN(deposit.commitment.toString()), { from: user, gasPrice: '0' })
console.log('deposit done') console.log('deposit done')
const balanceUserAfter = await token.balanceOf(user) const balanceUserAfter = await token.balanceOf(user)
@ -292,6 +294,7 @@ contract('ERC20Mixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
// private // private
nullifier: deposit.nullifier, nullifier: deposit.nullifier,
@ -315,7 +318,7 @@ contract('ERC20Mixer', accounts => {
// Uncomment to measure gas usage // Uncomment to measure gas usage
// gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' }) // gas = await mixer.withdraw.estimateGas(proof, publicSignals, { from: relayer, gasPrice: '0' })
// console.log('withdraw gas:', gas) // console.log('withdraw gas:', gas)
const { logs } = await mixer.withdraw(proof, publicSignals, { from: relayer, gasPrice: '0' }) const { logs } = await mixer.withdraw(proof, publicSignals, { value: refund, from: relayer, gasPrice: '0' })
console.log('withdraw done') console.log('withdraw done')
const balanceMixerAfter = await token.balanceOf(mixer.address) const balanceMixerAfter = await token.balanceOf(mixer.address)
@ -328,7 +331,7 @@ contract('ERC20Mixer', accounts => {
balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore)) balanceRelayerAfter.should.be.eq.BN(toBN(balanceRelayerBefore))
ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore).add(feeBN)) ethBalanceOperatorAfter.should.be.eq.BN(toBN(ethBalanceOperatorBefore).add(feeBN))
balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination))) balanceRecieverAfter.should.be.eq.BN(toBN(balanceRecieverBefore).add(toBN(tokenDenomination)))
ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(value)).sub(feeBN)) ethBalanceRecieverAfter.should.be.eq.BN(toBN(ethBalanceRecieverBefore).add(toBN(refund)).sub(feeBN))
logs[0].event.should.be.equal('Withdraw') logs[0].event.should.be.equal('Withdraw')

View File

@ -68,6 +68,7 @@ contract('ETHMixer', accounts => {
let prefix = 'test' let prefix = 'test'
let tree let tree
const fee = bigInt(ETH_AMOUNT).shr(1) || bigInt(1e17) const fee = bigInt(ETH_AMOUNT).shr(1) || bigInt(1e17)
const refund = bigInt(0)
const receiver = getRandomReceiver() const receiver = getRandomReceiver()
const relayer = accounts[1] const relayer = accounts[1]
let groth16 let groth16
@ -144,6 +145,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,
@ -200,6 +202,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
// private // private
nullifier: deposit.nullifier, nullifier: deposit.nullifier,
@ -257,6 +260,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,
@ -282,6 +286,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,
@ -307,6 +312,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee: oneEtherFee, fee: oneEtherFee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,
@ -332,6 +338,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,
@ -360,6 +367,7 @@ contract('ETHMixer', accounts => {
relayer: operator, relayer: operator,
receiver, receiver,
fee, fee,
refund,
secret: deposit.secret, secret: deposit.secret,
pathElements: path_elements, pathElements: path_elements,
pathIndex: path_index, pathIndex: path_index,