aboutsummaryrefslogtreecommitdiffstats
path: root/packages/order-watcher
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2019-01-10 18:51:13 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2019-01-10 18:56:15 +0800
commitcee29542451d3bf8c99bd08963a2108768072195 (patch)
treef3d657be53459ce3851fcf9632bd94f32ee80184 /packages/order-watcher
parenta8d9263062e586b90ee4c303d3d3aca72e428edc (diff)
parent686f27a96f0cd749f6315d7edd2bb56cf1819245 (diff)
downloaddexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar.gz
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar.bz2
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar.lz
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar.xz
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.tar.zst
dexon-sol-tools-cee29542451d3bf8c99bd08963a2108768072195.zip
Merge development
Diffstat (limited to 'packages/order-watcher')
-rw-r--r--packages/order-watcher/CHANGELOG.json3
-rw-r--r--packages/order-watcher/CHANGELOG.md8
-rw-r--r--packages/order-watcher/Dockerfile13
-rw-r--r--packages/order-watcher/package.json31
-rw-r--r--packages/order-watcher/src/server.ts44
-rw-r--r--packages/order-watcher/test/order_watcher_web_socket_server_test.ts36
6 files changed, 103 insertions, 32 deletions
diff --git a/packages/order-watcher/CHANGELOG.json b/packages/order-watcher/CHANGELOG.json
index 4cfecd034..afd523f88 100644
--- a/packages/order-watcher/CHANGELOG.json
+++ b/packages/order-watcher/CHANGELOG.json
@@ -6,7 +6,8 @@
"note": "Add support for `MultiAssetProxy`",
"pr": 1363
}
- ]
+ ],
+ "timestamp": 1547040760
},
{
"version": "2.3.0",
diff --git a/packages/order-watcher/CHANGELOG.md b/packages/order-watcher/CHANGELOG.md
index 4e49b4637..600b9fa6f 100644
--- a/packages/order-watcher/CHANGELOG.md
+++ b/packages/order-watcher/CHANGELOG.md
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v2.4.0 - _January 9, 2019_
+
+ * Add support for `MultiAssetProxy` (#1363)
+
+## v2.3.0 - _Invalid date_
+
+ * Added a WebSocket interface to OrderWatcher so that it can be used by a client written in any language (#1427)
+
## v2.2.8 - _December 13, 2018_
* Dependencies updated
diff --git a/packages/order-watcher/Dockerfile b/packages/order-watcher/Dockerfile
new file mode 100644
index 000000000..3ffa1b72f
--- /dev/null
+++ b/packages/order-watcher/Dockerfile
@@ -0,0 +1,13 @@
+FROM node
+
+WORKDIR /order-watcher
+
+COPY package.json .
+RUN npm i
+RUN npm install forever -g
+
+COPY . .
+
+EXPOSE 8080
+
+CMD ["forever", "./lib/src/server.js"]
diff --git a/packages/order-watcher/package.json b/packages/order-watcher/package.json
index 16a46294e..5919759dd 100644
--- a/packages/order-watcher/package.json
+++ b/packages/order-watcher/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/order-watcher",
- "version": "2.2.8",
+ "version": "2.4.0",
"description": "An order watcher daemon that watches for order validity",
"keywords": [
"0x",
@@ -33,8 +33,9 @@
"node": ">=6.0.0"
},
"devDependencies": {
- "@0x/dev-utils": "^1.0.21",
- "@0x/migrations": "^2.2.2",
+ "@0x/dev-utils": "^1.0.22",
+ "@0x/migrations": "^2.3.0",
+ "@0x/subproviders": "^2.1.9",
"@0x/tslint-config": "^2.0.0",
"@types/bintrees": "^1.0.2",
"@types/lodash": "4.14.104",
@@ -57,19 +58,19 @@
"typescript": "3.0.1"
},
"dependencies": {
- "@0x/abi-gen-wrappers": "^2.0.2",
- "@0x/assert": "^1.0.20",
- "@0x/base-contract": "^3.0.10",
- "@0x/contract-addresses": "^2.0.0",
- "@0x/contract-artifacts": "^1.1.2",
- "@0x/contract-wrappers": "^4.1.3",
- "@0x/fill-scenarios": "^1.0.16",
- "@0x/json-schemas": "^2.1.4",
- "@0x/order-utils": "^3.0.7",
- "@0x/types": "^1.4.1",
+ "@0x/abi-gen-wrappers": "^2.1.0",
+ "@0x/assert": "^1.0.21",
+ "@0x/base-contract": "^3.0.11",
+ "@0x/contract-addresses": "^2.1.0",
+ "@0x/contract-artifacts": "^1.2.0",
+ "@0x/contract-wrappers": "^4.2.0",
+ "@0x/fill-scenarios": "^1.1.0",
+ "@0x/json-schemas": "^2.1.5",
+ "@0x/order-utils": "^3.1.0",
+ "@0x/types": "^1.5.0",
"@0x/typescript-typings": "^3.0.6",
- "@0x/utils": "^2.0.8",
- "@0x/web3-wrapper": "^3.2.1",
+ "@0x/utils": "^2.1.1",
+ "@0x/web3-wrapper": "^3.2.2",
"bintrees": "^1.0.2",
"ethereum-types": "^1.1.4",
"ethereumjs-blockstream": "6.0.0",
diff --git a/packages/order-watcher/src/server.ts b/packages/order-watcher/src/server.ts
new file mode 100644
index 000000000..1d31e87ab
--- /dev/null
+++ b/packages/order-watcher/src/server.ts
@@ -0,0 +1,44 @@
+import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses';
+import { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
+import * as _ from 'lodash';
+
+import { OrderWatcherWebSocketServer } from './order_watcher/order_watcher_web_socket_server';
+
+const GANACHE_NETWORK_ID = 50;
+const DEFAULT_RPC_URL = 'http://localhost:8545';
+
+const provider = new Web3ProviderEngine();
+const jsonRpcUrl = process.env.JSON_RPC_URL || DEFAULT_RPC_URL;
+const rpcSubprovider = new RPCSubprovider(jsonRpcUrl);
+provider.addProvider(rpcSubprovider);
+provider.start();
+
+const networkId = process.env.NETWORK_ID !== undefined ? _.parseInt(process.env.NETWORK_ID) : GANACHE_NETWORK_ID;
+
+const contractAddressesString = process.env.contractAddresses;
+const contractAddressesIfExists =
+ contractAddressesString === undefined
+ ? getContractAddressesForNetworkOrThrow(networkId)
+ : JSON.parse(contractAddressesString);
+
+const orderWatcherConfig: any = {
+ isVerbose: process.env.IS_VERBOSE === 'true',
+};
+const orderExpirationCheckingIntervalMs = process.env.ORDER_EXPIRATION_CHECKING_INTERVAL_MS;
+if (orderExpirationCheckingIntervalMs !== undefined) {
+ orderWatcherConfig.orderExpirationCheckingIntervalMs = _.parseInt(orderExpirationCheckingIntervalMs);
+}
+const eventPollingIntervalMs = process.env.EVENT_POLLING_INTERVAL_MS;
+if (eventPollingIntervalMs !== undefined) {
+ orderWatcherConfig.eventPollingIntervalMs = _.parseInt(eventPollingIntervalMs);
+}
+const expirationMarginMs = process.env.EXPIRATION_MARGIN_MS;
+if (expirationMarginMs !== undefined) {
+ orderWatcherConfig.expirationMarginMs = _.parseInt(expirationMarginMs);
+}
+const cleanupJobIntervalMs = process.env.CLEANUP_JOB_INTERVAL_MS;
+if (cleanupJobIntervalMs !== undefined) {
+ orderWatcherConfig.cleanupJobIntervalMs = _.parseInt(cleanupJobIntervalMs);
+}
+const wsServer = new OrderWatcherWebSocketServer(provider, networkId, contractAddressesIfExists, orderWatcherConfig);
+wsServer.start();
diff --git a/packages/order-watcher/test/order_watcher_web_socket_server_test.ts b/packages/order-watcher/test/order_watcher_web_socket_server_test.ts
index 6894f42fb..36135f65c 100644
--- a/packages/order-watcher/test/order_watcher_web_socket_server_test.ts
+++ b/packages/order-watcher/test/order_watcher_web_socket_server_test.ts
@@ -1,9 +1,10 @@
+import { ContractAddresses } from '@0x/contract-addresses';
import { ContractWrappers } from '@0x/contract-wrappers';
import { tokenUtils } from '@0x/contract-wrappers/lib/test/utils/token_utils';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { FillScenarios } from '@0x/fill-scenarios';
import { assetDataUtils, orderHashUtils } from '@0x/order-utils';
-import { ExchangeContractErrs, OrderStateInvalid, OrderStateValid, SignedOrder } from '@0x/types';
+import { ExchangeContractErrs, OrderStateInvalid, SignedOrder } from '@0x/types';
import { BigNumber, logUtils } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
@@ -44,14 +45,16 @@ describe('OrderWatcherWebSocketServer', async () => {
let orderHash: string;
let addOrderPayload: AddOrderRequest;
let removeOrderPayload: RemoveOrderRequest;
+ let networkId: number;
+ let contractAddresses: ContractAddresses;
const decimals = constants.ZRX_DECIMALS;
const fillableAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(5), decimals);
before(async () => {
// Set up constants
- const contractAddresses = await migrateOnceAsync();
+ contractAddresses = await migrateOnceAsync();
await blockchainLifecycle.startAsync();
- const networkId = constants.TESTRPC_NETWORK_ID;
+ networkId = constants.TESTRPC_NETWORK_ID;
const config = {
networkId,
contractAddresses,
@@ -93,17 +96,16 @@ describe('OrderWatcherWebSocketServer', async () => {
method: OrderWatcherMethod.RemoveOrder,
params: { orderHash },
};
-
- // Prepare OrderWatcher WebSocket server
- const orderWatcherConfig = {
- isVerbose: true,
- };
- wsServer = new OrderWatcherWebSocketServer(provider, networkId, contractAddresses, orderWatcherConfig);
});
after(async () => {
await blockchainLifecycle.revertAsync();
});
beforeEach(async () => {
+ // Prepare OrderWatcher WebSocket server
+ const orderWatcherConfig = {
+ isVerbose: true,
+ };
+ wsServer = new OrderWatcherWebSocketServer(provider, networkId, contractAddresses, orderWatcherConfig);
wsServer.start();
await blockchainLifecycle.startAsync();
wsClient = new WebSocket.w3cwebsocket('ws://127.0.0.1:8080/');
@@ -260,7 +262,9 @@ describe('OrderWatcherWebSocketServer', async () => {
id: 1,
jsonrpc: '2.0',
method: 'ADD_ORDER',
- signedOrder: nonZeroMakerFeeSignedOrder,
+ params: {
+ signedOrder: nonZeroMakerFeeSignedOrder,
+ },
};
// Set up a second client and have it add the order
@@ -278,15 +282,15 @@ describe('OrderWatcherWebSocketServer', async () => {
// Check that both clients receive the emitted event by awaiting the onMessageAsync promises
let updateMsg = await clientOneOnMessagePromise;
let updateData = JSON.parse(updateMsg.data);
- let orderState = updateData.result as OrderStateValid;
- expect(orderState.isValid).to.be.true();
- expect(orderState.orderRelevantState.makerFeeProxyAllowance).to.be.eq('0');
+ let orderState = updateData.result as OrderStateInvalid;
+ expect(orderState.isValid).to.be.false();
+ expect(orderState.error).to.be.eq('INSUFFICIENT_MAKER_FEE_ALLOWANCE');
updateMsg = await clientTwoOnMessagePromise;
updateData = JSON.parse(updateMsg.data);
- orderState = updateData.result as OrderStateValid;
- expect(orderState.isValid).to.be.true();
- expect(orderState.orderRelevantState.makerFeeProxyAllowance).to.be.eq('0');
+ orderState = updateData.result as OrderStateInvalid;
+ expect(orderState.isValid).to.be.false();
+ expect(orderState.error).to.be.eq('INSUFFICIENT_MAKER_FEE_ALLOWANCE');
wsClientTwo.close();
logUtils.log(`${new Date()} [Client] Closed.`);