diff options
author | Fabio Berger <me@fabioberger.com> | 2018-11-09 07:45:48 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-11-09 07:45:48 +0800 |
commit | 857a35d4f71c1c954033c3b0505250e18be21cfb (patch) | |
tree | 47dc81508fe8d71b0c0acfcd24b36fa8455c6ae6 /packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts | |
parent | 8b06b3627426c3f9eda3262d0b6479d55cc4c9ad (diff) | |
download | dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.gz dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.bz2 dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.lz dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.xz dexon-0x-contracts-857a35d4f71c1c954033c3b0505250e18be21cfb.tar.zst dexon-0x-contracts-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.ts | 17 |
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, |