Rename variables, create private validation methods in token wrappers
This commit is contained in:
		@@ -14,57 +14,53 @@ export class ERC20Wrapper {
 | 
			
		||||
    private _contractOwnerAddress: string;
 | 
			
		||||
    private _deployer: Deployer;
 | 
			
		||||
    private _provider: Provider;
 | 
			
		||||
    private _dummyERC20TokenContracts?: DummyERC20TokenContract[];
 | 
			
		||||
    private _erc20ProxyContract?: ERC20ProxyContract;
 | 
			
		||||
    private _dummyTokenContracts?: DummyERC20TokenContract[];
 | 
			
		||||
    private _proxyContract?: ERC20ProxyContract;
 | 
			
		||||
    constructor(deployer: Deployer, provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) {
 | 
			
		||||
        this._deployer = deployer;
 | 
			
		||||
        this._provider = provider;
 | 
			
		||||
        this._tokenOwnerAddresses = tokenOwnerAddresses;
 | 
			
		||||
        this._contractOwnerAddress = contractOwnerAddress;
 | 
			
		||||
    }
 | 
			
		||||
    public async deployDummyERC20TokensAsync(): Promise<DummyERC20TokenContract[]> {
 | 
			
		||||
    public async deployDummyTokensAsync(): Promise<DummyERC20TokenContract[]> {
 | 
			
		||||
        const tokenContractInstances = await Promise.all(
 | 
			
		||||
            _.map(_.range(constants.NUM_DUMMY_ERC20_TO_DEPLOY), () =>
 | 
			
		||||
            _.times(constants.NUM_DUMMY_ERC20_TO_DEPLOY, () =>
 | 
			
		||||
                this._deployer.deployAsync(ContractName.DummyERC20Token, constants.DUMMY_ERC20_TOKEN_ARGS),
 | 
			
		||||
            ),
 | 
			
		||||
        );
 | 
			
		||||
        this._dummyERC20TokenContracts = _.map(
 | 
			
		||||
        this._dummyTokenContracts = _.map(
 | 
			
		||||
            tokenContractInstances,
 | 
			
		||||
            tokenContractInstance =>
 | 
			
		||||
                new DummyERC20TokenContract(tokenContractInstance.abi, tokenContractInstance.address, this._provider),
 | 
			
		||||
        );
 | 
			
		||||
        return this._dummyERC20TokenContracts;
 | 
			
		||||
        return this._dummyTokenContracts;
 | 
			
		||||
    }
 | 
			
		||||
    public async deployERC20ProxyAsync(): Promise<ERC20ProxyContract> {
 | 
			
		||||
    public async deployProxyAsync(): Promise<ERC20ProxyContract> {
 | 
			
		||||
        const proxyContractInstance = await this._deployer.deployAsync(ContractName.ERC20Proxy);
 | 
			
		||||
        this._erc20ProxyContract = new ERC20ProxyContract(
 | 
			
		||||
        this._proxyContract = new ERC20ProxyContract(
 | 
			
		||||
            proxyContractInstance.abi,
 | 
			
		||||
            proxyContractInstance.address,
 | 
			
		||||
            this._provider,
 | 
			
		||||
        );
 | 
			
		||||
        return this._erc20ProxyContract;
 | 
			
		||||
        return this._proxyContract;
 | 
			
		||||
    }
 | 
			
		||||
    public async setBalancesAndAllowancesAsync() {
 | 
			
		||||
        if (_.isUndefined(this._dummyERC20TokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC20 tokens not yet deployed, please call "deployDummyERC20TokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        if (_.isUndefined(this._erc20ProxyContract)) {
 | 
			
		||||
            throw new Error('ERC20 proxy contract not yet deployed, please call "deployERC20ProxyAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        const setBalancePromises: any[] = [];
 | 
			
		||||
        const setAllowancePromises: any[] = [];
 | 
			
		||||
        _.forEach(this._dummyERC20TokenContracts, dummyERC20TokenContract => {
 | 
			
		||||
        this._validateDummyTokenContractsExistOrThrow();
 | 
			
		||||
        this._validateProxyContractExistsOrThrow();
 | 
			
		||||
        const setBalancePromises: Array<Promise<string>> = [];
 | 
			
		||||
        const setAllowancePromises: Array<Promise<string>> = [];
 | 
			
		||||
        _.forEach(this._dummyTokenContracts, dummyTokenContract => {
 | 
			
		||||
            _.forEach(this._tokenOwnerAddresses, tokenOwnerAddress => {
 | 
			
		||||
                setBalancePromises.push(
 | 
			
		||||
                    dummyERC20TokenContract.setBalance.sendTransactionAsync(
 | 
			
		||||
                    dummyTokenContract.setBalance.sendTransactionAsync(
 | 
			
		||||
                        tokenOwnerAddress,
 | 
			
		||||
                        constants.INITIAL_ERC20_BALANCE,
 | 
			
		||||
                        { from: this._contractOwnerAddress },
 | 
			
		||||
                    ),
 | 
			
		||||
                );
 | 
			
		||||
                setAllowancePromises.push(
 | 
			
		||||
                    dummyERC20TokenContract.approve.sendTransactionAsync(
 | 
			
		||||
                        (this._erc20ProxyContract as ERC20ProxyContract).address,
 | 
			
		||||
                    dummyTokenContract.approve.sendTransactionAsync(
 | 
			
		||||
                        (this._proxyContract as ERC20ProxyContract).address,
 | 
			
		||||
                        constants.INITIAL_ERC20_ALLOWANCE,
 | 
			
		||||
                        { from: tokenOwnerAddress },
 | 
			
		||||
                    ),
 | 
			
		||||
@@ -74,18 +70,16 @@ export class ERC20Wrapper {
 | 
			
		||||
        await Promise.all([...setBalancePromises, ...setAllowancePromises]);
 | 
			
		||||
    }
 | 
			
		||||
    public async getBalancesAsync(): Promise<ERC20BalancesByOwner> {
 | 
			
		||||
        if (_.isUndefined(this._dummyERC20TokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC20 tokens not yet deployed, please call "deployDummyTokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        this._validateDummyTokenContractsExistOrThrow();
 | 
			
		||||
        const balancesByOwner: ERC20BalancesByOwner = {};
 | 
			
		||||
        const balancePromises: any[] = [];
 | 
			
		||||
        const balancePromises: Array<Promise<BigNumber>> = [];
 | 
			
		||||
        const balanceInfo: Array<{ tokenOwnerAddress: string; tokenAddress: string }> = [];
 | 
			
		||||
        _.forEach(this._dummyERC20TokenContracts, dummyERC20TokenContract => {
 | 
			
		||||
        _.forEach(this._dummyTokenContracts, dummyTokenContract => {
 | 
			
		||||
            _.forEach(this._tokenOwnerAddresses, tokenOwnerAddress => {
 | 
			
		||||
                balancePromises.push(dummyERC20TokenContract.balanceOf.callAsync(tokenOwnerAddress));
 | 
			
		||||
                balancePromises.push(dummyTokenContract.balanceOf.callAsync(tokenOwnerAddress));
 | 
			
		||||
                balanceInfo.push({
 | 
			
		||||
                    tokenOwnerAddress,
 | 
			
		||||
                    tokenAddress: dummyERC20TokenContract.address,
 | 
			
		||||
                    tokenAddress: dummyTokenContract.address,
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
@@ -105,10 +99,17 @@ export class ERC20Wrapper {
 | 
			
		||||
        return this._tokenOwnerAddresses;
 | 
			
		||||
    }
 | 
			
		||||
    public getTokenAddresses(): string[] {
 | 
			
		||||
        const tokenAddresses = _.map(
 | 
			
		||||
            this._dummyERC20TokenContracts,
 | 
			
		||||
            dummyERC20TokenContract => dummyERC20TokenContract.address,
 | 
			
		||||
        );
 | 
			
		||||
        const tokenAddresses = _.map(this._dummyTokenContracts, dummyTokenContract => dummyTokenContract.address);
 | 
			
		||||
        return tokenAddresses;
 | 
			
		||||
    }
 | 
			
		||||
    private _validateDummyTokenContractsExistOrThrow() {
 | 
			
		||||
        if (_.isUndefined(this._dummyTokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC20 tokens not yet deployed, please call "deployDummyTokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    private _validateProxyContractExistsOrThrow() {
 | 
			
		||||
        if (_.isUndefined(this._proxyContract)) {
 | 
			
		||||
            throw new Error('ERC20 proxy contract not yet deployed, please call "deployProxyAsync"');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,84 +8,74 @@ import { DummyERC721TokenContract } from '../contract_wrappers/generated/dummy_e
 | 
			
		||||
import { ERC721ProxyContract } from '../contract_wrappers/generated/e_r_c721_proxy';
 | 
			
		||||
 | 
			
		||||
import { constants } from './constants';
 | 
			
		||||
import { ContractName, ERC721BalancesByOwner } from './types';
 | 
			
		||||
import { ContractName, ERC721TokenIdsByOwner } from './types';
 | 
			
		||||
 | 
			
		||||
export class ERC721Wrapper {
 | 
			
		||||
    private _tokenOwnerAddresses: string[];
 | 
			
		||||
    private _contractOwnerAddress: string;
 | 
			
		||||
    private _deployer: Deployer;
 | 
			
		||||
    private _provider: Provider;
 | 
			
		||||
    private _dummyERC721TokenContracts?: DummyERC721TokenContract[];
 | 
			
		||||
    private _erc721ProxyContract?: ERC721ProxyContract;
 | 
			
		||||
    private _initialERC721BalancesByOwner: ERC721BalancesByOwner = {};
 | 
			
		||||
    private _dummyTokenContracts?: DummyERC721TokenContract[];
 | 
			
		||||
    private _proxyContract?: ERC721ProxyContract;
 | 
			
		||||
    private _initialTokenIdsByOwner: ERC721TokenIdsByOwner = {};
 | 
			
		||||
    constructor(deployer: Deployer, provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) {
 | 
			
		||||
        this._deployer = deployer;
 | 
			
		||||
        this._provider = provider;
 | 
			
		||||
        this._tokenOwnerAddresses = tokenOwnerAddresses;
 | 
			
		||||
        this._contractOwnerAddress = contractOwnerAddress;
 | 
			
		||||
    }
 | 
			
		||||
    public async deployDummyERC721TokensAsync(): Promise<DummyERC721TokenContract[]> {
 | 
			
		||||
    public async deployDummyTokensAsync(): Promise<DummyERC721TokenContract[]> {
 | 
			
		||||
        const tokenContractInstances = await Promise.all(
 | 
			
		||||
            _.map(_.range(constants.NUM_DUMMY_ERC721_TO_DEPLOY), () =>
 | 
			
		||||
            _.times(constants.NUM_DUMMY_ERC721_TO_DEPLOY, () =>
 | 
			
		||||
                this._deployer.deployAsync(ContractName.DummyERC721Token, constants.DUMMY_ERC721_TOKEN_ARGS),
 | 
			
		||||
            ),
 | 
			
		||||
        );
 | 
			
		||||
        this._dummyERC721TokenContracts = _.map(
 | 
			
		||||
        this._dummyTokenContracts = _.map(
 | 
			
		||||
            tokenContractInstances,
 | 
			
		||||
            tokenContractInstance =>
 | 
			
		||||
                new DummyERC721TokenContract(tokenContractInstance.abi, tokenContractInstance.address, this._provider),
 | 
			
		||||
        );
 | 
			
		||||
        return this._dummyERC721TokenContracts;
 | 
			
		||||
        return this._dummyTokenContracts;
 | 
			
		||||
    }
 | 
			
		||||
    public async deployERC721ProxyAsync(): Promise<ERC721ProxyContract> {
 | 
			
		||||
    public async deployProxyAsync(): Promise<ERC721ProxyContract> {
 | 
			
		||||
        const proxyContractInstance = await this._deployer.deployAsync(ContractName.ERC721Proxy);
 | 
			
		||||
        this._erc721ProxyContract = new ERC721ProxyContract(
 | 
			
		||||
        this._proxyContract = new ERC721ProxyContract(
 | 
			
		||||
            proxyContractInstance.abi,
 | 
			
		||||
            proxyContractInstance.address,
 | 
			
		||||
            this._provider,
 | 
			
		||||
        );
 | 
			
		||||
        return this._erc721ProxyContract;
 | 
			
		||||
        return this._proxyContract;
 | 
			
		||||
    }
 | 
			
		||||
    public async setBalancesAndAllowancesAsync() {
 | 
			
		||||
        if (_.isUndefined(this._dummyERC721TokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC721 tokens not yet deployed, please call "deployDummyERC721TokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        if (_.isUndefined(this._erc721ProxyContract)) {
 | 
			
		||||
            throw new Error('ERC721 proxy contract not yet deployed, please call "deployERC721ProxyAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        const setBalancePromises: any[] = [];
 | 
			
		||||
        const setAllowancePromises: any[] = [];
 | 
			
		||||
        this._initialERC721BalancesByOwner = {};
 | 
			
		||||
        _.forEach(this._dummyERC721TokenContracts, dummyERC721TokenContract => {
 | 
			
		||||
        this._validateDummyTokenContractsExistOrThrow();
 | 
			
		||||
        this._validateProxyContractExistsOrThrow();
 | 
			
		||||
        const setBalancePromises: Array<Promise<string>> = [];
 | 
			
		||||
        const setAllowancePromises: Array<Promise<string>> = [];
 | 
			
		||||
        this._initialTokenIdsByOwner = {};
 | 
			
		||||
        _.forEach(this._dummyTokenContracts, dummyTokenContract => {
 | 
			
		||||
            _.forEach(this._tokenOwnerAddresses, tokenOwnerAddress => {
 | 
			
		||||
                _.forEach(_.range(constants.NUM_ERC721_TOKENS_TO_MINT), () => {
 | 
			
		||||
                    const tokenId = ZeroEx.generatePseudoRandomSalt();
 | 
			
		||||
                    setBalancePromises.push(
 | 
			
		||||
                        dummyERC721TokenContract.mint.sendTransactionAsync(tokenOwnerAddress, tokenId, {
 | 
			
		||||
                        dummyTokenContract.mint.sendTransactionAsync(tokenOwnerAddress, tokenId, {
 | 
			
		||||
                            from: this._contractOwnerAddress,
 | 
			
		||||
                        }),
 | 
			
		||||
                    );
 | 
			
		||||
                    if (_.isUndefined(this._initialERC721BalancesByOwner[tokenOwnerAddress])) {
 | 
			
		||||
                        this._initialERC721BalancesByOwner[tokenOwnerAddress] = {
 | 
			
		||||
                            [dummyERC721TokenContract.address]: [],
 | 
			
		||||
                    if (_.isUndefined(this._initialTokenIdsByOwner[tokenOwnerAddress])) {
 | 
			
		||||
                        this._initialTokenIdsByOwner[tokenOwnerAddress] = {
 | 
			
		||||
                            [dummyTokenContract.address]: [],
 | 
			
		||||
                        };
 | 
			
		||||
                    }
 | 
			
		||||
                    if (
 | 
			
		||||
                        _.isUndefined(
 | 
			
		||||
                            this._initialERC721BalancesByOwner[tokenOwnerAddress][dummyERC721TokenContract.address],
 | 
			
		||||
                        )
 | 
			
		||||
                    ) {
 | 
			
		||||
                        this._initialERC721BalancesByOwner[tokenOwnerAddress][dummyERC721TokenContract.address] = [];
 | 
			
		||||
                    if (_.isUndefined(this._initialTokenIdsByOwner[tokenOwnerAddress][dummyTokenContract.address])) {
 | 
			
		||||
                        this._initialTokenIdsByOwner[tokenOwnerAddress][dummyTokenContract.address] = [];
 | 
			
		||||
                    }
 | 
			
		||||
                    this._initialERC721BalancesByOwner[tokenOwnerAddress][dummyERC721TokenContract.address].push(
 | 
			
		||||
                        tokenId,
 | 
			
		||||
                    );
 | 
			
		||||
                    this._initialTokenIdsByOwner[tokenOwnerAddress][dummyTokenContract.address].push(tokenId);
 | 
			
		||||
                });
 | 
			
		||||
                const approval = true;
 | 
			
		||||
                const shouldApprove = true;
 | 
			
		||||
                setAllowancePromises.push(
 | 
			
		||||
                    dummyERC721TokenContract.setApprovalForAll.sendTransactionAsync(
 | 
			
		||||
                        (this._erc721ProxyContract as ERC721ProxyContract).address,
 | 
			
		||||
                        approval,
 | 
			
		||||
                    dummyTokenContract.setApprovalForAll.sendTransactionAsync(
 | 
			
		||||
                        (this._proxyContract as ERC721ProxyContract).address,
 | 
			
		||||
                        shouldApprove,
 | 
			
		||||
                        { from: tokenOwnerAddress },
 | 
			
		||||
                    ),
 | 
			
		||||
                );
 | 
			
		||||
@@ -93,28 +83,22 @@ export class ERC721Wrapper {
 | 
			
		||||
        });
 | 
			
		||||
        await Promise.all([...setBalancePromises, ...setAllowancePromises]);
 | 
			
		||||
    }
 | 
			
		||||
    public async getBalancesAsync(): Promise<ERC721BalancesByOwner> {
 | 
			
		||||
        if (_.isUndefined(this._dummyERC721TokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC721 tokens not yet deployed, please call "deployDummyERC721TokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
        if (_.keys(this._initialERC721BalancesByOwner).length === 0) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                'Dummy ERC721 balances and allowances not yet set, please call "setBalancesAndAllowancesAsync"',
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        const balancesByOwner: ERC721BalancesByOwner = {};
 | 
			
		||||
        const tokenOwnerPromises: any[] = [];
 | 
			
		||||
    public async getBalancesAsync(): Promise<ERC721TokenIdsByOwner> {
 | 
			
		||||
        this._validateDummyTokenContractsExistOrThrow();
 | 
			
		||||
        this._validateBalancesAndAllowancesSetOrThrow();
 | 
			
		||||
        const tokenIdsByOwner: ERC721TokenIdsByOwner = {};
 | 
			
		||||
        const tokenOwnerPromises: Array<Promise<string>> = [];
 | 
			
		||||
        const tokenInfo: Array<{ tokenId: BigNumber; tokenAddress: string }> = [];
 | 
			
		||||
        _.forEach(this._dummyERC721TokenContracts, dummyERC721TokenContract => {
 | 
			
		||||
        _.forEach(this._dummyTokenContracts, dummyTokenContract => {
 | 
			
		||||
            _.forEach(this._tokenOwnerAddresses, tokenOwnerAddress => {
 | 
			
		||||
                const initialTokenOwnerIds = this._initialERC721BalancesByOwner[tokenOwnerAddress][
 | 
			
		||||
                    dummyERC721TokenContract.address
 | 
			
		||||
                const initialTokenOwnerIds = this._initialTokenIdsByOwner[tokenOwnerAddress][
 | 
			
		||||
                    dummyTokenContract.address
 | 
			
		||||
                ];
 | 
			
		||||
                _.forEach(initialTokenOwnerIds, tokenId => {
 | 
			
		||||
                    tokenOwnerPromises.push(dummyERC721TokenContract.ownerOf.callAsync(tokenId));
 | 
			
		||||
                    tokenOwnerPromises.push(dummyTokenContract.ownerOf.callAsync(tokenId));
 | 
			
		||||
                    tokenInfo.push({
 | 
			
		||||
                        tokenId,
 | 
			
		||||
                        tokenAddress: dummyERC721TokenContract.address,
 | 
			
		||||
                        tokenAddress: dummyTokenContract.address,
 | 
			
		||||
                    });
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
@@ -123,26 +107,40 @@ export class ERC721Wrapper {
 | 
			
		||||
        _.forEach(tokenOwnerAddresses, (tokenOwnerAddress, ownerIndex) => {
 | 
			
		||||
            const tokenAddress = tokenInfo[ownerIndex].tokenAddress;
 | 
			
		||||
            const tokenId = tokenInfo[ownerIndex].tokenId;
 | 
			
		||||
            if (_.isUndefined(balancesByOwner[tokenOwnerAddress])) {
 | 
			
		||||
                balancesByOwner[tokenOwnerAddress] = {
 | 
			
		||||
            if (_.isUndefined(tokenIdsByOwner[tokenOwnerAddress])) {
 | 
			
		||||
                tokenIdsByOwner[tokenOwnerAddress] = {
 | 
			
		||||
                    [tokenAddress]: [],
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            if (_.isUndefined(balancesByOwner[tokenOwnerAddress][tokenAddress])) {
 | 
			
		||||
                balancesByOwner[tokenOwnerAddress][tokenAddress] = [];
 | 
			
		||||
            if (_.isUndefined(tokenIdsByOwner[tokenOwnerAddress][tokenAddress])) {
 | 
			
		||||
                tokenIdsByOwner[tokenOwnerAddress][tokenAddress] = [];
 | 
			
		||||
            }
 | 
			
		||||
            balancesByOwner[tokenOwnerAddress][tokenAddress].push(tokenId);
 | 
			
		||||
            tokenIdsByOwner[tokenOwnerAddress][tokenAddress].push(tokenId);
 | 
			
		||||
        });
 | 
			
		||||
        return balancesByOwner;
 | 
			
		||||
        return tokenIdsByOwner;
 | 
			
		||||
    }
 | 
			
		||||
    public getTokenOwnerAddresses(): string[] {
 | 
			
		||||
        return this._tokenOwnerAddresses;
 | 
			
		||||
    }
 | 
			
		||||
    public getTokenAddresses(): string[] {
 | 
			
		||||
        const tokenAddresses = _.map(
 | 
			
		||||
            this._dummyERC721TokenContracts,
 | 
			
		||||
            dummyERC721TokenContract => dummyERC721TokenContract.address,
 | 
			
		||||
        );
 | 
			
		||||
        const tokenAddresses = _.map(this._dummyTokenContracts, dummyTokenContract => dummyTokenContract.address);
 | 
			
		||||
        return tokenAddresses;
 | 
			
		||||
    }
 | 
			
		||||
    private _validateDummyTokenContractsExistOrThrow() {
 | 
			
		||||
        if (_.isUndefined(this._dummyTokenContracts)) {
 | 
			
		||||
            throw new Error('Dummy ERC721 tokens not yet deployed, please call "deployDummyTokensAsync"');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    private _validateProxyContractExistsOrThrow() {
 | 
			
		||||
        if (_.isUndefined(this._proxyContract)) {
 | 
			
		||||
            throw new Error('ERC721 proxy contract not yet deployed, please call "deployProxyAsync"');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    private _validateBalancesAndAllowancesSetOrThrow() {
 | 
			
		||||
        if (_.keys(this._initialTokenIdsByOwner).length === 0) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                'Dummy ERC721 balances and allowances not yet set, please call "setBalancesAndAllowancesAsync"',
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ export interface ERC20BalancesByOwner {
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ERC721BalancesByOwner {
 | 
			
		||||
export interface ERC721TokenIdsByOwner {
 | 
			
		||||
    [ownerAddress: string]: {
 | 
			
		||||
        [tokenAddress: string]: BigNumber[];
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ describe('AssetProxyDispatcher', () => {
 | 
			
		||||
    let makerAddress: string;
 | 
			
		||||
    let takerAddress: string;
 | 
			
		||||
 | 
			
		||||
    let zrx: DummyERC20TokenContract;
 | 
			
		||||
    let zrxToken: DummyERC20TokenContract;
 | 
			
		||||
    let erc20Proxy: ERC20ProxyContract;
 | 
			
		||||
    let erc721Proxy: ERC721ProxyContract;
 | 
			
		||||
    let assetProxyDispatcher: AssetProxyDispatcherContract;
 | 
			
		||||
@@ -46,11 +46,11 @@ describe('AssetProxyDispatcher', () => {
 | 
			
		||||
        erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
        erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
 | 
			
		||||
        [zrx] = await erc20Wrapper.deployDummyERC20TokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync();
 | 
			
		||||
        [zrxToken] = await erc20Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc20Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployProxyAsync();
 | 
			
		||||
 | 
			
		||||
        const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
 | 
			
		||||
        assetProxyDispatcher = new AssetProxyDispatcherContract(
 | 
			
		||||
@@ -230,7 +230,7 @@ describe('AssetProxyDispatcher', () => {
 | 
			
		||||
                { from: owner },
 | 
			
		||||
            );
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const erc20Balances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            const amount = new BigNumber(10);
 | 
			
		||||
@@ -243,17 +243,17 @@ describe('AssetProxyDispatcher', () => {
 | 
			
		||||
            );
 | 
			
		||||
            // Verify transfer was successful
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(amount),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(amount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].add(amount),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].add(amount),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should throw if dispatching to unregistered proxy', async () => {
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const erc20Balances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            const amount = new BigNumber(10);
 | 
			
		||||
@@ -278,7 +278,7 @@ describe('AssetProxyDispatcher', () => {
 | 
			
		||||
                { from: owner },
 | 
			
		||||
            );
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const erc20Balances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            const amount = new BigNumber(10);
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
    let makerAddress: string;
 | 
			
		||||
    let takerAddress: string;
 | 
			
		||||
 | 
			
		||||
    let zrx: DummyERC20TokenContract;
 | 
			
		||||
    let zrxToken: DummyERC20TokenContract;
 | 
			
		||||
    let erc721Token: DummyERC721TokenContract;
 | 
			
		||||
    let erc20Proxy: ERC20ProxyContract;
 | 
			
		||||
    let erc721Proxy: ERC721ProxyContract;
 | 
			
		||||
@@ -51,15 +51,15 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
        erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
        erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
 | 
			
		||||
        [zrx] = await erc20Wrapper.deployDummyERC20TokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync();
 | 
			
		||||
        [zrxToken] = await erc20Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc20Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
        await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, {
 | 
			
		||||
            from: owner,
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyERC721TokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync();
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc721Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
        const erc721Balances = await erc721Wrapper.getBalancesAsync();
 | 
			
		||||
        erc721MakerTokenId = erc721Balances[makerAddress][erc721Token.address][0];
 | 
			
		||||
@@ -76,7 +76,7 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
    describe('Transfer Proxy - ERC20', () => {
 | 
			
		||||
        it('should successfully transfer tokens', async () => {
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const erc20Balances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            const amount = new BigNumber(10);
 | 
			
		||||
@@ -89,17 +89,17 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
            );
 | 
			
		||||
            // Verify transfer was successful
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(amount),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(amount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].add(amount),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].add(amount),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should do nothing if transferring 0 amount of a token', async () => {
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const erc20Balances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            const amount = new BigNumber(0);
 | 
			
		||||
@@ -112,21 +112,21 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
            );
 | 
			
		||||
            // Verify transfer was successful
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address],
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address],
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address],
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address],
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should throw if allowances are too low', async () => {
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Create allowance less than transfer amount. Set allowance on proxy.
 | 
			
		||||
            const allowance = new BigNumber(0);
 | 
			
		||||
            const transferAmount = new BigNumber(10);
 | 
			
		||||
            await zrx.approve.sendTransactionAsync(erc20Proxy.address, allowance, {
 | 
			
		||||
            await zrxToken.approve.sendTransactionAsync(erc20Proxy.address, allowance, {
 | 
			
		||||
                from: makerAddress,
 | 
			
		||||
            });
 | 
			
		||||
            // Perform a transfer; expect this to fail.
 | 
			
		||||
@@ -143,7 +143,7 @@ describe('Asset Transfer Proxies', () => {
 | 
			
		||||
 | 
			
		||||
        it('should throw if requesting address is not authorized', async () => {
 | 
			
		||||
            // Construct metadata for ERC20 proxy
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address);
 | 
			
		||||
            const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrxToken.address);
 | 
			
		||||
            // Perform a transfer from makerAddress to takerAddress
 | 
			
		||||
            const amount = new BigNumber(10);
 | 
			
		||||
            return expect(
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,6 @@ import {
 | 
			
		||||
    AssetProxyId,
 | 
			
		||||
    ContractName,
 | 
			
		||||
    ERC20BalancesByOwner,
 | 
			
		||||
    ERC721BalancesByOwner,
 | 
			
		||||
    ExchangeContractErrs,
 | 
			
		||||
    SignedOrder,
 | 
			
		||||
} from '../../src/utils/types';
 | 
			
		||||
@@ -48,7 +47,7 @@ describe('Exchange core', () => {
 | 
			
		||||
 | 
			
		||||
    let erc20TokenA: DummyERC20TokenContract;
 | 
			
		||||
    let erc20TokenB: DummyERC20TokenContract;
 | 
			
		||||
    let zrx: DummyERC20TokenContract;
 | 
			
		||||
    let zrxToken: DummyERC20TokenContract;
 | 
			
		||||
    let erc721Token: DummyERC721TokenContract;
 | 
			
		||||
    let exchange: ExchangeContract;
 | 
			
		||||
    let assetProxyDispatcher: AssetProxyDispatcherContract;
 | 
			
		||||
@@ -77,12 +76,12 @@ describe('Exchange core', () => {
 | 
			
		||||
        erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
        erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
 | 
			
		||||
        [erc20TokenA, erc20TokenB, zrx] = await erc20Wrapper.deployDummyERC20TokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync();
 | 
			
		||||
        [erc20TokenA, erc20TokenB, zrxToken] = await erc20Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc20Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyERC721TokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync();
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc721Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
        const erc721Balances = await erc721Wrapper.getBalancesAsync();
 | 
			
		||||
        erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address];
 | 
			
		||||
@@ -117,7 +116,7 @@ describe('Exchange core', () => {
 | 
			
		||||
 | 
			
		||||
        const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
 | 
			
		||||
            assetProxyDispatcher.address,
 | 
			
		||||
            assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
            assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
        ]);
 | 
			
		||||
        exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
 | 
			
		||||
        await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
 | 
			
		||||
@@ -227,8 +226,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFeePaid),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -236,11 +235,11 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFeePaid),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -280,8 +279,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFeePaid),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -289,11 +288,11 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFeePaid),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -333,8 +332,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFeePaid),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -342,11 +341,11 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFeePaid),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -388,8 +387,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFeePaid),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -397,11 +396,11 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFeePaid),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -424,8 +423,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(signedOrder.takerAssetAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(signedOrder.makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(signedOrder.makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(signedOrder.takerAssetAmount),
 | 
			
		||||
@@ -433,11 +432,13 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(signedOrder.makerAssetAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(signedOrder.takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(signedOrder.takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(signedOrder.makerFee.add(signedOrder.takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(
 | 
			
		||||
                    signedOrder.makerFee.add(signedOrder.takerFee),
 | 
			
		||||
                ),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -768,8 +769,8 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(fillTakerAssetAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(fillTakerAssetAmount),
 | 
			
		||||
@@ -777,11 +778,11 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(fillMakerAssetAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
@@ -949,14 +950,16 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(signedOrder.makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(signedOrder.makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(signedOrder.takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(signedOrder.takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(signedOrder.makerFee.add(signedOrder.takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(
 | 
			
		||||
                    signedOrder.makerFee.add(signedOrder.takerFee),
 | 
			
		||||
                ),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -987,14 +990,16 @@ describe('Exchange core', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultMakerAssetAddress].minus(signedOrder.makerAssetAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(signedOrder.makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(signedOrder.makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(signedOrder.takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(signedOrder.takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(signedOrder.makerFee.add(signedOrder.takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(
 | 
			
		||||
                    signedOrder.makerFee.add(signedOrder.takerFee),
 | 
			
		||||
                ),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -19,13 +19,7 @@ import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
 | 
			
		||||
import { ERC721Wrapper } from '../../src/utils/erc721_wrapper';
 | 
			
		||||
import { ExchangeWrapper } from '../../src/utils/exchange_wrapper';
 | 
			
		||||
import { OrderFactory } from '../../src/utils/order_factory';
 | 
			
		||||
import {
 | 
			
		||||
    AssetProxyId,
 | 
			
		||||
    ContractName,
 | 
			
		||||
    ERC20BalancesByOwner,
 | 
			
		||||
    ERC721BalancesByOwner,
 | 
			
		||||
    SignedOrder,
 | 
			
		||||
} from '../../src/utils/types';
 | 
			
		||||
import { AssetProxyId, ContractName, ERC20BalancesByOwner, SignedOrder } from '../../src/utils/types';
 | 
			
		||||
import { chaiSetup } from '../utils/chai_setup';
 | 
			
		||||
import { deployer } from '../utils/deployer';
 | 
			
		||||
import { provider, web3Wrapper } from '../utils/web3_wrapper';
 | 
			
		||||
@@ -42,7 +36,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
 | 
			
		||||
    let erc20TokenA: DummyERC20TokenContract;
 | 
			
		||||
    let erc20TokenB: DummyERC20TokenContract;
 | 
			
		||||
    let zrx: DummyERC20TokenContract;
 | 
			
		||||
    let zrxToken: DummyERC20TokenContract;
 | 
			
		||||
    let erc721Token: DummyERC721TokenContract;
 | 
			
		||||
    let exchange: ExchangeContract;
 | 
			
		||||
    let assetProxyDispatcher: AssetProxyDispatcherContract;
 | 
			
		||||
@@ -70,12 +64,12 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
        erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
        erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner);
 | 
			
		||||
 | 
			
		||||
        [erc20TokenA, erc20TokenB, zrx] = await erc20Wrapper.deployDummyERC20TokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync();
 | 
			
		||||
        [erc20TokenA, erc20TokenB, zrxToken] = await erc20Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc20Proxy = await erc20Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc20Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyERC721TokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync();
 | 
			
		||||
        [erc721Token] = await erc721Wrapper.deployDummyTokensAsync();
 | 
			
		||||
        erc721Proxy = await erc721Wrapper.deployProxyAsync();
 | 
			
		||||
        await erc721Wrapper.setBalancesAndAllowancesAsync();
 | 
			
		||||
        const erc721Balances = await erc721Wrapper.getBalancesAsync();
 | 
			
		||||
        erc721MakerAssetId = erc721Balances[makerAddress][erc721Token.address][0];
 | 
			
		||||
@@ -110,7 +104,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
 | 
			
		||||
        const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
 | 
			
		||||
            assetProxyDispatcher.address,
 | 
			
		||||
            assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
            assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
        ]);
 | 
			
		||||
        exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
 | 
			
		||||
        await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
 | 
			
		||||
@@ -169,8 +163,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -178,11 +172,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -237,8 +231,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
            expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -246,11 +240,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
            expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
            );
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -303,11 +297,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should not change erc20Balances if makerAssetAddress is ZRX, makerAssetAmount + makerFee > maker balance', async () => {
 | 
			
		||||
            const makerZRXBalance = new BigNumber(erc20Balances[makerAddress][zrx.address]);
 | 
			
		||||
            const makerZRXBalance = new BigNumber(erc20Balances[makerAddress][zrxToken.address]);
 | 
			
		||||
            const signedOrder = orderFactory.newSignedOrder({
 | 
			
		||||
                makerAssetAmount: makerZRXBalance,
 | 
			
		||||
                makerFee: new BigNumber(1),
 | 
			
		||||
                makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
                makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
            });
 | 
			
		||||
            await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
@@ -315,11 +309,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should not change erc20Balances if makerAssetAddress is ZRX, makerAssetAmount + makerFee > maker allowance', async () => {
 | 
			
		||||
            const makerZRXAllowance = await zrx.allowance.callAsync(makerAddress, erc20Proxy.address);
 | 
			
		||||
            const makerZRXAllowance = await zrxToken.allowance.callAsync(makerAddress, erc20Proxy.address);
 | 
			
		||||
            const signedOrder = orderFactory.newSignedOrder({
 | 
			
		||||
                makerAssetAmount: new BigNumber(makerZRXAllowance),
 | 
			
		||||
                makerFee: new BigNumber(1),
 | 
			
		||||
                makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
                makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
            });
 | 
			
		||||
            await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
@@ -327,11 +321,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should not change erc20Balances if takerAssetAddress is ZRX, takerAssetAmount + takerFee > taker balance', async () => {
 | 
			
		||||
            const takerZRXBalance = new BigNumber(erc20Balances[takerAddress][zrx.address]);
 | 
			
		||||
            const takerZRXBalance = new BigNumber(erc20Balances[takerAddress][zrxToken.address]);
 | 
			
		||||
            const signedOrder = orderFactory.newSignedOrder({
 | 
			
		||||
                takerAssetAmount: takerZRXBalance,
 | 
			
		||||
                takerFee: new BigNumber(1),
 | 
			
		||||
                takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
                takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
            });
 | 
			
		||||
            await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
@@ -339,11 +333,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should not change erc20Balances if takerAssetAddress is ZRX, takerAssetAmount + takerFee > taker allowance', async () => {
 | 
			
		||||
            const takerZRXAllowance = await zrx.allowance.callAsync(takerAddress, erc20Proxy.address);
 | 
			
		||||
            const takerZRXAllowance = await zrxToken.allowance.callAsync(takerAddress, erc20Proxy.address);
 | 
			
		||||
            const signedOrder = orderFactory.newSignedOrder({
 | 
			
		||||
                takerAssetAmount: new BigNumber(takerZRXAllowance),
 | 
			
		||||
                takerFee: new BigNumber(1),
 | 
			
		||||
                takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address),
 | 
			
		||||
                takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
            });
 | 
			
		||||
            await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
 | 
			
		||||
            const newBalances = await erc20Wrapper.getBalancesAsync();
 | 
			
		||||
@@ -409,16 +403,20 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
 | 
			
		||||
                        takerAssetFillAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(makerFee);
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
 | 
			
		||||
                        makerAssetFilledAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        takerAssetAddress
 | 
			
		||||
                    ].minus(takerAssetFillAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(takerFee);
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(makerFee.add(takerFee));
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@@ -454,16 +452,20 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
 | 
			
		||||
                        takerAssetFillAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(makerFee);
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
 | 
			
		||||
                        makerAssetFilledAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        takerAssetAddress
 | 
			
		||||
                    ].minus(takerAssetFillAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(takerFee);
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(makerFee.add(takerFee));
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@@ -515,16 +517,20 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
 | 
			
		||||
                        takerAssetFillAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(makerFee);
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
 | 
			
		||||
                        makerAssetFilledAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        takerAssetAddress
 | 
			
		||||
                    ].minus(takerAssetFillAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(takerFee);
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(makerFee.add(takerFee));
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@@ -566,16 +572,20 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
 | 
			
		||||
                        takerAssetFillAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(makerFee);
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
 | 
			
		||||
                        makerAssetFilledAmount,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        takerAssetAddress
 | 
			
		||||
                    ].minus(takerAssetFillAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(takerFee);
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(makerFee.add(takerFee));
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@@ -611,8 +621,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
                expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -620,11 +630,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
                expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -637,7 +647,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].add(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
@@ -646,11 +656,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].minus(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(signedOrder.makerFee.add(signedOrder.takerFee));
 | 
			
		||||
                });
 | 
			
		||||
                await exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
 | 
			
		||||
@@ -664,7 +674,9 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            it('should throw when an signedOrder does not use the same takerAssetAddress', async () => {
 | 
			
		||||
                signedOrders = [
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                    orderFactory.newSignedOrder({ takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address) }),
 | 
			
		||||
                    orderFactory.newSignedOrder({
 | 
			
		||||
                        takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
                    }),
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
@@ -698,8 +710,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
                expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
 | 
			
		||||
@@ -707,11 +719,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
                expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -724,7 +736,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].add(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
@@ -733,11 +745,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].minus(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(signedOrder.makerFee.add(signedOrder.takerFee));
 | 
			
		||||
                });
 | 
			
		||||
                await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
 | 
			
		||||
@@ -751,7 +763,9 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            it('should throw when a signedOrder does not use the same takerAssetAddress', async () => {
 | 
			
		||||
                signedOrders = [
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                    orderFactory.newSignedOrder({ takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address) }),
 | 
			
		||||
                    orderFactory.newSignedOrder({
 | 
			
		||||
                        takerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
                    }),
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
@@ -785,8 +799,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress].add(makerAmountBought),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
                expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress].minus(makerAmountBought),
 | 
			
		||||
@@ -794,11 +808,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
                expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -811,7 +825,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].add(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
@@ -820,11 +834,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].minus(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(signedOrder.makerFee.add(signedOrder.takerFee));
 | 
			
		||||
                });
 | 
			
		||||
                await exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
 | 
			
		||||
@@ -838,7 +852,9 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            it('should throw when an signedOrder does not use the same makerAssetAddress', async () => {
 | 
			
		||||
                signedOrders = [
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                    orderFactory.newSignedOrder({ makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address) }),
 | 
			
		||||
                    orderFactory.newSignedOrder({
 | 
			
		||||
                        makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
                    }),
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
@@ -872,8 +888,8 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress].add(makerAmountBought),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address].minus(makerFee),
 | 
			
		||||
                expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress].minus(makerAmountBought),
 | 
			
		||||
@@ -881,11 +897,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address].minus(takerFee),
 | 
			
		||||
                expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
 | 
			
		||||
                );
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrx.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -898,7 +914,7 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].add(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[makerAddress][zrx.address] = erc20Balances[makerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.makerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
@@ -907,11 +923,11 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
                    erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
 | 
			
		||||
                        defaultTakerAssetAddress
 | 
			
		||||
                    ].minus(signedOrder.takerAssetAmount);
 | 
			
		||||
                    erc20Balances[takerAddress][zrx.address] = erc20Balances[takerAddress][zrx.address].minus(
 | 
			
		||||
                    erc20Balances[takerAddress][zrxToken.address] = erc20Balances[takerAddress][zrxToken.address].minus(
 | 
			
		||||
                        signedOrder.takerFee,
 | 
			
		||||
                    );
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrx.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrx.address
 | 
			
		||||
                    erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
 | 
			
		||||
                        zrxToken.address
 | 
			
		||||
                    ].add(signedOrder.makerFee.add(signedOrder.takerFee));
 | 
			
		||||
                });
 | 
			
		||||
                await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
 | 
			
		||||
@@ -925,7 +941,9 @@ describe('Exchange wrappers', () => {
 | 
			
		||||
            it('should throw when a signedOrder does not use the same makerAssetAddress', async () => {
 | 
			
		||||
                signedOrders = [
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                    orderFactory.newSignedOrder({ makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrx.address) }),
 | 
			
		||||
                    orderFactory.newSignedOrder({
 | 
			
		||||
                        makerAssetData: assetProxyUtils.encodeERC20ProxyData(zrxToken.address),
 | 
			
		||||
                    }),
 | 
			
		||||
                    orderFactory.newSignedOrder(),
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ describe('ZRXToken', () => {
 | 
			
		||||
 | 
			
		||||
    let MAX_UINT: BigNumber;
 | 
			
		||||
 | 
			
		||||
    let zrx: ZRXTokenContract;
 | 
			
		||||
    let zrxToken: ZRXTokenContract;
 | 
			
		||||
    let zrxAddress: string;
 | 
			
		||||
 | 
			
		||||
    before(async () => {
 | 
			
		||||
@@ -35,8 +35,8 @@ describe('ZRXToken', () => {
 | 
			
		||||
            networkId: constants.TESTRPC_NETWORK_ID,
 | 
			
		||||
        });
 | 
			
		||||
        const zrxInstance = await deployer.deployAsync(ContractName.ZRXToken);
 | 
			
		||||
        zrx = new ZRXTokenContract(zrxInstance.abi, zrxInstance.address, provider);
 | 
			
		||||
        zrxAddress = zrx.address;
 | 
			
		||||
        zrxToken = new ZRXTokenContract(zrxInstance.abi, zrxInstance.address, provider);
 | 
			
		||||
        zrxAddress = zrxToken.address;
 | 
			
		||||
        MAX_UINT = zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
 | 
			
		||||
    });
 | 
			
		||||
    beforeEach(async () => {
 | 
			
		||||
@@ -47,25 +47,25 @@ describe('ZRXToken', () => {
 | 
			
		||||
    });
 | 
			
		||||
    describe('constants', () => {
 | 
			
		||||
        it('should have 18 decimals', async () => {
 | 
			
		||||
            const decimals = new BigNumber(await zrx.decimals.callAsync());
 | 
			
		||||
            const decimals = new BigNumber(await zrxToken.decimals.callAsync());
 | 
			
		||||
            const expectedDecimals = 18;
 | 
			
		||||
            expect(decimals).to.be.bignumber.equal(expectedDecimals);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should have a total supply of 1 billion tokens', async () => {
 | 
			
		||||
            const totalSupply = new BigNumber(await zrx.totalSupply.callAsync());
 | 
			
		||||
            const totalSupply = new BigNumber(await zrxToken.totalSupply.callAsync());
 | 
			
		||||
            const expectedTotalSupply = 1000000000;
 | 
			
		||||
            expect(ZeroEx.toUnitAmount(totalSupply, 18)).to.be.bignumber.equal(expectedTotalSupply);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should be named 0x Protocol Token', async () => {
 | 
			
		||||
            const name = await zrx.name.callAsync();
 | 
			
		||||
            const name = await zrxToken.name.callAsync();
 | 
			
		||||
            const expectedName = '0x Protocol Token';
 | 
			
		||||
            expect(name).to.be.equal(expectedName);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should have the symbol ZRX', async () => {
 | 
			
		||||
            const symbol = await zrx.symbol.callAsync();
 | 
			
		||||
            const symbol = await zrxToken.symbol.callAsync();
 | 
			
		||||
            const expectedSymbol = 'ZRX';
 | 
			
		||||
            expect(symbol).to.be.equal(expectedSymbol);
 | 
			
		||||
        });
 | 
			
		||||
@@ -74,7 +74,7 @@ describe('ZRXToken', () => {
 | 
			
		||||
    describe('constructor', () => {
 | 
			
		||||
        it('should initialize owner balance to totalSupply', async () => {
 | 
			
		||||
            const ownerBalance = await zeroEx.token.getBalanceAsync(zrxAddress, owner);
 | 
			
		||||
            const totalSupply = new BigNumber(await zrx.totalSupply.callAsync());
 | 
			
		||||
            const totalSupply = new BigNumber(await zrxToken.totalSupply.callAsync());
 | 
			
		||||
            expect(totalSupply).to.be.bignumber.equal(ownerBalance);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
@@ -95,7 +95,7 @@ describe('ZRXToken', () => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should return true on a 0 value transfer', async () => {
 | 
			
		||||
            const didReturnTrue = await zrx.transfer.callAsync(spender, new BigNumber(0), {
 | 
			
		||||
            const didReturnTrue = await zrxToken.transfer.callAsync(spender, new BigNumber(0), {
 | 
			
		||||
                from: owner,
 | 
			
		||||
            });
 | 
			
		||||
            expect(didReturnTrue).to.be.true();
 | 
			
		||||
@@ -109,7 +109,7 @@ describe('ZRXToken', () => {
 | 
			
		||||
            await zeroEx.token.setAllowanceAsync(zrxAddress, owner, spender, amountToTransfer, {
 | 
			
		||||
                gasLimit: constants.MAX_TOKEN_APPROVE_GAS,
 | 
			
		||||
            });
 | 
			
		||||
            const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            const didReturnTrue = await zrxToken.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            expect(didReturnTrue).to.be.false();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -121,13 +121,13 @@ describe('ZRXToken', () => {
 | 
			
		||||
            const spenderAllowanceIsInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
 | 
			
		||||
            expect(spenderAllowanceIsInsufficient).to.be.true();
 | 
			
		||||
 | 
			
		||||
            const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            const didReturnTrue = await zrxToken.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            expect(didReturnTrue).to.be.false();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should return true on a 0 value transfer', async () => {
 | 
			
		||||
            const amountToTransfer = new BigNumber(0);
 | 
			
		||||
            const didReturnTrue = await zrx.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            const didReturnTrue = await zrxToken.transferFrom.callAsync(owner, spender, amountToTransfer, { from: spender });
 | 
			
		||||
            expect(didReturnTrue).to.be.true();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user