aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-06-08 22:28:55 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-06-08 22:28:55 +0800
commit49d8b5b18b48604f852038662a0bb0ea598671e0 (patch)
tree2dc6b4c81a2cec6660aad506e571b34b0626358d /src
parent96e52ea3cc8efbbff1c43ed87b45e2fc3f57348b (diff)
downloaddexon-0x-contracts-49d8b5b18b48604f852038662a0bb0ea598671e0.tar.gz
dexon-0x-contracts-49d8b5b18b48604f852038662a0bb0ea598671e0.tar.zst
dexon-0x-contracts-49d8b5b18b48604f852038662a0bb0ea598671e0.zip
Address feedback
Diffstat (limited to 'src')
-rw-r--r--src/contract_wrappers/exchange_wrapper.ts21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/contract_wrappers/exchange_wrapper.ts b/src/contract_wrappers/exchange_wrapper.ts
index 94de45dd8..5caa1da2d 100644
--- a/src/contract_wrappers/exchange_wrapper.ts
+++ b/src/contract_wrappers/exchange_wrapper.ts
@@ -127,7 +127,7 @@ export class ExchangeWrapper extends ContractWrapper {
return cancelledAmountInBaseUnits;
}
/**
- * Fills a signed order with a takerTokenFillAmount denominated in baseUnits of the taker token.
+ * Fills a signed order with an amount denominated in baseUnits of the taker token.
* Since the order in which transactions are included in the next block is indeterminate, race-conditions
* could arise where a users balance or allowance changes before the fillOrder executes. Because of this,
* we allow you to specify `shouldCheckTransfer`. If true, the smart contract will not throw if while
@@ -176,25 +176,27 @@ export class ExchangeWrapper extends ContractWrapper {
this.throwErrorLogsAsErrors(response.logs);
}
/**
- * Batched version of fillOrderAsync. Executes fills atomically in a single transaction.
+ * Batch version of fillOrderAsync.
+ * Executes multiple fills atomically in a single transaction.
+ * If shouldCheckTransfer is set to true, it will continue filling subsequent orders even when earlier ones fail.
+ * When shouldCheckTransfer is set to false, if any fill fails, the entire batch fails.
*/
public async batchFillOrderAsync(orderFillRequests: OrderFillRequest[],
shouldCheckTransfer: boolean, takerAddress: string): Promise<void> {
- if (_.isEmpty(orderFillRequests)) {
- return; // no-op
- }
assert.isBoolean('shouldCheckTransfer', shouldCheckTransfer);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this.web3Wrapper);
_.forEach(orderFillRequests,
- async (orderFillRequest: OrderFillRequest) => {
- assert.doesConformToSchema('signedOrder',
+ async (orderFillRequest: OrderFillRequest, i: number) => {
+ assert.doesConformToSchema(`orderFillRequests[${i}].signedOrder`,
SchemaValidator.convertToJSONSchemaCompatibleObject(orderFillRequest.signedOrder as object),
signedOrderSchema);
- assert.isBigNumber('takerTokenFillAmount', orderFillRequest.takerTokenFillAmount);
+ assert.isBigNumber(`orderFillRequests[${i}].takerTokenFillAmount`, orderFillRequest.takerTokenFillAmount);
await this.validateFillOrderAndThrowIfInvalidAsync(
orderFillRequest.signedOrder, orderFillRequest.takerTokenFillAmount, takerAddress);
});
- const exchangeInstance = await this.getExchangeContractAsync();
+ if (_.isEmpty(orderFillRequests)) {
+ return; // no-op
+ }
const orderAddressesValuesAmountsAndSignatureArray = _.map(orderFillRequests, orderFillRequest => {
return [
@@ -210,6 +212,7 @@ export class ExchangeWrapper extends ContractWrapper {
orderAddressesValuesAmountsAndSignatureArray,
);
+ const exchangeInstance = await this.getExchangeContractAsync();
const gas = await exchangeInstance.batchFill.estimateGas(
orderAddressesArray,
orderValuesArray,