Move signature validation into OrderValidationUtils.validateOrderFillableOrThrowAsync
This commit is contained in:
parent
773cf3cd14
commit
1f0ac47bd9
@ -1120,17 +1120,6 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
|
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
|
||||||
assert.doesConformToSchema('opts', opts, validateOrderFillableOptsSchema);
|
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(
|
const balanceAllowanceFetcher = new AssetBalanceAndProxyAllowanceFetcher(
|
||||||
this._erc20TokenWrapper,
|
this._erc20TokenWrapper,
|
||||||
this._erc721TokenWrapper,
|
this._erc721TokenWrapper,
|
||||||
@ -1141,7 +1130,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
|
|
||||||
const expectedFillTakerTokenAmountIfExists = opts.expectedFillTakerTokenAmount;
|
const expectedFillTakerTokenAmountIfExists = opts.expectedFillTakerTokenAmount;
|
||||||
const filledCancelledFetcher = new OrderFilledCancelledFetcher(this, BlockParamLiteral.Latest);
|
const filledCancelledFetcher = new OrderFilledCancelledFetcher(this, BlockParamLiteral.Latest);
|
||||||
const orderValidationUtils = new OrderValidationUtils(filledCancelledFetcher);
|
const orderValidationUtils = new OrderValidationUtils(filledCancelledFetcher, this._web3Wrapper.getProvider());
|
||||||
await orderValidationUtils.validateOrderFillableOrThrowAsync(
|
await orderValidationUtils.validateOrderFillableOrThrowAsync(
|
||||||
exchangeTradeSimulator,
|
exchangeTradeSimulator,
|
||||||
signedOrder,
|
signedOrder,
|
||||||
@ -1169,7 +1158,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
const exchangeTradeSimulator = new ExchangeTransferSimulator(balanceAllowanceStore);
|
const exchangeTradeSimulator = new ExchangeTransferSimulator(balanceAllowanceStore);
|
||||||
|
|
||||||
const filledCancelledFetcher = new OrderFilledCancelledFetcher(this, BlockParamLiteral.Latest);
|
const filledCancelledFetcher = new OrderFilledCancelledFetcher(this, BlockParamLiteral.Latest);
|
||||||
const orderValidationUtils = new OrderValidationUtils(filledCancelledFetcher);
|
const orderValidationUtils = new OrderValidationUtils(filledCancelledFetcher, this._web3Wrapper.getProvider());
|
||||||
await orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
|
await orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
|
||||||
exchangeTradeSimulator,
|
exchangeTradeSimulator,
|
||||||
this._web3Wrapper.getProvider(),
|
this._web3Wrapper.getProvider(),
|
||||||
|
@ -392,7 +392,7 @@ export class FillOrderCombinatorialUtils {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 5. If I fill it by X, what are the resulting balances/allowances/filled amounts expected?
|
// 5. If I fill it by X, what are the resulting balances/allowances/filled amounts expected?
|
||||||
const orderValidationUtils = new OrderValidationUtils(orderFilledCancelledFetcher);
|
const orderValidationUtils = new OrderValidationUtils(orderFilledCancelledFetcher, provider);
|
||||||
const lazyStore = new BalanceAndProxyAllowanceLazyStore(balanceAndProxyAllowanceFetcher);
|
const lazyStore = new BalanceAndProxyAllowanceLazyStore(balanceAndProxyAllowanceFetcher);
|
||||||
const exchangeTransferSimulator = new ExchangeTransferSimulator(lazyStore);
|
const exchangeTransferSimulator = new ExchangeTransferSimulator(lazyStore);
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ import { utils } from './utils';
|
|||||||
*/
|
*/
|
||||||
export class OrderValidationUtils {
|
export class OrderValidationUtils {
|
||||||
private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
|
private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
|
||||||
|
private readonly _provider: Provider;
|
||||||
/**
|
/**
|
||||||
* A Typescript implementation mirroring the implementation of isRoundingError in the
|
* A Typescript implementation mirroring the implementation of isRoundingError in the
|
||||||
* Exchange smart contract
|
* Exchange smart contract
|
||||||
@ -116,8 +117,9 @@ export class OrderValidationUtils {
|
|||||||
* @param orderFilledCancelledFetcher A module that implements the AbstractOrderFilledCancelledFetcher
|
* @param orderFilledCancelledFetcher A module that implements the AbstractOrderFilledCancelledFetcher
|
||||||
* @return An instance of OrderValidationUtils
|
* @return An instance of OrderValidationUtils
|
||||||
*/
|
*/
|
||||||
constructor(orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher) {
|
constructor(orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher, provider: Provider) {
|
||||||
this._orderFilledCancelledFetcher = orderFilledCancelledFetcher;
|
this._orderFilledCancelledFetcher = orderFilledCancelledFetcher;
|
||||||
|
this._provider = provider;
|
||||||
}
|
}
|
||||||
// TODO(fabio): remove this method once the smart contracts have been refactored
|
// TODO(fabio): remove this method once the smart contracts have been refactored
|
||||||
// to return helpful revert reasons instead of ORDER_UNFILLABLE. Instruct devs
|
// to return helpful revert reasons instead of ORDER_UNFILLABLE. Instruct devs
|
||||||
@ -137,6 +139,16 @@ export class OrderValidationUtils {
|
|||||||
expectedFillTakerTokenAmount?: BigNumber,
|
expectedFillTakerTokenAmount?: BigNumber,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
|
||||||
|
const isValidSignature = await signatureUtils.isValidSignatureAsync(
|
||||||
|
this._provider,
|
||||||
|
orderHash,
|
||||||
|
signedOrder.signature,
|
||||||
|
signedOrder.makerAddress,
|
||||||
|
);
|
||||||
|
if (!isValidSignature) {
|
||||||
|
throw new Error('INVALID_ORDER_SIGNATURE');
|
||||||
|
}
|
||||||
|
|
||||||
const isCancelled = await this._orderFilledCancelledFetcher.isOrderCancelledAsync(signedOrder);
|
const isCancelled = await this._orderFilledCancelledFetcher.isOrderCancelledAsync(signedOrder);
|
||||||
if (isCancelled) {
|
if (isCancelled) {
|
||||||
throw new Error('CANCELLED');
|
throw new Error('CANCELLED');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user