aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid <logvinov.leon@gmail.com>2017-10-12 22:51:37 +0800
committerGitHub <noreply@github.com>2017-10-12 22:51:37 +0800
commitf4fbac26945a53b081e616de63cba20e0bff6af7 (patch)
tree0928f4dedbb91a6de5e35ff9dbeaf491c7b9a256
parentc23ea1e688f68f7aeaf24e562d44a0761ab35f7d (diff)
parentb86f6322e16309feea865e1b304dc7da5ce8ec86 (diff)
downloaddexon-0x-contracts-f4fbac26945a53b081e616de63cba20e0bff6af7.tar.gz
dexon-0x-contracts-f4fbac26945a53b081e616de63cba20e0bff6af7.tar.zst
dexon-0x-contracts-f4fbac26945a53b081e616de63cba20e0bff6af7.zip
Merge pull request #193 from 0xProject/fix/allowance-error
Fix an issue causing fills to throw `INSUFFICIENT_TAKER_ALLOWANCE`
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/utils/order_validation_utils.ts6
-rw-r--r--test/order_validation_test.ts36
-rw-r--r--test/utils/fill_scenarios.ts2
4 files changed, 43 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8b96a02db..efda95316 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# CHANGELOG
+v0.21.3 - _October 12, 2017_
+ * Fixed a bug causing order fills to throw `INSUFFICIENT_TAKER_ALLOWANCE` (#193)
+
v0.21.2 - _October 11, 2017_
* Exported `ContractEventArg` as a public type (#190)
diff --git a/src/utils/order_validation_utils.ts b/src/utils/order_validation_utils.ts
index 5d14602db..1d9aac884 100644
--- a/src/utils/order_validation_utils.ts
+++ b/src/utils/order_validation_utils.ts
@@ -102,11 +102,11 @@ export class OrderValidationUtils {
fillTakerTokenAmount: BigNumber.BigNumber, senderAddress: string, zrxTokenAddress: string): Promise<void> {
const fillMakerTokenAmount = this.getFillMakerTokenAmount(signedOrder, fillTakerTokenAmount);
await exchangeTradeEmulator.transferFromAsync(
- signedOrder.makerTokenAddress, signedOrder.maker, signedOrder.taker, fillMakerTokenAmount,
+ signedOrder.makerTokenAddress, signedOrder.maker, senderAddress, fillMakerTokenAmount,
TradeSide.Maker, TransferType.Trade,
);
await exchangeTradeEmulator.transferFromAsync(
- signedOrder.takerTokenAddress, signedOrder.taker, signedOrder.maker, fillTakerTokenAmount,
+ signedOrder.takerTokenAddress, senderAddress, signedOrder.maker, fillTakerTokenAmount,
TradeSide.Taker, TransferType.Trade,
);
await exchangeTradeEmulator.transferFromAsync(
@@ -114,7 +114,7 @@ export class OrderValidationUtils {
TransferType.Fee,
);
await exchangeTradeEmulator.transferFromAsync(
- zrxTokenAddress, signedOrder.taker, signedOrder.feeRecipient, signedOrder.takerFee, TradeSide.Taker,
+ zrxTokenAddress, senderAddress, signedOrder.feeRecipient, signedOrder.takerFee, TradeSide.Taker,
TransferType.Fee,
);
}
diff --git a/test/order_validation_test.ts b/test/order_validation_test.ts
index 6f9388a69..742739aaa 100644
--- a/test/order_validation_test.ts
+++ b/test/order_validation_test.ts
@@ -257,5 +257,41 @@ describe('OrderValidation', () => {
),
).to.be.true();
});
+ it('should call exchangeTransferSimulator.transferFrom with correct values for an open order', async () => {
+ const makerFee = new BigNumber(2);
+ const takerFee = new BigNumber(2);
+ const signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
+ makerTokenAddress, takerTokenAddress, makerFee, takerFee,
+ makerAddress, ZeroEx.NULL_ADDRESS, fillableAmount, feeRecipient,
+ );
+ await orderValidationUtils.validateFillOrderBalancesAllowancesThrowIfInvalidAsync(
+ exchangeTransferSimulator, signedOrder, fillableAmount, takerAddress, zrxTokenAddress,
+ );
+ expect(transferFromAsync.callCount).to.be.equal(4);
+ expect(
+ transferFromAsync.getCall(0).calledWith(
+ makerTokenAddress, makerAddress, takerAddress, bigNumberMatch(fillableAmount),
+ TradeSide.Maker, TransferType.Trade,
+ ),
+ ).to.be.true();
+ expect(
+ transferFromAsync.getCall(1).calledWith(
+ takerTokenAddress, takerAddress, makerAddress, bigNumberMatch(fillableAmount),
+ TradeSide.Taker, TransferType.Trade,
+ ),
+ ).to.be.true();
+ expect(
+ transferFromAsync.getCall(2).calledWith(
+ zrxTokenAddress, makerAddress, feeRecipient, bigNumberMatch(makerFee),
+ TradeSide.Maker, TransferType.Fee,
+ ),
+ ).to.be.true();
+ expect(
+ transferFromAsync.getCall(3).calledWith(
+ zrxTokenAddress, takerAddress, feeRecipient, bigNumberMatch(takerFee),
+ TradeSide.Taker, TransferType.Fee,
+ ),
+ ).to.be.true();
+ });
});
});
diff --git a/test/utils/fill_scenarios.ts b/test/utils/fill_scenarios.ts
index e305759f6..c399c7bf4 100644
--- a/test/utils/fill_scenarios.ts
+++ b/test/utils/fill_scenarios.ts
@@ -91,7 +91,7 @@ export class FillScenarios {
}
private async increaseBalanceAndAllowanceAsync(
tokenAddress: string, address: string, amount: BigNumber.BigNumber): Promise<void> {
- if (amount.isZero()) {
+ if (amount.isZero() || address === ZeroEx.NULL_ADDRESS) {
return; // noop
}
await Promise.all([