Implement zeroEx.exchange.getOrderStateAsync
				
					
				
			This commit is contained in:
		@@ -4,6 +4,8 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
## v0.36.0 - TBD
 | 
			
		||||
    * Add `zeroEx.exchange.getOrderStateAsync` to allow obtaining current OrderState for a signedOrder
 | 
			
		||||
 | 
			
		||||
## v0.35.0 - _April 2, 2018_
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,8 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { artifacts } from '../artifacts';
 | 
			
		||||
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
 | 
			
		||||
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
 | 
			
		||||
import {
 | 
			
		||||
BlockRange,
 | 
			
		||||
EventCallback,
 | 
			
		||||
@@ -23,6 +25,7 @@ import {
 | 
			
		||||
OrderAddresses,
 | 
			
		||||
OrderCancellationRequest,
 | 
			
		||||
OrderFillRequest,
 | 
			
		||||
OrderState,
 | 
			
		||||
OrderTransactionOpts,
 | 
			
		||||
OrderValues,
 | 
			
		||||
ValidateOrderFillableOpts,
 | 
			
		||||
@@ -30,6 +33,7 @@ import {
 | 
			
		||||
import { assert } from '../utils/assert';
 | 
			
		||||
import { decorators } from '../utils/decorators';
 | 
			
		||||
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
 | 
			
		||||
import { OrderStateUtils } from '../utils/order_state_utils';
 | 
			
		||||
import { OrderValidationUtils } from '../utils/order_validation_utils';
 | 
			
		||||
import { utils } from '../utils/utils';
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +45,6 @@ import {
 | 
			
		||||
LogErrorContractEventArgs,
 | 
			
		||||
} from './generated/exchange';
 | 
			
		||||
import { TokenWrapper } from './token_wrapper';
 | 
			
		||||
 | 
			
		||||
const SHOULD_VALIDATE_BY_DEFAULT = true;
 | 
			
		||||
 | 
			
		||||
interface ExchangeContractErrCodesToMsgs {
 | 
			
		||||
@@ -873,6 +876,22 @@ export class ExchangeWrapper extends ContractWrapper {
 | 
			
		||||
            throw new Error(errMessage);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the latest OrderState of a signedOrder
 | 
			
		||||
     * @param   signedOrder   The signedOrder
 | 
			
		||||
     */
 | 
			
		||||
    public async getOrderStateAsync(signedOrder: SignedOrder): Promise<OrderState> {
 | 
			
		||||
        const balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
 | 
			
		||||
            this._tokenWrapper,
 | 
			
		||||
            BlockParamLiteral.Latest,
 | 
			
		||||
        );
 | 
			
		||||
        const orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(this);
 | 
			
		||||
        const orderStateUtils = new OrderStateUtils(
 | 
			
		||||
            balanceAndProxyAllowanceLazyStore,
 | 
			
		||||
            orderFilledCancelledLazyStore,
 | 
			
		||||
        );
 | 
			
		||||
        return orderStateUtils.getOrderStateAsync(signedOrder);
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the ZRX token address used by the exchange contract.
 | 
			
		||||
     * @return Address of ZRX token
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ import {
 | 
			
		||||
    LogCancelContractEventArgs,
 | 
			
		||||
    LogFillContractEventArgs,
 | 
			
		||||
    OrderCancellationRequest,
 | 
			
		||||
    OrderFillRequest,
 | 
			
		||||
    OrderFillRequest, OrderState, OrderStateInvalid,
 | 
			
		||||
    SignedOrder,
 | 
			
		||||
    Token,
 | 
			
		||||
    ZeroEx,
 | 
			
		||||
@@ -1156,4 +1156,41 @@ describe('ExchangeWrapper', () => {
 | 
			
		||||
            expect(args.maker).to.be.equal(differentMakerAddress);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
    describe('#getOrderState', () => {
 | 
			
		||||
        let maker: string;
 | 
			
		||||
        let taker: string;
 | 
			
		||||
        let makerToken: Token;
 | 
			
		||||
        let takerToken: Token;
 | 
			
		||||
        let signedOrder: SignedOrder;
 | 
			
		||||
        let orderState: OrderState;
 | 
			
		||||
        const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), constants.ZRX_DECIMALS);
 | 
			
		||||
        before(async () => {
 | 
			
		||||
            [, maker, taker] = userAddresses;
 | 
			
		||||
            tokens = await zeroEx.tokenRegistry.getTokensAsync();
 | 
			
		||||
            [makerToken, takerToken] = tokenUtils.getDummyTokens();
 | 
			
		||||
        });
 | 
			
		||||
        it('should report orderStateValid when order is fillable', async () => {
 | 
			
		||||
            signedOrder = await fillScenarios.createFillableSignedOrderAsync(
 | 
			
		||||
                makerToken.address,
 | 
			
		||||
                takerToken.address,
 | 
			
		||||
                maker,
 | 
			
		||||
                taker,
 | 
			
		||||
                fillableAmount,
 | 
			
		||||
            );
 | 
			
		||||
            orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
 | 
			
		||||
            expect(orderState.isValid).to.be.true();
 | 
			
		||||
        });
 | 
			
		||||
        it('should report orderStateInvalid when maker allowance set to 0', async () => {
 | 
			
		||||
            signedOrder = await fillScenarios.createFillableSignedOrderAsync(
 | 
			
		||||
                makerToken.address,
 | 
			
		||||
                takerToken.address,
 | 
			
		||||
                maker,
 | 
			
		||||
                taker,
 | 
			
		||||
                fillableAmount,
 | 
			
		||||
            );
 | 
			
		||||
            await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
 | 
			
		||||
            orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
 | 
			
		||||
            expect(orderState.isValid).to.be.false();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}); // tslint:disable:max-file-line-count
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user