fix other lint errors
This commit is contained in:
		@@ -21,7 +21,7 @@ export class Actor {
 | 
			
		||||
    public readonly name: string;
 | 
			
		||||
    public readonly privateKey: Buffer;
 | 
			
		||||
    public readonly deployment: DeploymentManager;
 | 
			
		||||
    protected readonly transactionFactory: TransactionFactory;
 | 
			
		||||
    protected readonly _transactionFactory: TransactionFactory;
 | 
			
		||||
 | 
			
		||||
    constructor(config: ActorConfig) {
 | 
			
		||||
        Actor.count++;
 | 
			
		||||
@@ -29,7 +29,7 @@ export class Actor {
 | 
			
		||||
        this.name = config.name || this.address;
 | 
			
		||||
        this.deployment = config.deployment;
 | 
			
		||||
        this.privateKey = constants.TESTRPC_PRIVATE_KEYS[config.deployment.accounts.indexOf(this.address)];
 | 
			
		||||
        this.transactionFactory = new TransactionFactory(
 | 
			
		||||
        this._transactionFactory = new TransactionFactory(
 | 
			
		||||
            this.privateKey,
 | 
			
		||||
            config.deployment.exchange.address,
 | 
			
		||||
            config.deployment.chainId,
 | 
			
		||||
@@ -99,6 +99,6 @@ export class Actor {
 | 
			
		||||
        customTransactionParams: Partial<ZeroExTransaction>,
 | 
			
		||||
        signatureType: SignatureType = SignatureType.EthSign,
 | 
			
		||||
    ): Promise<SignedZeroExTransaction> {
 | 
			
		||||
        return this.transactionFactory.newSignedTransactionAsync(customTransactionParams, signatureType);
 | 
			
		||||
        return this._transactionFactory.newSignedTransactionAsync(customTransactionParams, signatureType);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ import { SignatureType, SignedZeroExTransaction } from '@0x/types';
 | 
			
		||||
 | 
			
		||||
import { Actor, ActorConfig, Constructor } from './base';
 | 
			
		||||
 | 
			
		||||
export interface FeeRecipientConfig extends ActorConfig {
 | 
			
		||||
interface FeeRecipientConfig extends ActorConfig {
 | 
			
		||||
    verifyingContract?: BaseContract;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -17,6 +17,10 @@ export interface FeeRecipientInterface {
 | 
			
		||||
    ) => SignedCoordinatorApproval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with fee recipients within the 0x ecosystem.
 | 
			
		||||
 * As of writing, the only extra functionality provided is signing Coordinator approvals.
 | 
			
		||||
 */
 | 
			
		||||
export function FeeRecipientMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<FeeRecipientInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public readonly actor: Actor;
 | 
			
		||||
@@ -28,6 +32,7 @@ export function FeeRecipientMixin<TBase extends Constructor>(Base: TBase): TBase
 | 
			
		||||
         * base class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import { Actor } from './base';
 | 
			
		||||
import { KeeperMixin } from './keeper';
 | 
			
		||||
import { MakerMixin } from './maker';
 | 
			
		||||
import { PoolOperatorMixin } from './pool_operator';
 | 
			
		||||
import { StakerMixin } from './staker';
 | 
			
		||||
import { KeeperMixin } from './keeper';
 | 
			
		||||
 | 
			
		||||
export class OperatorMaker extends PoolOperatorMixin(MakerMixin(Actor)) {}
 | 
			
		||||
export class StakerMaker extends StakerMixin(MakerMixin(Actor)) {}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,10 @@ export interface KeeperInterface {
 | 
			
		||||
    finalizePoolsAsync: (poolIds?: string[]) => Promise<TransactionReceiptWithDecodedLogs[]>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with keepers within the 0x ecosystem.
 | 
			
		||||
 * This includes ending epochs sand finalizing pools in the staking system.
 | 
			
		||||
 */
 | 
			
		||||
export function KeeperMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<KeeperInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public readonly actor: Actor;
 | 
			
		||||
@@ -20,6 +24,7 @@ export function KeeperMixin<TBase extends Constructor>(Base: TBase): TBase & Con
 | 
			
		||||
         * class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
        }
 | 
			
		||||
@@ -63,11 +68,10 @@ export function KeeperMixin<TBase extends Constructor>(Base: TBase): TBase & Con
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return Promise.all(
 | 
			
		||||
                poolIds.map(
 | 
			
		||||
                    async poolId =>
 | 
			
		||||
                        await stakingWrapper.finalizePool.awaitTransactionSuccessAsync(poolId, {
 | 
			
		||||
                            from: this.actor.address,
 | 
			
		||||
                        }),
 | 
			
		||||
                poolIds.map(async poolId =>
 | 
			
		||||
                    stakingWrapper.finalizePool.awaitTransactionSuccessAsync(poolId, {
 | 
			
		||||
                        from: this.actor.address,
 | 
			
		||||
                    }),
 | 
			
		||||
                ),
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
import { Actor, ActorConfig, Constructor } from './base';
 | 
			
		||||
 | 
			
		||||
export interface MakerConfig extends ActorConfig {
 | 
			
		||||
interface MakerConfig extends ActorConfig {
 | 
			
		||||
    orderConfig: Partial<Order>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -16,6 +16,10 @@ export interface MakerInterface {
 | 
			
		||||
    joinStakingPoolAsync: (poolId: string) => Promise<TransactionReceiptWithDecodedLogs>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with makers within the 0x ecosystem.
 | 
			
		||||
 * This includes signing and canceling orders, as well as joining a staking pool as a maker.
 | 
			
		||||
 */
 | 
			
		||||
export function MakerMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<MakerInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public makerPoolId?: string;
 | 
			
		||||
@@ -28,6 +32,7 @@ export function MakerMixin<TBase extends Constructor>(Base: TBase): TBase & Cons
 | 
			
		||||
         * class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
import { Actor, Constructor } from './base';
 | 
			
		||||
 | 
			
		||||
export interface OperatorShareByPoolId {
 | 
			
		||||
interface OperatorShareByPoolId {
 | 
			
		||||
    [poolId: string]: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -15,6 +15,10 @@ export interface PoolOperatorInterface {
 | 
			
		||||
    ) => Promise<TransactionReceiptWithDecodedLogs>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with pool operators within the 0x ecosystem.
 | 
			
		||||
 * This includes creating staking pools and decreasing the operator share of a pool.
 | 
			
		||||
 */
 | 
			
		||||
export function PoolOperatorMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<PoolOperatorInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public readonly operatorShares: OperatorShareByPoolId = {};
 | 
			
		||||
@@ -26,6 +30,7 @@ export function PoolOperatorMixin<TBase extends Constructor>(Base: TBase): TBase
 | 
			
		||||
         * base class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,13 @@ import { BigNumber } from '@0x/utils';
 | 
			
		||||
import { Actor, Constructor } from './base';
 | 
			
		||||
 | 
			
		||||
export interface StakerInterface {
 | 
			
		||||
    stakeAsync: (
 | 
			
		||||
        amount: BigNumber,
 | 
			
		||||
        poolId?: string,
 | 
			
		||||
    ) => Promise<void>;
 | 
			
		||||
    stakeAsync: (amount: BigNumber, poolId?: string) => Promise<void>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with stakers within the 0x ecosystem.
 | 
			
		||||
 * This includes staking ZRX (and optionally delegating it to a specific pool).
 | 
			
		||||
 */
 | 
			
		||||
export function StakerMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<StakerInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public readonly actor: Actor;
 | 
			
		||||
@@ -20,6 +21,7 @@ export function StakerMixin<TBase extends Constructor>(Base: TBase): TBase & Con
 | 
			
		||||
         * class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,10 @@ import { SignedOrder } from '@0x/types';
 | 
			
		||||
import { BigNumber } from '@0x/utils';
 | 
			
		||||
import { TransactionReceiptWithDecodedLogs, TxData } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
import { Actor, Constructor } from './base';
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
import { Actor, Constructor } from './base';
 | 
			
		||||
 | 
			
		||||
export interface TakerInterface {
 | 
			
		||||
    fillOrderAsync: (
 | 
			
		||||
        order: SignedOrder,
 | 
			
		||||
@@ -13,6 +14,10 @@ export interface TakerInterface {
 | 
			
		||||
    ) => Promise<TransactionReceiptWithDecodedLogs>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This mixin encapsulates functionaltiy associated with takers within the 0x ecosystem.
 | 
			
		||||
 * As of writing, the only extra functionality provided is a utility wrapper around `fillOrder`,
 | 
			
		||||
 */
 | 
			
		||||
export function TakerMixin<TBase extends Constructor>(Base: TBase): TBase & Constructor<TakerInterface> {
 | 
			
		||||
    return class extends Base {
 | 
			
		||||
        public readonly actor: Actor;
 | 
			
		||||
@@ -23,6 +28,7 @@ export function TakerMixin<TBase extends Constructor>(Base: TBase): TBase & Cons
 | 
			
		||||
         * class).
 | 
			
		||||
         */
 | 
			
		||||
        constructor(...args: any[]) {
 | 
			
		||||
            // tslint:disable-next-line:no-inferred-empty-object-type
 | 
			
		||||
            super(...args);
 | 
			
		||||
            this.actor = (this as any) as Actor;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								contracts/integrations/test/actors/tslint.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								contracts/integrations/test/actors/tslint.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "extends": ["@0x/tslint-config"],
 | 
			
		||||
    "rules": {
 | 
			
		||||
        "max-classes-per-file": false
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,6 +3,10 @@ import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { Actor } from './base';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Utility function to convert Actors into an object mapping readable names to addresses.
 | 
			
		||||
 * Useful for BalanceStore.
 | 
			
		||||
 */
 | 
			
		||||
export function actorAddressesByName(actors: Actor[]): TokenOwnersByName {
 | 
			
		||||
    return _.zipObject(actors.map(actor => actor.name), actors.map(actor => actor.address));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
import { CoordinatorContract, SignedCoordinatorApproval } from '@0x/contracts-coordinator';
 | 
			
		||||
import {
 | 
			
		||||
    BlockchainBalanceStore,
 | 
			
		||||
    LocalBalanceStore,
 | 
			
		||||
    constants as exchangeConstants,
 | 
			
		||||
    ExchangeCancelEventArgs,
 | 
			
		||||
    ExchangeCancelUpToEventArgs,
 | 
			
		||||
@@ -9,6 +8,7 @@ import {
 | 
			
		||||
    ExchangeEvents,
 | 
			
		||||
    ExchangeFillEventArgs,
 | 
			
		||||
    ExchangeFunctionName,
 | 
			
		||||
    LocalBalanceStore,
 | 
			
		||||
} from '@0x/contracts-exchange';
 | 
			
		||||
import { blockchainTests, expect, hexConcat, hexSlice, verifyEvents } from '@0x/contracts-test-utils';
 | 
			
		||||
import { assetDataUtils, CoordinatorRevertErrors, orderHashUtils, transactionHashUtils } from '@0x/order-utils';
 | 
			
		||||
@@ -17,9 +17,10 @@ import { BigNumber } from '@0x/utils';
 | 
			
		||||
import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
import { Actor, actorAddressesByName, FeeRecipient, Maker } from '../actors';
 | 
			
		||||
import { deployCoordinatorAsync } from './deploy_coordinator';
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
import { deployCoordinatorAsync } from './deploy_coordinator';
 | 
			
		||||
 | 
			
		||||
// tslint:disable:no-unnecessary-type-assertion
 | 
			
		||||
blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
    let deployment: DeploymentManager;
 | 
			
		||||
@@ -59,11 +60,11 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        taker.configureERC20TokenAsync(takerToken);
 | 
			
		||||
        taker.configureERC20TokenAsync(takerFeeToken);
 | 
			
		||||
        taker.configureERC20TokenAsync(deployment.tokens.weth, deployment.staking.stakingProxy.address);
 | 
			
		||||
        maker.configureERC20TokenAsync(makerToken);
 | 
			
		||||
        maker.configureERC20TokenAsync(makerFeeToken);
 | 
			
		||||
        await taker.configureERC20TokenAsync(takerToken);
 | 
			
		||||
        await taker.configureERC20TokenAsync(takerFeeToken);
 | 
			
		||||
        await taker.configureERC20TokenAsync(deployment.tokens.weth, deployment.staking.stakingProxy.address);
 | 
			
		||||
        await maker.configureERC20TokenAsync(makerToken);
 | 
			
		||||
        await maker.configureERC20TokenAsync(makerFeeToken);
 | 
			
		||||
 | 
			
		||||
        balanceStore = new BlockchainBalanceStore(
 | 
			
		||||
            {
 | 
			
		||||
@@ -79,8 +80,9 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
    function simulateFills(
 | 
			
		||||
        orders: SignedOrder[],
 | 
			
		||||
        txReceipt: TransactionReceiptWithDecodedLogs,
 | 
			
		||||
        msgValue: BigNumber = new BigNumber(0),
 | 
			
		||||
        msgValue?: BigNumber,
 | 
			
		||||
    ): LocalBalanceStore {
 | 
			
		||||
        let remainingValue = msgValue || new BigNumber(0);
 | 
			
		||||
        const localBalanceStore = LocalBalanceStore.create(balanceStore);
 | 
			
		||||
        // Transaction gas cost
 | 
			
		||||
        localBalanceStore.burnGas(txReceipt.from, DeploymentManager.gasPrice.times(txReceipt.gasUsed));
 | 
			
		||||
@@ -106,13 +108,13 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            // Protocol fee
 | 
			
		||||
            if (msgValue.isGreaterThanOrEqualTo(DeploymentManager.protocolFee)) {
 | 
			
		||||
            if (remainingValue.isGreaterThanOrEqualTo(DeploymentManager.protocolFee)) {
 | 
			
		||||
                localBalanceStore.sendEth(
 | 
			
		||||
                    txReceipt.from,
 | 
			
		||||
                    deployment.staking.stakingProxy.address,
 | 
			
		||||
                    DeploymentManager.protocolFee,
 | 
			
		||||
                );
 | 
			
		||||
                msgValue = msgValue.minus(DeploymentManager.protocolFee);
 | 
			
		||||
                remainingValue = remainingValue.minus(DeploymentManager.protocolFee);
 | 
			
		||||
            } else {
 | 
			
		||||
                localBalanceStore.transferAsset(
 | 
			
		||||
                    taker.address,
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,14 @@ import { BigNumber } from '@0x/utils';
 | 
			
		||||
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Deploys a Coordinator contract configured to work alongside the provided `deployment`.
 | 
			
		||||
 */
 | 
			
		||||
export async function deployCoordinatorAsync(
 | 
			
		||||
    deployment: DeploymentManager,
 | 
			
		||||
    environment: BlockchainTestsEnvironment,
 | 
			
		||||
): Promise<CoordinatorContract> {
 | 
			
		||||
    return await CoordinatorContract.deployFrom0xArtifactAsync(
 | 
			
		||||
    return CoordinatorContract.deployFrom0xArtifactAsync(
 | 
			
		||||
        artifacts.Coordinator,
 | 
			
		||||
        environment.provider,
 | 
			
		||||
        deployment.txDefaults,
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,14 @@ import { assetDataUtils } from '@0x/order-utils';
 | 
			
		||||
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Deploys a Forwarder contract configured to work alongside the provided `deployment`.
 | 
			
		||||
 */
 | 
			
		||||
export async function deployForwarderAsync(
 | 
			
		||||
    deployment: DeploymentManager,
 | 
			
		||||
    environment: BlockchainTestsEnvironment,
 | 
			
		||||
): Promise<ForwarderContract> {
 | 
			
		||||
    return await ForwarderContract.deployFrom0xArtifactAsync(
 | 
			
		||||
    return ForwarderContract.deployFrom0xArtifactAsync(
 | 
			
		||||
        artifacts.Forwarder,
 | 
			
		||||
        environment.provider,
 | 
			
		||||
        deployment.txDefaults,
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,10 @@ import { assetDataUtils, ForwarderRevertErrors } from '@0x/order-utils';
 | 
			
		||||
import { BigNumber } from '@0x/utils';
 | 
			
		||||
 | 
			
		||||
import { Actor, actorAddressesByName, FeeRecipient, Maker } from '../actors';
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
import { deployForwarderAsync } from './deploy_forwarder';
 | 
			
		||||
import { ForwarderTestFactory } from './forwarder_test_factory';
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
blockchainTests('Forwarder integration tests', env => {
 | 
			
		||||
    let deployment: DeploymentManager;
 | 
			
		||||
@@ -71,7 +72,7 @@ blockchainTests('Forwarder integration tests', env => {
 | 
			
		||||
                feeRecipientAddress: orderFeeRecipient.address,
 | 
			
		||||
                makerAssetAmount: toBaseUnitAmount(2),
 | 
			
		||||
                takerAssetAmount: toBaseUnitAmount(1),
 | 
			
		||||
                makerAssetData: makerAssetData,
 | 
			
		||||
                makerAssetData,
 | 
			
		||||
                takerAssetData: wethAssetData,
 | 
			
		||||
                takerFee: constants.ZERO_AMOUNT,
 | 
			
		||||
                makerFeeAssetData: assetDataUtils.encodeERC20AssetData(makerFeeToken.address),
 | 
			
		||||
@@ -79,9 +80,9 @@ blockchainTests('Forwarder integration tests', env => {
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        maker.configureERC20TokenAsync(makerToken);
 | 
			
		||||
        maker.configureERC20TokenAsync(makerFeeToken);
 | 
			
		||||
        maker.configureERC20TokenAsync(anotherErc20Token);
 | 
			
		||||
        await maker.configureERC20TokenAsync(makerToken);
 | 
			
		||||
        await maker.configureERC20TokenAsync(makerFeeToken);
 | 
			
		||||
        await maker.configureERC20TokenAsync(anotherErc20Token);
 | 
			
		||||
        await forwarder.approveMakerAssetProxy.awaitTransactionSuccessAsync(makerAssetData);
 | 
			
		||||
        [nftId] = await maker.configureERC721TokenAsync(erc721Token);
 | 
			
		||||
 | 
			
		||||
@@ -111,7 +112,6 @@ blockchainTests('Forwarder integration tests', env => {
 | 
			
		||||
    blockchainTests.resets('constructor', () => {
 | 
			
		||||
        it('should revert if assetProxy is unregistered', async () => {
 | 
			
		||||
            const chainId = await env.getChainIdAsync();
 | 
			
		||||
            const wethAssetData = assetDataUtils.encodeERC20AssetData(deployment.tokens.weth.address);
 | 
			
		||||
            const exchange = await ExchangeContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                exchangeArtifacts.Exchange,
 | 
			
		||||
                env.provider,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,4 @@
 | 
			
		||||
import {
 | 
			
		||||
    blockchainTests,
 | 
			
		||||
    constants,
 | 
			
		||||
    expect,
 | 
			
		||||
    filterLogsToArguments,
 | 
			
		||||
    getRandomInteger,
 | 
			
		||||
    hexRandom,
 | 
			
		||||
} from '@0x/contracts-test-utils';
 | 
			
		||||
import { blockchainTests, constants, expect, filterLogsToArguments, getRandomInteger } from '@0x/contracts-test-utils';
 | 
			
		||||
import { BigNumber, StringRevertError } from '@0x/utils';
 | 
			
		||||
import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
@@ -30,10 +23,10 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
        it('should call the before function with the provided arguments', async () => {
 | 
			
		||||
            let sideEffectTarget = ZERO_AMOUNT;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.returnInteger, {
 | 
			
		||||
                before: async (input: BigNumber) => {
 | 
			
		||||
                before: async (_input: BigNumber) => {
 | 
			
		||||
                    sideEffectTarget = randomInput;
 | 
			
		||||
                },
 | 
			
		||||
                after: async (beforeInfo: any, result: Result, input: BigNumber) => {},
 | 
			
		||||
                after: async (_beforeInfo: any, _result: Result, _input: BigNumber) => null,
 | 
			
		||||
            });
 | 
			
		||||
            const randomInput = getRandomInteger(ZERO_AMOUNT, MAX_UINT256);
 | 
			
		||||
            await assertion.executeAsync(randomInput);
 | 
			
		||||
@@ -43,8 +36,8 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
        it('should call the after function with the provided arguments', async () => {
 | 
			
		||||
            let sideEffectTarget = ZERO_AMOUNT;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.returnInteger, {
 | 
			
		||||
                before: async (input: BigNumber) => {},
 | 
			
		||||
                after: async (beforeInfo: any, result: Result, input: BigNumber) => {
 | 
			
		||||
                before: async (_input: BigNumber) => null,
 | 
			
		||||
                after: async (_beforeInfo: any, _result: Result, input: BigNumber) => {
 | 
			
		||||
                    sideEffectTarget = input;
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
@@ -55,8 +48,8 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
 | 
			
		||||
        it('should not fail immediately if the wrapped function fails', async () => {
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.emptyRevert, {
 | 
			
		||||
                before: async () => {},
 | 
			
		||||
                after: async (beforeInfo: any, result: Result) => {},
 | 
			
		||||
                before: async () => null,
 | 
			
		||||
                after: async (_beforeInfo: any, _result: Result) => null,
 | 
			
		||||
            });
 | 
			
		||||
            await assertion.executeAsync();
 | 
			
		||||
        });
 | 
			
		||||
@@ -65,10 +58,10 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
            const randomInput = getRandomInteger(ZERO_AMOUNT, MAX_UINT256);
 | 
			
		||||
            let sideEffectTarget = ZERO_AMOUNT;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.returnInteger, {
 | 
			
		||||
                before: async (input: BigNumber) => {
 | 
			
		||||
                before: async (_input: BigNumber) => {
 | 
			
		||||
                    return randomInput;
 | 
			
		||||
                },
 | 
			
		||||
                after: async (beforeInfo: any, result: Result, input: BigNumber) => {
 | 
			
		||||
                after: async (beforeInfo: any, _result: Result, _input: BigNumber) => {
 | 
			
		||||
                    sideEffectTarget = beforeInfo;
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
@@ -79,8 +72,8 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
        it('should pass the result from the function call to "after"', async () => {
 | 
			
		||||
            let sideEffectTarget = ZERO_AMOUNT;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.returnInteger, {
 | 
			
		||||
                before: async (input: BigNumber) => {},
 | 
			
		||||
                after: async (beforeInfo: any, result: Result, input: BigNumber) => {
 | 
			
		||||
                before: async (_input: BigNumber) => null,
 | 
			
		||||
                after: async (_beforeInfo: any, result: Result, _input: BigNumber) => {
 | 
			
		||||
                    sideEffectTarget = result.data;
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
@@ -90,12 +83,10 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should pass the receipt from the function call to "after"', async () => {
 | 
			
		||||
            let sideEffectTarget = {} as TransactionReceiptWithDecodedLogs;
 | 
			
		||||
            let sideEffectTarget: TransactionReceiptWithDecodedLogs;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.emitEvent, {
 | 
			
		||||
                before: async (input: string) => {
 | 
			
		||||
                    return {};
 | 
			
		||||
                },
 | 
			
		||||
                after: async (beforeInfo: {}, result: Result, input: string) => {
 | 
			
		||||
                before: async (_input: string) => null,
 | 
			
		||||
                after: async (_beforeInfo: any, result: Result, _input: string) => {
 | 
			
		||||
                    if (result.receipt) {
 | 
			
		||||
                        sideEffectTarget = result.receipt;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -107,7 +98,7 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
 | 
			
		||||
            // Ensure that the correct events were emitted.
 | 
			
		||||
            const [event] = filterLogsToArguments<TestFrameworkEventEventArgs>(
 | 
			
		||||
                sideEffectTarget.logs,
 | 
			
		||||
                sideEffectTarget!.logs, // tslint:disable-line:no-non-null-assertion
 | 
			
		||||
                TestFrameworkEvents.Event,
 | 
			
		||||
            );
 | 
			
		||||
            expect(event).to.be.deep.eq({ input });
 | 
			
		||||
@@ -116,10 +107,8 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
        it('should pass the error to "after" if the function call fails', async () => {
 | 
			
		||||
            let sideEffectTarget: Error;
 | 
			
		||||
            const assertion = new FunctionAssertion(exampleContract.stringRevert, {
 | 
			
		||||
                before: async string => {
 | 
			
		||||
                    return {};
 | 
			
		||||
                },
 | 
			
		||||
                after: async (any, result: Result, string) => {
 | 
			
		||||
                before: async _string => null,
 | 
			
		||||
                after: async (_beforeInfo: any, result: Result, _input: string) => {
 | 
			
		||||
                    sideEffectTarget = result.data;
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
@@ -128,7 +117,7 @@ blockchainTests.resets('FunctionAssertion Unit Tests', env => {
 | 
			
		||||
 | 
			
		||||
            const expectedError = new StringRevertError(message);
 | 
			
		||||
            return expect(
 | 
			
		||||
                new Promise((resolve, reject) => {
 | 
			
		||||
                new Promise<Error>((_resolve, reject) => {
 | 
			
		||||
                    reject(sideEffectTarget);
 | 
			
		||||
                }),
 | 
			
		||||
            ).to.revertWith(expectedError);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
import { blockchainTests, constants, expect } from '@0x/contracts-test-utils';
 | 
			
		||||
import { IERC20TokenEvents, IERC20TokenTransferEventArgs } from '@0x/contracts-erc20';
 | 
			
		||||
import {
 | 
			
		||||
    BlockchainBalanceStore,
 | 
			
		||||
@@ -14,13 +13,13 @@ import {
 | 
			
		||||
    IStakingEventsRewardsPaidEventArgs,
 | 
			
		||||
    IStakingEventsStakingPoolEarnedRewardsInEpochEventArgs,
 | 
			
		||||
} from '@0x/contracts-staking';
 | 
			
		||||
import { SignedOrder } from '@0x/types';
 | 
			
		||||
import { blockchainTests, constants, expect, toBaseUnitAmount, verifyEvents } from '@0x/contracts-test-utils';
 | 
			
		||||
import { assetDataUtils, orderHashUtils } from '@0x/order-utils';
 | 
			
		||||
import { toBaseUnitAmount, verifyEvents } from '@0x/contracts-test-utils';
 | 
			
		||||
import { SignedOrder } from '@0x/types';
 | 
			
		||||
import { BigNumber } from '@0x/utils';
 | 
			
		||||
import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
 | 
			
		||||
 | 
			
		||||
import { Taker, actorAddressesByName, FeeRecipient, Maker, OperatorStakerMaker, StakerKeeper } from '../actors';
 | 
			
		||||
import { actorAddressesByName, FeeRecipient, Maker, OperatorStakerMaker, StakerKeeper, Taker } from '../actors';
 | 
			
		||||
import { DeploymentManager } from '../utils/deployment_manager';
 | 
			
		||||
 | 
			
		||||
blockchainTests.resets('fillOrder integration tests', env => {
 | 
			
		||||
@@ -78,7 +77,7 @@ blockchainTests.resets('fillOrder integration tests', env => {
 | 
			
		||||
        await delegator.configureERC20TokenAsync(deployment.tokens.zrx);
 | 
			
		||||
 | 
			
		||||
        // Create a staking pool with the operator as a maker.
 | 
			
		||||
        poolId = await operator.createStakingPoolAsync(0.95 * stakingConstants.PPM, true);
 | 
			
		||||
        poolId = await operator.createStakingPoolAsync(stakingConstants.PPM * 0.95, true);
 | 
			
		||||
        // A vanilla maker joins the pool as well.
 | 
			
		||||
        await maker.joinStakingPoolAsync(poolId);
 | 
			
		||||
 | 
			
		||||
@@ -97,8 +96,9 @@ blockchainTests.resets('fillOrder integration tests', env => {
 | 
			
		||||
    function simulateFill(
 | 
			
		||||
        order: SignedOrder,
 | 
			
		||||
        txReceipt: TransactionReceiptWithDecodedLogs,
 | 
			
		||||
        msgValue: BigNumber = DeploymentManager.protocolFee,
 | 
			
		||||
        msgValue?: BigNumber,
 | 
			
		||||
    ): LocalBalanceStore {
 | 
			
		||||
        let remainingValue = msgValue !== undefined ? msgValue : DeploymentManager.protocolFee;
 | 
			
		||||
        const localBalanceStore = LocalBalanceStore.create(balanceStore);
 | 
			
		||||
        // Transaction gas cost
 | 
			
		||||
        localBalanceStore.burnGas(txReceipt.from, DeploymentManager.gasPrice.times(txReceipt.gasUsed));
 | 
			
		||||
@@ -109,13 +109,13 @@ blockchainTests.resets('fillOrder integration tests', env => {
 | 
			
		||||
        localBalanceStore.transferAsset(maker.address, taker.address, order.makerAssetAmount, order.makerAssetData);
 | 
			
		||||
 | 
			
		||||
        // Protocol fee
 | 
			
		||||
        if (msgValue.isGreaterThanOrEqualTo(DeploymentManager.protocolFee)) {
 | 
			
		||||
        if (remainingValue.isGreaterThanOrEqualTo(DeploymentManager.protocolFee)) {
 | 
			
		||||
            localBalanceStore.sendEth(
 | 
			
		||||
                txReceipt.from,
 | 
			
		||||
                deployment.staking.stakingProxy.address,
 | 
			
		||||
                DeploymentManager.protocolFee,
 | 
			
		||||
            );
 | 
			
		||||
            msgValue = msgValue.minus(DeploymentManager.protocolFee);
 | 
			
		||||
            remainingValue = remainingValue.minus(DeploymentManager.protocolFee);
 | 
			
		||||
        } else {
 | 
			
		||||
            localBalanceStore.transferAsset(
 | 
			
		||||
                taker.address,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import {
 | 
			
		||||
    StaticCallProxyContract,
 | 
			
		||||
} from '@0x/contracts-asset-proxy';
 | 
			
		||||
import { artifacts as ERC1155Artifacts, ERC1155MintableContract } from '@0x/contracts-erc1155';
 | 
			
		||||
import { DummyERC20TokenContract, artifacts as ERC20Artifacts, WETH9Contract } from '@0x/contracts-erc20';
 | 
			
		||||
import { artifacts as ERC20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20';
 | 
			
		||||
import { artifacts as ERC721Artifacts, DummyERC721TokenContract } from '@0x/contracts-erc721';
 | 
			
		||||
import {
 | 
			
		||||
    artifacts as exchangeArtifacts,
 | 
			
		||||
@@ -256,8 +256,8 @@ export class DeploymentManager {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Configures an exchange contract with staking contracts
 | 
			
		||||
     * @param exchange
 | 
			
		||||
     * @param staking
 | 
			
		||||
     * @param exchange The Exchange contract.
 | 
			
		||||
     * @param staking The Staking contracts.
 | 
			
		||||
     * @param owner An owner address to use when configuring the asset proxies.
 | 
			
		||||
     */
 | 
			
		||||
    protected static async _configureExchangeWithStakingAsync(
 | 
			
		||||
@@ -413,45 +413,39 @@ export class DeploymentManager {
 | 
			
		||||
                : constants.NUM_DUMMY_ERC1155_CONTRACTS_TO_DEPLOY;
 | 
			
		||||
 | 
			
		||||
        const erc20 = await Promise.all(
 | 
			
		||||
            _.times(
 | 
			
		||||
                numErc20TokensToDeploy,
 | 
			
		||||
                async () =>
 | 
			
		||||
                    await DummyERC20TokenContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                        ERC20Artifacts.DummyERC20Token,
 | 
			
		||||
                        environment.provider,
 | 
			
		||||
                        txDefaults,
 | 
			
		||||
                        ERC20Artifacts,
 | 
			
		||||
                        constants.DUMMY_TOKEN_NAME,
 | 
			
		||||
                        constants.DUMMY_TOKEN_SYMBOL,
 | 
			
		||||
                        constants.DUMMY_TOKEN_DECIMALS,
 | 
			
		||||
                        constants.DUMMY_TOKEN_TOTAL_SUPPLY,
 | 
			
		||||
                    ),
 | 
			
		||||
            _.times(numErc20TokensToDeploy, async () =>
 | 
			
		||||
                DummyERC20TokenContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                    ERC20Artifacts.DummyERC20Token,
 | 
			
		||||
                    environment.provider,
 | 
			
		||||
                    txDefaults,
 | 
			
		||||
                    ERC20Artifacts,
 | 
			
		||||
                    constants.DUMMY_TOKEN_NAME,
 | 
			
		||||
                    constants.DUMMY_TOKEN_SYMBOL,
 | 
			
		||||
                    constants.DUMMY_TOKEN_DECIMALS,
 | 
			
		||||
                    constants.DUMMY_TOKEN_TOTAL_SUPPLY,
 | 
			
		||||
                ),
 | 
			
		||||
            ),
 | 
			
		||||
        );
 | 
			
		||||
        const erc721 = await Promise.all(
 | 
			
		||||
            _.times(
 | 
			
		||||
                numErc721TokensToDeploy,
 | 
			
		||||
                async () =>
 | 
			
		||||
                    await DummyERC721TokenContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                        ERC721Artifacts.DummyERC721Token,
 | 
			
		||||
                        environment.provider,
 | 
			
		||||
                        txDefaults,
 | 
			
		||||
                        ERC721Artifacts,
 | 
			
		||||
                        constants.DUMMY_TOKEN_NAME,
 | 
			
		||||
                        constants.DUMMY_TOKEN_SYMBOL,
 | 
			
		||||
                    ),
 | 
			
		||||
            _.times(numErc721TokensToDeploy, async () =>
 | 
			
		||||
                DummyERC721TokenContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                    ERC721Artifacts.DummyERC721Token,
 | 
			
		||||
                    environment.provider,
 | 
			
		||||
                    txDefaults,
 | 
			
		||||
                    ERC721Artifacts,
 | 
			
		||||
                    constants.DUMMY_TOKEN_NAME,
 | 
			
		||||
                    constants.DUMMY_TOKEN_SYMBOL,
 | 
			
		||||
                ),
 | 
			
		||||
            ),
 | 
			
		||||
        );
 | 
			
		||||
        const erc1155 = await Promise.all(
 | 
			
		||||
            _.times(
 | 
			
		||||
                numErc1155TokensToDeploy,
 | 
			
		||||
                async () =>
 | 
			
		||||
                    await ERC1155MintableContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                        ERC1155Artifacts.ERC1155Mintable,
 | 
			
		||||
                        environment.provider,
 | 
			
		||||
                        txDefaults,
 | 
			
		||||
                        ERC1155Artifacts,
 | 
			
		||||
                    ),
 | 
			
		||||
            _.times(numErc1155TokensToDeploy, async () =>
 | 
			
		||||
                ERC1155MintableContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                    ERC1155Artifacts.ERC1155Mintable,
 | 
			
		||||
                    environment.provider,
 | 
			
		||||
                    txDefaults,
 | 
			
		||||
                    ERC1155Artifacts,
 | 
			
		||||
                ),
 | 
			
		||||
            ),
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
@@ -492,3 +486,4 @@ export class DeploymentManager {
 | 
			
		||||
        public txDefaults: Partial<TxData>,
 | 
			
		||||
    ) {}
 | 
			
		||||
}
 | 
			
		||||
// tslint:disable:max-file-line-count
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ export class FunctionAssertion<TBefore> implements Assertion {
 | 
			
		||||
        const beforeInfo = await this.condition.before(...args);
 | 
			
		||||
 | 
			
		||||
        // Initialize the callResult so that the default success value is true.
 | 
			
		||||
        let callResult: Result = { success: true };
 | 
			
		||||
        const callResult: Result = { success: true };
 | 
			
		||||
 | 
			
		||||
        // Try to make the call to the function. If it is successful, pass the
 | 
			
		||||
        // result and receipt to the after condition.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user