aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-11-21 06:07:16 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-11-21 06:07:16 +0800
commitc858ff61f7ef8b1941f3f5832713b1d87d92a2af (patch)
tree51c4ba797ba39788e185229b221f639020e0ba0d
parent037f466e1f80f635b48f3235258402e2ce75fb7b (diff)
downloaddexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar.gz
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar.bz2
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar.lz
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar.xz
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.tar.zst
dexon-sol-tools-c858ff61f7ef8b1941f3f5832713b1d87d92a2af.zip
Add an order state cache to filter out duplicate events
-rw-r--r--packages/0x.js/src/order_watcher/order_state_watcher.ts12
1 files changed, 12 insertions, 0 deletions
diff --git a/packages/0x.js/src/order_watcher/order_state_watcher.ts b/packages/0x.js/src/order_watcher/order_state_watcher.ts
index 33fa69b1c..648345c48 100644
--- a/packages/0x.js/src/order_watcher/order_state_watcher.ts
+++ b/packages/0x.js/src/order_watcher/order_state_watcher.ts
@@ -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);
}
}