Add an order state cache to filter out duplicate events
This commit is contained in:
		@@ -43,6 +43,10 @@ interface OrderByOrderHash {
 | 
			
		||||
    [orderHash: string]: SignedOrder;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface OrderStateByOrderHash {
 | 
			
		||||
    [orderHash: string]: OrderState;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class includes all the functionality related to watching a set of orders
 | 
			
		||||
 * for potential changes in order validity/fillability. The orderWatcher notifies
 | 
			
		||||
@@ -50,6 +54,7 @@ interface OrderByOrderHash {
 | 
			
		||||
 * the order should be deemed invalid.
 | 
			
		||||
 */
 | 
			
		||||
export class OrderStateWatcher {
 | 
			
		||||
    private _orderStateByOrderHashCache: OrderStateByOrderHash = {};
 | 
			
		||||
    private _orderByOrderHash: OrderByOrderHash = {};
 | 
			
		||||
    private _dependentOrderHashes: DependentOrderHashes = {};
 | 
			
		||||
    private _callbackIfExists?: OnOrderStateChangeCallback;
 | 
			
		||||
@@ -96,6 +101,7 @@ export class OrderStateWatcher {
 | 
			
		||||
            return; // noop
 | 
			
		||||
        }
 | 
			
		||||
        delete this._orderByOrderHash[orderHash];
 | 
			
		||||
        delete this._orderStateByOrderHashCache[orderHash];
 | 
			
		||||
        const exchange = (this._orderFilledCancelledLazyStore as any).exchange as ExchangeWrapper;
 | 
			
		||||
        const zrxTokenAddress = await exchange.getZRXTokenAddressAsync();
 | 
			
		||||
        this.removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
 | 
			
		||||
@@ -210,6 +216,12 @@ export class OrderStateWatcher {
 | 
			
		||||
            if (_.isUndefined(this._callbackIfExists)) {
 | 
			
		||||
                break; // Unsubscribe was called
 | 
			
		||||
            }
 | 
			
		||||
            if (_.isEqual(orderState, this._orderStateByOrderHashCache[orderHash])) {
 | 
			
		||||
                // Actual order state didn't change
 | 
			
		||||
                continue;
 | 
			
		||||
            } else {
 | 
			
		||||
                this._orderStateByOrderHashCache[orderHash] = orderState;
 | 
			
		||||
            }
 | 
			
		||||
            this._callbackIfExists(orderState);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user