aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-11-09 07:45:48 +0800
committerFabio Berger <me@fabioberger.com>2018-11-09 07:45:48 +0800
commit857a35d4f71c1c954033c3b0505250e18be21cfb (patch)
tree47dc81508fe8d71b0c0acfcd24b36fa8455c6ae6 /packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
parent8b06b3627426c3f9eda3262d0b6479d55cc4c9ad (diff)
downloaddexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.gz
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.bz2
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.lz
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.xz
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.zst
dexon-sol-tools-857a35d4f71c1c954033c3b0505250e18be21cfb.zip
Fix validateOrderFillableOrThrowAsync method so it also checks order signature, cancelled, cancelledUpTo, and throws helpful error messages
Diffstat (limited to 'packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts')
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts17
1 files changed, 17 insertions, 0 deletions
diff --git a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
index 2e978f35b..902fc755c 100644
--- a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
@@ -5,7 +5,9 @@ import {
assetDataUtils,
BalanceAndProxyAllowanceLazyStore,
ExchangeTransferSimulator,
+ orderHashUtils,
OrderValidationUtils,
+ signatureUtils,
} from '@0x/order-utils';
import { AssetProxyId, Order, SignedOrder } from '@0x/types';
import { BigNumber } from '@0x/utils';
@@ -18,6 +20,7 @@ import { OrderFilledCancelledFetcher } from '../fetchers/order_filled_cancelled_
import { methodOptsSchema } from '../schemas/method_opts_schema';
import { orderTxOptsSchema } from '../schemas/order_tx_opts_schema';
import { txOptsSchema } from '../schemas/tx_opts_schema';
+import { validateOrderFillableOptsSchema } from '../schemas/validate_order_fillable_opts_schema';
import {
BlockRange,
EventCallback,
@@ -1114,6 +1117,20 @@ export class ExchangeWrapper extends ContractWrapper {
signedOrder: SignedOrder,
opts: ValidateOrderFillableOpts = {},
): Promise<void> {
+ assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
+ assert.doesConformToSchema('opts', opts, validateOrderFillableOptsSchema);
+
+ const orderHash = await orderHashUtils.getOrderHashHex(signedOrder);
+ const isValidSignature = await signatureUtils.isValidSignatureAsync(
+ this._web3Wrapper.getProvider(),
+ orderHash,
+ signedOrder.signature,
+ signedOrder.makerAddress,
+ );
+ if (!isValidSignature) {
+ throw new Error('INVALID_ORDER_SIGNATURE');
+ }
+
const balanceAllowanceFetcher = new AssetBalanceAndProxyAllowanceFetcher(
this._erc20TokenWrapper,
this._erc721TokenWrapper,