aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2018-01-16 18:22:04 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2018-01-16 18:22:04 +0800
commit89d6326a83afc386d7d388776ab0a419ece20739 (patch)
treef2c550a3cb85e441737ae0ce7962117c288997d9
parent8b81ea162fd32df0dc2dcbdbc47be0e1bb09ea0f (diff)
downloaddexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar.gz
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar.bz2
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar.lz
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar.xz
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.tar.zst
dexon-sol-tools-89d6326a83afc386d7d388776ab0a419ece20739.zip
Fix fillOrdersUpTo balances validation
-rw-r--r--packages/0x.js/src/contract_wrappers/exchange_wrapper.ts6
-rw-r--r--packages/0x.js/test/exchange_wrapper_test.ts14
2 files changed, 18 insertions, 2 deletions
diff --git a/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts b/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
index e1d80e01a..be88cdb20 100644
--- a/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
@@ -258,16 +258,18 @@ export class ExchangeWrapper extends ContractWrapper {
? SHOULD_VALIDATE_BY_DEFAULT
: orderTransactionOpts.shouldValidate;
if (shouldValidate) {
+ let filledTakerTokenAmount = new BigNumber(0);
const zrxTokenAddress = this.getZRXTokenAddress();
const exchangeTradeEmulator = new ExchangeTransferSimulator(this._tokenWrapper, BlockParamLiteral.Latest);
for (const signedOrder of signedOrders) {
- await this._orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
+ const singleFilledTakerTokenAmount = await this._orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
exchangeTradeEmulator,
signedOrder,
- fillTakerTokenAmount,
+ fillTakerTokenAmount.minus(filledTakerTokenAmount),
takerAddress,
zrxTokenAddress,
);
+ filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
}
}
diff --git a/packages/0x.js/test/exchange_wrapper_test.ts b/packages/0x.js/test/exchange_wrapper_test.ts
index 32f8514d9..3e4c40b15 100644
--- a/packages/0x.js/test/exchange_wrapper_test.ts
+++ b/packages/0x.js/test/exchange_wrapper_test.ts
@@ -568,6 +568,20 @@ describe('ExchangeWrapper', () => {
expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount);
});
});
+ describe('failed batch fills', () => {
+ it("should fail validation if user doesn't have enough balance wo fill up to", async () => {
+ const missingBalance = new BigNumber(2); // User will only have anough balance to fill up to 8
+ await zeroEx.token.transferAsync(makerTokenAddress, makerAddress, coinbase, missingBalance);
+ return expect(
+ zeroEx.exchange.fillOrdersUpToAsync(
+ signedOrders,
+ fillUpToAmount,
+ shouldThrowOnInsufficientBalanceOrAllowance,
+ takerAddress,
+ ),
+ ).to.be.rejectedWith(ExchangeContractErrs.InsufficientMakerBalance);
+ });
+ });
describe('order transaction options', () => {
const emptyFillUpToAmount = new BigNumber(0);
it('should validate when orderTransactionOptions are not present', async () => {