From dbad7d18691e787bfc1c8e63a0e712f652486865 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 12 Feb 2018 15:40:28 +0100 Subject: Move subproviders from dev-utils to subproviders --- packages/dev-utils/CHANGELOG.md | 4 +++ packages/dev-utils/package.json | 1 + .../src/subproviders/empty_wallet_subprovider.ts | 27 ----------------- .../subproviders/fake_gas_estimate_subprovider.ts | 34 ---------------------- packages/dev-utils/src/web3_factory.ts | 4 +-- packages/dev-utils/tsconfig.json | 1 + packages/subproviders/CHANGELOG.md | 4 +++ packages/subproviders/src/index.ts | 2 ++ .../src/subproviders/empty_wallet_subprovider.ts | 27 +++++++++++++++++ .../subproviders/fake_gas_estimate_subprovider.ts | 34 ++++++++++++++++++++++ 10 files changed, 74 insertions(+), 64 deletions(-) delete mode 100644 packages/dev-utils/src/subproviders/empty_wallet_subprovider.ts delete mode 100644 packages/dev-utils/src/subproviders/fake_gas_estimate_subprovider.ts create mode 100644 packages/subproviders/src/subproviders/empty_wallet_subprovider.ts create mode 100644 packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index ad0830f0e..67eaeb1c8 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v0.1.0 - _TBD, 2018_ + + * Remove subproviders (#) + ## v0.0.12 - _February 9, 2018_ * Fix publishing issue where .npmignore was not properly excluding undesired content (#389) diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index d17f4f179..aec7c9b4e 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -32,6 +32,7 @@ }, "dependencies": { "@0xproject/utils": "^0.3.3", + "@0xproject/subproviders": "^0.4.2", "ethereumjs-util": "^5.1.2", "lodash": "^4.17.4", "request-promise-native": "^1.0.5", diff --git a/packages/dev-utils/src/subproviders/empty_wallet_subprovider.ts b/packages/dev-utils/src/subproviders/empty_wallet_subprovider.ts deleted file mode 100644 index 8c1fdfdb2..000000000 --- a/packages/dev-utils/src/subproviders/empty_wallet_subprovider.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { JSONRPCPayload } from '@0xproject/types'; - -/* - * This class implements the web3-provider-engine subprovider interface and returns - * that the provider has no addresses when queried. - * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js - */ -export class EmptyWalletSubprovider { - // This method needs to be here to satisfy the interface but linter wants it to be static. - // tslint:disable-next-line:prefer-function-over-method - public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) { - switch (payload.method) { - case 'eth_accounts': - end(null, []); - return; - - default: - next(); - return; - } - } - // Required to implement this method despite not needing it for this subprovider - // tslint:disable-next-line:prefer-function-over-method - public setEngine(engine: any) { - // noop - } -} diff --git a/packages/dev-utils/src/subproviders/fake_gas_estimate_subprovider.ts b/packages/dev-utils/src/subproviders/fake_gas_estimate_subprovider.ts deleted file mode 100644 index b455a0ed7..000000000 --- a/packages/dev-utils/src/subproviders/fake_gas_estimate_subprovider.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { JSONRPCPayload } from '@0xproject/types'; - -/* - * This class implements the web3-provider-engine subprovider interface and returns - * the constant gas estimate when queried. - * HACK: We need this so that our tests don't use testrpc gas estimation which sometimes kills the node. - * Source: https://github.com/trufflesuite/ganache-cli/issues/417 - * Source: https://github.com/trufflesuite/ganache-cli/issues/437 - * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js - */ -export class FakeGasEstimateSubprovider { - private _constantGasAmount: number; - constructor(constantGasAmount: number) { - this._constantGasAmount = constantGasAmount; - } - // This method needs to be here to satisfy the interface but linter wants it to be static. - // tslint:disable-next-line:prefer-function-over-method - public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) { - switch (payload.method) { - case 'eth_estimateGas': - end(null, this._constantGasAmount); - return; - - default: - next(); - return; - } - } - // Required to implement this method despite not needing it for this subprovider - // tslint:disable-next-line:prefer-function-over-method - public setEngine(engine: any) { - // noop - } -} diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 26c26e03d..1287c9e1e 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -3,12 +3,10 @@ // we are not running in a browser env. // Filed issue: https://github.com/ethereum/web3.js/issues/844 (global as any).XMLHttpRequest = undefined; +import { EmptyWalletSubprovider, FakeGasEstimateSubprovider } from '@0xproject/subproviders'; import ProviderEngine = require('web3-provider-engine'); import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); -import { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider'; -import { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider'; - import { constants } from './constants'; // HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang diff --git a/packages/dev-utils/tsconfig.json b/packages/dev-utils/tsconfig.json index bdf315d59..e26b6e14d 100644 --- a/packages/dev-utils/tsconfig.json +++ b/packages/dev-utils/tsconfig.json @@ -5,6 +5,7 @@ }, "include": [ "./src/**/*", + "./test/**/*", "../../node_modules/types-bn/index.d.ts", "../../node_modules/web3-typescript-typings/index.d.ts", "../../node_modules/types-ethereumjs-util/index.d.ts" diff --git a/packages/subproviders/CHANGELOG.md b/packages/subproviders/CHANGELOG.md index f2c028aea..6f1a85099 100644 --- a/packages/subproviders/CHANGELOG.md +++ b/packages/subproviders/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v0.5.0 - _TBD, 2018_ + + * Add EmptyWalletSubprovider and FakeGasEstimateSubprovider (#) + ## v0.4.1 - _February 9, 2018_ * Fix publishing issue where .npmignore was not properly excluding undesired content (#389) diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index 67d52ee25..4da405ec0 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -6,6 +6,8 @@ import { import { LedgerEthereumClient } from './types'; +export { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider'; +export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider'; export { InjectedWeb3Subprovider } from './subproviders/injected_web3'; export { RedundantRPCSubprovider } from './subproviders/redundant_rpc'; export { LedgerSubprovider } from './subproviders/ledger'; diff --git a/packages/subproviders/src/subproviders/empty_wallet_subprovider.ts b/packages/subproviders/src/subproviders/empty_wallet_subprovider.ts new file mode 100644 index 000000000..8c1fdfdb2 --- /dev/null +++ b/packages/subproviders/src/subproviders/empty_wallet_subprovider.ts @@ -0,0 +1,27 @@ +import { JSONRPCPayload } from '@0xproject/types'; + +/* + * This class implements the web3-provider-engine subprovider interface and returns + * that the provider has no addresses when queried. + * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js + */ +export class EmptyWalletSubprovider { + // This method needs to be here to satisfy the interface but linter wants it to be static. + // tslint:disable-next-line:prefer-function-over-method + public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) { + switch (payload.method) { + case 'eth_accounts': + end(null, []); + return; + + default: + next(); + return; + } + } + // Required to implement this method despite not needing it for this subprovider + // tslint:disable-next-line:prefer-function-over-method + public setEngine(engine: any) { + // noop + } +} diff --git a/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts b/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts new file mode 100644 index 000000000..b455a0ed7 --- /dev/null +++ b/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts @@ -0,0 +1,34 @@ +import { JSONRPCPayload } from '@0xproject/types'; + +/* + * This class implements the web3-provider-engine subprovider interface and returns + * the constant gas estimate when queried. + * HACK: We need this so that our tests don't use testrpc gas estimation which sometimes kills the node. + * Source: https://github.com/trufflesuite/ganache-cli/issues/417 + * Source: https://github.com/trufflesuite/ganache-cli/issues/437 + * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js + */ +export class FakeGasEstimateSubprovider { + private _constantGasAmount: number; + constructor(constantGasAmount: number) { + this._constantGasAmount = constantGasAmount; + } + // This method needs to be here to satisfy the interface but linter wants it to be static. + // tslint:disable-next-line:prefer-function-over-method + public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) { + switch (payload.method) { + case 'eth_estimateGas': + end(null, this._constantGasAmount); + return; + + default: + next(); + return; + } + } + // Required to implement this method despite not needing it for this subprovider + // tslint:disable-next-line:prefer-function-over-method + public setEngine(engine: any) { + // noop + } +} -- cgit v1.2.3 From 8cd2ba3ad637915ab335d87d530f754d104bbdd4 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 12 Feb 2018 18:15:14 +0100 Subject: Add tests for dev-utils package --- packages/dev-utils/package.json | 10 +++++- .../dev-utils/test/blockchain_lifecycle_test.ts | 25 +++++++++++++ packages/dev-utils/test/rpc_test.ts | 42 ++++++++++++++++++++++ packages/dev-utils/tsconfig.json | 1 + 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 packages/dev-utils/test/blockchain_lifecycle_test.ts create mode 100644 packages/dev-utils/test/rpc_test.ts diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index aec7c9b4e..7c155423c 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -7,8 +7,11 @@ "scripts": { "build:watch": "tsc -w", "build": "tsc", + "test": "run-s clean build run_mocha", + "test:circleci": "yarn test", + "run_mocha": "mocha lib/test/**/*_test.js --bail --exit", "clean": "shx rm -rf lib", - "lint": "tslint --project . 'src/**/*.ts'" + "lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'" }, "license": "Apache-2.0", "repository": { @@ -20,9 +23,14 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/dev-utils/README.md", "devDependencies": { + "@types/mocha": "^2.2.42", "@0xproject/tslint-config": "^0.4.9", "@0xproject/types": "^0.2.2", + "@0xproject/web3-wrapper": "^0.1.13", "@types/lodash": "^4.14.86", + "chai": "^4.0.1", + "chai-typescript-typings": "^0.0.3", + "mocha": "^4.0.1", "npm-run-all": "^4.1.2", "shx": "^0.2.2", "tslint": "5.8.0", diff --git a/packages/dev-utils/test/blockchain_lifecycle_test.ts b/packages/dev-utils/test/blockchain_lifecycle_test.ts new file mode 100644 index 000000000..14712faa0 --- /dev/null +++ b/packages/dev-utils/test/blockchain_lifecycle_test.ts @@ -0,0 +1,25 @@ +import { BlockParamLiteral } from '@0xproject/types'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import * as chai from 'chai'; +import 'mocha'; + +import { BlockchainLifecycle, RPC, web3Factory } from '../src'; + +const expect = chai.expect; + +describe('BlockchainLifecycle tests', () => { + const web3 = web3Factory.create(); + const web3Wrapper = new Web3Wrapper(web3.currentProvider); + const rpc = new RPC(); + const blockchainLifecycle = new BlockchainLifecycle(); + describe('#startAsync/revertAsync', () => { + it('reverts changes in between', async () => { + const blockNumberBefore = await web3Wrapper.getBlockNumberAsync(); + await blockchainLifecycle.startAsync(); + await rpc.mineBlockAsync(); + await blockchainLifecycle.revertAsync(); + const blockNumberAfter = await web3Wrapper.getBlockNumberAsync(); + expect(blockNumberAfter).to.be.equal(blockNumberBefore); + }); + }); +}); diff --git a/packages/dev-utils/test/rpc_test.ts b/packages/dev-utils/test/rpc_test.ts new file mode 100644 index 000000000..2869fdbc5 --- /dev/null +++ b/packages/dev-utils/test/rpc_test.ts @@ -0,0 +1,42 @@ +import { BlockParamLiteral } from '@0xproject/types'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import * as chai from 'chai'; +import 'mocha'; + +import { RPC, web3Factory } from '../src'; + +const expect = chai.expect; + +describe('RPC tests', () => { + const web3 = web3Factory.create(); + const web3Wrapper = new Web3Wrapper(web3.currentProvider); + const rpc = new RPC(); + describe('#mineBlockAsync', () => { + it('increases block number when called', async () => { + const blockNumberBefore = await web3Wrapper.getBlockNumberAsync(); + await rpc.mineBlockAsync(); + const blockNumberAfter = await web3Wrapper.getBlockNumberAsync(); + expect(blockNumberAfter).to.be.equal(blockNumberBefore + 1); + }); + }); + describe('#increaseTimeAsync', () => { + it('increases time when called', async () => { + const TIME_DELTA = 1000; + const blockTimestamtBefore = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); + await rpc.increaseTimeAsync(TIME_DELTA); + await rpc.mineBlockAsync(); + const blockTimestamtAfter = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); + expect(blockTimestamtAfter).to.be.at.least(blockTimestamtBefore + TIME_DELTA); + }); + }); + describe('#takeSnapshotAsync/revertSnapshotAsync', () => { + it('reverts changes in between', async () => { + const blockNumberBefore = await web3Wrapper.getBlockNumberAsync(); + const snapshotId = await rpc.takeSnapshotAsync(); + await rpc.mineBlockAsync(); + await rpc.revertSnapshotAsync(snapshotId); + const blockNumberAfter = await web3Wrapper.getBlockNumberAsync(); + expect(blockNumberAfter).to.be.equal(blockNumberBefore); + }); + }); +}); diff --git a/packages/dev-utils/tsconfig.json b/packages/dev-utils/tsconfig.json index e26b6e14d..ace978fea 100644 --- a/packages/dev-utils/tsconfig.json +++ b/packages/dev-utils/tsconfig.json @@ -7,6 +7,7 @@ "./src/**/*", "./test/**/*", "../../node_modules/types-bn/index.d.ts", + "../../node_modules/chai-typescript-typings/index.d.ts", "../../node_modules/web3-typescript-typings/index.d.ts", "../../node_modules/types-ethereumjs-util/index.d.ts" ] -- cgit v1.2.3 From 485ae4d99764cf20583afeb5fb5d43c170336861 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 12 Feb 2018 18:24:26 +0100 Subject: Fix entry points --- packages/dev-utils/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 7c155423c..5d2ac7030 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -2,8 +2,8 @@ "name": "@0xproject/dev-utils", "version": "0.0.13", "description": "0x dev TS utils", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "lib/src/index.js", + "types": "lib/src/index.d.ts", "scripts": { "build:watch": "tsc -w", "build": "tsc", -- cgit v1.2.3 From 778e399438c52c80626bc3fc9c76d2688b4296e4 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 12 Feb 2018 18:39:35 +0100 Subject: Add PR numbers --- packages/dev-utils/CHANGELOG.md | 2 +- packages/subproviders/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 67eaeb1c8..c10c0a334 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -2,7 +2,7 @@ ## v0.1.0 - _TBD, 2018_ - * Remove subproviders (#) + * Remove subproviders (#392) ## v0.0.12 - _February 9, 2018_ diff --git a/packages/subproviders/CHANGELOG.md b/packages/subproviders/CHANGELOG.md index 6f1a85099..e970c69bd 100644 --- a/packages/subproviders/CHANGELOG.md +++ b/packages/subproviders/CHANGELOG.md @@ -2,7 +2,7 @@ ## v0.5.0 - _TBD, 2018_ - * Add EmptyWalletSubprovider and FakeGasEstimateSubprovider (#) + * Add EmptyWalletSubprovider and FakeGasEstimateSubprovider (#392) ## v0.4.1 - _February 9, 2018_ -- cgit v1.2.3 From 599adaf1bf2bee561530b932610f80cd1a9111ee Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 14 Feb 2018 11:53:40 -0800 Subject: Add an assertion --- packages/dev-utils/test/blockchain_lifecycle_test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/dev-utils/test/blockchain_lifecycle_test.ts b/packages/dev-utils/test/blockchain_lifecycle_test.ts index 14712faa0..4fdc53c87 100644 --- a/packages/dev-utils/test/blockchain_lifecycle_test.ts +++ b/packages/dev-utils/test/blockchain_lifecycle_test.ts @@ -17,9 +17,11 @@ describe('BlockchainLifecycle tests', () => { const blockNumberBefore = await web3Wrapper.getBlockNumberAsync(); await blockchainLifecycle.startAsync(); await rpc.mineBlockAsync(); - await blockchainLifecycle.revertAsync(); const blockNumberAfter = await web3Wrapper.getBlockNumberAsync(); - expect(blockNumberAfter).to.be.equal(blockNumberBefore); + expect(blockNumberAfter).to.be.equal(blockNumberBefore + 1); + await blockchainLifecycle.revertAsync(); + const blockNumberAfterRevert = await web3Wrapper.getBlockNumberAsync(); + expect(blockNumberAfterRevert).to.be.equal(blockNumberBefore); }); }); }); -- cgit v1.2.3 From 8704c34a0fa22d5e46d1cbbf53c4ea9c3e54218c Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 14 Feb 2018 11:54:20 -0800 Subject: Fix a typo --- packages/dev-utils/test/rpc_test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/dev-utils/test/rpc_test.ts b/packages/dev-utils/test/rpc_test.ts index 2869fdbc5..2f0e5ff7f 100644 --- a/packages/dev-utils/test/rpc_test.ts +++ b/packages/dev-utils/test/rpc_test.ts @@ -22,11 +22,11 @@ describe('RPC tests', () => { describe('#increaseTimeAsync', () => { it('increases time when called', async () => { const TIME_DELTA = 1000; - const blockTimestamtBefore = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); + const blockTimestampBefore = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); await rpc.increaseTimeAsync(TIME_DELTA); await rpc.mineBlockAsync(); - const blockTimestamtAfter = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); - expect(blockTimestamtAfter).to.be.at.least(blockTimestamtBefore + TIME_DELTA); + const blockTimestampAfter = await web3Wrapper.getBlockTimestampAsync(BlockParamLiteral.Latest); + expect(blockTimestampAfter).to.be.at.least(blockTimestampBefore + TIME_DELTA); }); }); describe('#takeSnapshotAsync/revertSnapshotAsync', () => { -- cgit v1.2.3 From bbfbfcda85d14a60711837989bf35cc22c0c3394 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Wed, 14 Feb 2018 15:03:52 -0800 Subject: Change imports order --- packages/dev-utils/src/web3_factory.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 1287c9e1e..b0e0e4d3f 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -3,10 +3,11 @@ // we are not running in a browser env. // Filed issue: https://github.com/ethereum/web3.js/issues/844 (global as any).XMLHttpRequest = undefined; -import { EmptyWalletSubprovider, FakeGasEstimateSubprovider } from '@0xproject/subproviders'; import ProviderEngine = require('web3-provider-engine'); import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); +import { EmptyWalletSubprovider, FakeGasEstimateSubprovider } from '@0xproject/subproviders'; + import { constants } from './constants'; // HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang -- cgit v1.2.3