aboutsummaryrefslogtreecommitdiffstats
path: root/src/mempool/order_state_watcher.ts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-10-30 21:01:20 +0800
committerFabio Berger <me@fabioberger.com>2017-10-31 00:49:16 +0800
commit2a25ece3636015e8429fe4556b62fc84545dc7c7 (patch)
tree1a1bc7e569e78ad3463a7a2af160c76078974016 /src/mempool/order_state_watcher.ts
parent1c90c3af4211b56994a11dd1f583513c961e0f6d (diff)
downloaddexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar.gz
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar.bz2
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar.lz
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar.xz
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.tar.zst
dexon-sol-tools-2a25ece3636015e8429fe4556b62fc84545dc7c7.zip
Add empty implementation of order state watcher
Diffstat (limited to 'src/mempool/order_state_watcher.ts')
-rw-r--r--src/mempool/order_state_watcher.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/mempool/order_state_watcher.ts b/src/mempool/order_state_watcher.ts
new file mode 100644
index 000000000..89f84647d
--- /dev/null
+++ b/src/mempool/order_state_watcher.ts
@@ -0,0 +1,70 @@
+import * as _ from 'lodash';
+import {schemas} from '0x-json-schemas';
+import {ZeroEx} from '../';
+import {EventWatcher} from './event_watcher';
+import {assert} from '../utils/assert';
+import {artifacts} from '../artifacts';
+import {AbiDecoder} from '../utils/abi_decoder';
+import {orderWatcherConfigSchema} from '../schemas/order_watcher_config_schema';
+import {
+ LogEvent,
+ SignedOrder,
+ Web3Provider,
+ LogWithDecodedArgs,
+ OrderWatcherConfig,
+ OnOrderStateChangeCallback,
+} from '../types';
+import {Web3Wrapper} from '../web3_wrapper';
+
+export class OrderStateWatcher {
+ private _orders = new Map<string, SignedOrder>();
+ private _web3Wrapper: Web3Wrapper;
+ private _config: OrderWatcherConfig;
+ private _callback?: OnOrderStateChangeCallback;
+ private _eventWatcher?: EventWatcher;
+ private _abiDecoder: AbiDecoder;
+ constructor(provider: Web3Provider, config?: OrderWatcherConfig) {
+ assert.isWeb3Provider('provider', provider);
+ if (!_.isUndefined(config)) {
+ assert.doesConformToSchema('config', config, orderWatcherConfigSchema);
+ }
+ this._web3Wrapper = new Web3Wrapper(provider);
+ this._config = config || {};
+ const artifactJSONs = _.values(artifacts);
+ const abiArrays = _.map(artifactJSONs, artifact => artifact.abi);
+ this._abiDecoder = new AbiDecoder(abiArrays);
+ }
+ public addOrder(signedOrder: SignedOrder): void {
+ assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
+ const orderHash = ZeroEx.getOrderHashHex(signedOrder);
+ this._orders.set(orderHash, signedOrder);
+ }
+ public removeOrder(signedOrder: SignedOrder): void {
+ assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
+ const orderHash = ZeroEx.getOrderHashHex(signedOrder);
+ this._orders.delete(orderHash);
+ }
+ public subscribe(callback: OnOrderStateChangeCallback): void {
+ assert.isFunction('callback', callback);
+ this._callback = callback;
+ this._eventWatcher = new EventWatcher(
+ this._web3Wrapper, this._config.mempoolPollingIntervalMs,
+ );
+ this._eventWatcher.subscribe(this._onMempoolEventCallbackAsync.bind(this));
+ }
+ public unsubscribe(): void {
+ delete this._callback;
+ if (!_.isUndefined(this._eventWatcher)) {
+ this._eventWatcher.unsubscribe();
+ }
+ }
+ private async _onMempoolEventCallbackAsync(log: LogEvent): Promise<void> {
+ const maybeDecodedLog = this._abiDecoder.tryToDecodeLogOrNoop(log);
+ if (!_.isUndefined((maybeDecodedLog as LogWithDecodedArgs<any>).event)) {
+ await this._revalidateOrdersAsync();
+ }
+ }
+ private async _revalidateOrdersAsync(): Promise<void> {
+ _.noop();
+ }
+}