Implement zeroEx.exchange.getOrderStateAsync

This commit is contained in:
Ara Kevonian
2018-04-09 04:49:05 -07:00
parent 073bf738dd
commit 8d76d74a17
3 changed files with 76 additions and 18 deletions

View File

@@ -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_

View File

@@ -13,35 +13,38 @@ 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,
ExchangeContractErrCodes,
ExchangeContractErrs,
IndexedFilterValues,
MethodOpts,
OrderAddresses,
OrderCancellationRequest,
OrderFillRequest,
OrderTransactionOpts,
OrderValues,
ValidateOrderFillableOpts,
BlockRange,
EventCallback,
ExchangeContractErrCodes,
ExchangeContractErrs,
IndexedFilterValues,
MethodOpts,
OrderAddresses,
OrderCancellationRequest,
OrderFillRequest,
OrderState,
OrderTransactionOpts,
OrderValues,
ValidateOrderFillableOpts,
} from '../types';
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';
import { ContractWrapper } from './contract_wrapper';
import {
ExchangeContract,
ExchangeContractEventArgs,
ExchangeEvents,
LogErrorContractEventArgs,
ExchangeContract,
ExchangeContractEventArgs,
ExchangeEvents,
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

View File

@@ -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