aboutsummaryrefslogtreecommitdiffstats
path: root/src/contract_wrappers
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-06-02 18:57:21 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-06-02 18:57:21 +0800
commite1ee6b84945e729d894f6535be02f3541e43dbf0 (patch)
treeab58800b09c204ab05fb9c2a1161ded792d7e244 /src/contract_wrappers
parent2a0c6abbe7f9abeacc4fea05bc468413ec1f4732 (diff)
downloaddexon-0x-contracts-e1ee6b84945e729d894f6535be02f3541e43dbf0.tar.gz
dexon-0x-contracts-e1ee6b84945e729d894f6535be02f3541e43dbf0.tar.zst
dexon-0x-contracts-e1ee6b84945e729d894f6535be02f3541e43dbf0.zip
Add check for ROUNDING_ERROR and test for it
Diffstat (limited to 'src/contract_wrappers')
-rw-r--r--src/contract_wrappers/exchange_wrapper.ts16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/contract_wrappers/exchange_wrapper.ts b/src/contract_wrappers/exchange_wrapper.ts
index 3fb187de2..fe5fc3d78 100644
--- a/src/contract_wrappers/exchange_wrapper.ts
+++ b/src/contract_wrappers/exchange_wrapper.ts
@@ -154,6 +154,10 @@ export class ExchangeWrapper extends ContractWrapper {
if (fillMakerAmountInBaseUnits.greaterThan(makerAllowance)) {
throw new Error(FillOrderValidationErrs.NOT_ENOUGH_MAKER_ALLOWANCE);
}
+ if (await this.isRoundingErrorAsync(signedOrder.takerTokenAmount, fillTakerAmountInBaseUnits,
+ signedOrder.makerTokenAmount)) {
+ throw new Error(FillOrderValidationErrs.ROUNDING_ERROR);
+ }
}
private throwErrorLogsAsErrors(logs: ContractEvent[]): void {
const errEvent = _.find(logs, {event: 'LogError'});
@@ -163,6 +167,18 @@ export class ExchangeWrapper extends ContractWrapper {
throw new Error(errMessage);
}
}
+ private async isRoundingErrorAsync(takerTokenAmount: BigNumber.BigNumber,
+ fillTakerAmountInBaseUnits: BigNumber.BigNumber,
+ makerTokenAmount: BigNumber.BigNumber): Promise<boolean> {
+ const exchangeInstance = await this.getExchangeContractAsync();
+ const senderAddress = await this.web3Wrapper.getSenderAddressOrThrowAsync();
+ const isRoundingError = await exchangeInstance.isRoundingError.call(
+ takerTokenAmount, fillTakerAmountInBaseUnits, makerTokenAmount, {
+ from: senderAddress,
+ },
+ );
+ return isRoundingError;
+ }
private async getExchangeContractAsync(): Promise<ExchangeContract> {
if (!_.isUndefined(this.exchangeContractIfExists)) {
return this.exchangeContractIfExists;