fixed linting and EP transfering less than the total amount of ETH in the wallet

This commit is contained in:
Noah Khamliche 2021-08-31 13:05:54 -04:00 committed by Noah Khamliche
parent c9097f6e8b
commit 5d265360c4

View File

@ -1,19 +1,15 @@
import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20'; import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20';
import { import { blockchainTests, constants, expect, randomAddress } from '@0x/contracts-test-utils';
blockchainTests,
constants,
expect,
randomAddress,
} from '@0x/contracts-test-utils';
import { BigNumber, OwnableRevertErrors } from '@0x/utils'; import { BigNumber, OwnableRevertErrors } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper'; import { Web3Wrapper } from '@0x/web3-wrapper';
import { IOwnableFeatureContract, IZeroExContract} from '../../src/wrappers';
import { artifacts } from '../artifacts'; import { artifacts } from '../artifacts';
import { FundRecoveryFeatureContract } from '../generated-wrappers/fund_recovery_feature'; import { FundRecoveryFeatureContract } from '../generated-wrappers/fund_recovery_feature';
import { abis } from '../utils/abis'; import { abis } from '../utils/abis';
import { fullMigrateAsync } from '../utils/migration'; import { fullMigrateAsync } from '../utils/migration';
import { IOwnableFeatureContract, IZeroExContract } from '../../src/wrappers';
blockchainTests('FundRecovery', async env => { blockchainTests.only('FundRecovery', async env => {
let owner: string; let owner: string;
let zeroEx: IZeroExContract; let zeroEx: IZeroExContract;
let token: DummyERC20TokenContract; let token: DummyERC20TokenContract;
@ -39,55 +35,67 @@ blockchainTests('FundRecovery', async env => {
artifacts, artifacts,
); );
await new IOwnableFeatureContract(zeroEx.address, env.provider, env.txDefaults, abis) await new IOwnableFeatureContract(zeroEx.address, env.provider, env.txDefaults, abis)
.migrate(featureImpl.address, featureImpl.migrate().getABIEncodedTransactionData(), owner) .migrate(featureImpl.address, featureImpl.migrate().getABIEncodedTransactionData(), owner)
.awaitTransactionSuccessAsync({from: owner}); .awaitTransactionSuccessAsync({ from: owner });
}); });
blockchainTests.resets('Should delegatecall `transferTrappedTokensTo` from the exchange proxy', () => { blockchainTests.resets('Should delegatecall `transferTrappedTokensTo` from the exchange proxy', () => {
const ETH_TOKEN_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; const ETH_TOKEN_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
const recipientAddress = randomAddress(); const recipientAddress = randomAddress();
it('Tranfers an arbitrary ERC-20 Token', async () => { it('Tranfers an arbitrary ERC-20 Token', async () => {
const amountOut = Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18); const amountOut = Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18);
await zeroEx.transferTrappedTokensTo(token.address, amountOut, recipientAddress).awaitTransactionSuccessAsync({ from: owner }); await zeroEx
.transferTrappedTokensTo(token.address, amountOut, recipientAddress)
.awaitTransactionSuccessAsync({ from: owner });
const recipientAddressBalanceAferTransfer = await token.balanceOf(recipientAddress).callAsync(); const recipientAddressBalanceAferTransfer = await token.balanceOf(recipientAddress).callAsync();
return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(amountOut); return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(amountOut);
}); });
it('Amount -1 transfers entire balance of ERC-20', async () => { it('Amount -1 transfers entire balance of ERC-20', async () => {
const balanceOwner = await token.balanceOf(zeroEx.address).callAsync(); const balanceOwner = await token.balanceOf(zeroEx.address).callAsync();
await zeroEx.transferTrappedTokensTo(token.address, constants.MAX_UINT256 , recipientAddress).awaitTransactionSuccessAsync({ from: owner }); await zeroEx
.transferTrappedTokensTo(token.address, constants.MAX_UINT256, recipientAddress)
.awaitTransactionSuccessAsync({ from: owner });
const recipientAddressBalanceAferTransfer = await token.balanceOf(recipientAddress).callAsync(); const recipientAddressBalanceAferTransfer = await token.balanceOf(recipientAddress).callAsync();
return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(balanceOwner); return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(balanceOwner);
}); });
it('Amount -1 transfers entire balance of ETH', async () => { it('Amount -1 transfers entire balance of ETH', async () => {
const amountOut = new BigNumber(20); const amountOut = new BigNumber(20);
await env.web3Wrapper.awaitTransactionMinedAsync( await env.web3Wrapper.awaitTransactionMinedAsync(
await env.web3Wrapper.sendTransactionAsync( await env.web3Wrapper.sendTransactionAsync({
{ from: owner,
from: owner, to: zeroEx.address,
to: zeroEx.address, value: amountOut,
value: amountOut, }),
})); );
const balanceOwner = await env.web3Wrapper.getBalanceInWeiAsync(zeroEx.address); const balanceOwner = await env.web3Wrapper.getBalanceInWeiAsync(zeroEx.address);
await zeroEx.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, constants.MAX_UINT256 , recipientAddress).awaitTransactionSuccessAsync({ from: owner }); await zeroEx
.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, constants.MAX_UINT256, recipientAddress)
.awaitTransactionSuccessAsync({ from: owner });
const recipientAddressBalanceAferTransfer = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress); const recipientAddressBalanceAferTransfer = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress);
return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(balanceOwner); return expect(recipientAddressBalanceAferTransfer).to.bignumber.equal(balanceOwner);
}); });
it('Transfers ETH ', async () => { it('Transfers ETH ', async () => {
const amountOut = new BigNumber(20); const amountOut = new BigNumber(20);
await env.web3Wrapper.awaitTransactionMinedAsync( await env.web3Wrapper.awaitTransactionMinedAsync(
await env.web3Wrapper.sendTransactionAsync( await env.web3Wrapper.sendTransactionAsync({
{ from: owner,
from: owner, to: zeroEx.address,
to: zeroEx.address, value: amountOut,
value: amountOut, }),
})); );
const bal = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress); const bal = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress);
await zeroEx.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, amountOut , recipientAddress).awaitTransactionSuccessAsync({ from: owner }); await zeroEx
.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, amountOut.minus(1), recipientAddress)
.awaitTransactionSuccessAsync({ from: owner });
const recipientAddressBalance = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress); const recipientAddressBalance = await env.web3Wrapper.getBalanceInWeiAsync(recipientAddress);
return expect(recipientAddressBalance).to.bignumber.be.equal(bal.plus(amountOut)); return expect(recipientAddressBalance).to.bignumber.be.equal(amountOut.minus(1));
}); });
it('Feature `transferTrappedTokensTo` can only be called by owner', async () => { it('Feature `transferTrappedTokensTo` can only be called by owner', async () => {
const notOwner = randomAddress(); const notOwner = randomAddress();
return expect(zeroEx.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, constants.MAX_UINT256 , recipientAddress).awaitTransactionSuccessAsync({ from: notOwner })).to.revertWith(new OwnableRevertErrors.OnlyOwnerError(notOwner, owner)); return expect(
zeroEx
.transferTrappedTokensTo(ETH_TOKEN_ADDRESS, constants.MAX_UINT256, recipientAddress)
.awaitTransactionSuccessAsync({ from: notOwner }),
).to.revertWith(new OwnableRevertErrors.OnlyOwnerError(notOwner, owner));
}); });
}); });
}); });