From 8b88ad835cf16786f8bd76157784fb09b63d1088 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:17:46 -0700 Subject: Cache networkId in web3Wrapper --- src/web3_wrapper.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/web3_wrapper.ts b/src/web3_wrapper.ts index 630f0bef3..8c410eef7 100644 --- a/src/web3_wrapper.ts +++ b/src/web3_wrapper.ts @@ -5,11 +5,13 @@ import promisify = require('es6-promisify'); export class Web3Wrapper { private web3: Web3; + private networkIdIfExists?: number; constructor(provider: Web3.Provider) { this.web3 = new Web3(); this.web3.setProvider(provider); } public setProvider(provider: Web3.Provider) { + this.networkIdIfExists = undefined; this.web3.setProvider(provider); } public isAddress(address: string): boolean { @@ -27,11 +29,16 @@ export class Web3Wrapper { return this.web3.currentProvider; } public async getNetworkIdIfExistsAsync(): Promise { - try { - const networkId = await this.getNetworkAsync(); - return Number(networkId); - } catch (err) { - return undefined; + if (_.isUndefined(this.networkIdIfExists)) { + try { + const networkId = await this.getNetworkAsync(); + this.networkIdIfExists = Number(networkId); + return this.networkIdIfExists; + } catch (err) { + return undefined; + } + } else { + return this.networkIdIfExists; } } public toWei(ethAmount: BigNumber.BigNumber): BigNumber.BigNumber { -- cgit v1.2.3 From e19c222f30accde6cdfe6b0a6c4c4a0dc450e33e Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:18:17 -0700 Subject: Add tests for networkId caching and invalidation --- test/utils/constants.ts | 1 + test/web3_trapper_test.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 test/web3_trapper_test.ts diff --git a/test/utils/constants.ts b/test/utils/constants.ts index 9b150b5c1..2e9a84e64 100644 --- a/test/utils/constants.ts +++ b/test/utils/constants.ts @@ -2,5 +2,6 @@ export const constants = { NULL_ADDRESS: '0x0000000000000000000000000000000000000000', RPC_HOST: 'localhost', RPC_PORT: 8545, + RPC_NETWORK_ID: 50, KOVAN_RPC_URL: 'https://kovan.0xproject.com', }; diff --git a/test/web3_trapper_test.ts b/test/web3_trapper_test.ts new file mode 100644 index 000000000..d417c9af5 --- /dev/null +++ b/test/web3_trapper_test.ts @@ -0,0 +1,29 @@ +import * as chai from 'chai'; +import {web3Factory} from './utils/web3_factory'; +import {ZeroEx} from '../src/'; +import {Web3Wrapper} from '../src/web3_wrapper'; +import {constants} from './utils/constants'; + +chai.config.includeStack = true; +const expect = chai.expect; + +describe.only('Web3Wrapper', () => { + const web3Provider = web3Factory.create().currentProvider; + describe('#getNetworkIdIfExistsAsync', () => { + it('caches network id requests', async () => { + const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.RPC_NETWORK_ID); + }); + it('invalidates network id cache on setProvider call', async () => { + const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.RPC_NETWORK_ID); + const newProvider = web3Factory.create().currentProvider; + web3Wrapper.setProvider(newProvider); + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + }); + }); +}); -- cgit v1.2.3 From 092e0c427321818f05366b6cae9fe59fcfc9bede Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:20:39 -0700 Subject: Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fdabfd92..1c6833568 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ v0.9.0 - TBD ------------------------ * Move `zeroEx.exchange.getAvailableContractAddressesAsync` to `zeroEx.getAvailableExchangeContractAddressesAsync` (#94) * Move `zeroEx.exchange.getProxyAuthorizedContractAddressesAsync` to `zeroEx.getProxyAuthorizedExchangeContractAddressesAsync` (#94) + * Cache `net_version` requests and invalidate on `setProvider` call (#95) v0.8.0 - _Jul. 4, 2017_ ------------------------ -- cgit v1.2.3 From 2ad6a646644f98aa26b8ee8be0701eaafe3b1491 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:23:55 -0700 Subject: Remove only --- test/web3_trapper_test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/web3_trapper_test.ts b/test/web3_trapper_test.ts index d417c9af5..69c04617b 100644 --- a/test/web3_trapper_test.ts +++ b/test/web3_trapper_test.ts @@ -7,7 +7,7 @@ import {constants} from './utils/constants'; chai.config.includeStack = true; const expect = chai.expect; -describe.only('Web3Wrapper', () => { +describe('Web3Wrapper', () => { const web3Provider = web3Factory.create().currentProvider; describe('#getNetworkIdIfExistsAsync', () => { it('caches network id requests', async () => { -- cgit v1.2.3 From de76ed478f94ace96ac88dffa7c41b8d77cb18d1 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:40:32 -0700 Subject: Fix CHANGELOG.md comment --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c6833568..6bbd61114 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ v0.9.0 - TBD ------------------------ * Move `zeroEx.exchange.getAvailableContractAddressesAsync` to `zeroEx.getAvailableExchangeContractAddressesAsync` (#94) * Move `zeroEx.exchange.getProxyAuthorizedContractAddressesAsync` to `zeroEx.getProxyAuthorizedExchangeContractAddressesAsync` (#94) - * Cache `net_version` requests and invalidate on `setProvider` call (#95) + * Cache `net_version` requests and invalidate the cache on calls to `setProvider` (#95) v0.8.0 - _Jul. 4, 2017_ ------------------------ -- cgit v1.2.3 From 21cb428b38f0ad518db68f45f45a922f7aa6c7fd Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:41:27 -0700 Subject: Rename RPC_NETWORK_ID to TESTRPC_NETWORK_ID --- test/utils/constants.ts | 2 +- test/web3_trapper_test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/utils/constants.ts b/test/utils/constants.ts index 2e9a84e64..b677d7361 100644 --- a/test/utils/constants.ts +++ b/test/utils/constants.ts @@ -2,6 +2,6 @@ export const constants = { NULL_ADDRESS: '0x0000000000000000000000000000000000000000', RPC_HOST: 'localhost', RPC_PORT: 8545, - RPC_NETWORK_ID: 50, + TESTRPC_NETWORK_ID: 50, KOVAN_RPC_URL: 'https://kovan.0xproject.com', }; diff --git a/test/web3_trapper_test.ts b/test/web3_trapper_test.ts index 69c04617b..1989bd4bc 100644 --- a/test/web3_trapper_test.ts +++ b/test/web3_trapper_test.ts @@ -14,13 +14,13 @@ describe('Web3Wrapper', () => { const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); - expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.RPC_NETWORK_ID); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); }); it('invalidates network id cache on setProvider call', async () => { const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); - expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.RPC_NETWORK_ID); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); const newProvider = web3Factory.create().currentProvider; web3Wrapper.setProvider(newProvider); expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); -- cgit v1.2.3 From 0f3f557e0b535f9ca94af9345be118e03e37ed70 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:42:00 -0700 Subject: Fix a typo in a filename --- test/web3_trapper_test.ts | 29 ----------------------------- test/web3_wrapper_test.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 29 deletions(-) delete mode 100644 test/web3_trapper_test.ts create mode 100644 test/web3_wrapper_test.ts diff --git a/test/web3_trapper_test.ts b/test/web3_trapper_test.ts deleted file mode 100644 index 1989bd4bc..000000000 --- a/test/web3_trapper_test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as chai from 'chai'; -import {web3Factory} from './utils/web3_factory'; -import {ZeroEx} from '../src/'; -import {Web3Wrapper} from '../src/web3_wrapper'; -import {constants} from './utils/constants'; - -chai.config.includeStack = true; -const expect = chai.expect; - -describe('Web3Wrapper', () => { - const web3Provider = web3Factory.create().currentProvider; - describe('#getNetworkIdIfExistsAsync', () => { - it('caches network id requests', async () => { - const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; - expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); - const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); - expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); - }); - it('invalidates network id cache on setProvider call', async () => { - const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; - expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); - const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); - expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); - const newProvider = web3Factory.create().currentProvider; - web3Wrapper.setProvider(newProvider); - expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); - }); - }); -}); diff --git a/test/web3_wrapper_test.ts b/test/web3_wrapper_test.ts new file mode 100644 index 000000000..1989bd4bc --- /dev/null +++ b/test/web3_wrapper_test.ts @@ -0,0 +1,29 @@ +import * as chai from 'chai'; +import {web3Factory} from './utils/web3_factory'; +import {ZeroEx} from '../src/'; +import {Web3Wrapper} from '../src/web3_wrapper'; +import {constants} from './utils/constants'; + +chai.config.includeStack = true; +const expect = chai.expect; + +describe('Web3Wrapper', () => { + const web3Provider = web3Factory.create().currentProvider; + describe('#getNetworkIdIfExistsAsync', () => { + it('caches network id requests', async () => { + const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); + }); + it('invalidates network id cache on setProvider call', async () => { + const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); + const newProvider = web3Factory.create().currentProvider; + web3Wrapper.setProvider(newProvider); + expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); + }); + }); +}); -- cgit v1.2.3 From 90ddfe58a99eb241a86dff64f31263994c00ce2c Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 6 Jul 2017 15:43:35 -0700 Subject: Rename networkId to networkIdIfExists --- test/web3_wrapper_test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/web3_wrapper_test.ts b/test/web3_wrapper_test.ts index 1989bd4bc..d1c2e8e89 100644 --- a/test/web3_wrapper_test.ts +++ b/test/web3_wrapper_test.ts @@ -13,13 +13,13 @@ describe('Web3Wrapper', () => { it('caches network id requests', async () => { const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); - const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + const networkIdIfExists = await web3Wrapper.getNetworkIdIfExistsAsync(); expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); }); it('invalidates network id cache on setProvider call', async () => { const web3Wrapper = (new ZeroEx(web3Provider) as any)._web3Wrapper as Web3Wrapper; expect((web3Wrapper as any).networkIdIfExists).to.be.undefined(); - const networkId = await web3Wrapper.getNetworkIdIfExistsAsync(); + const networkIdIfExists = await web3Wrapper.getNetworkIdIfExistsAsync(); expect((web3Wrapper as any).networkIdIfExists).to.be.equal(constants.TESTRPC_NETWORK_ID); const newProvider = web3Factory.create().currentProvider; web3Wrapper.setProvider(newProvider); -- cgit v1.2.3 From 73a48ddb0d36064a1c5f50c3b917992fe5de89b4 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Fri, 7 Jul 2017 14:20:39 -0700 Subject: Refactor net_version caching logic --- src/web3_wrapper.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/web3_wrapper.ts b/src/web3_wrapper.ts index 8c410eef7..61bac45c9 100644 --- a/src/web3_wrapper.ts +++ b/src/web3_wrapper.ts @@ -11,7 +11,7 @@ export class Web3Wrapper { this.web3.setProvider(provider); } public setProvider(provider: Web3.Provider) { - this.networkIdIfExists = undefined; + delete this.networkIdIfExists; this.web3.setProvider(provider); } public isAddress(address: string): boolean { @@ -29,16 +29,16 @@ export class Web3Wrapper { return this.web3.currentProvider; } public async getNetworkIdIfExistsAsync(): Promise { - if (_.isUndefined(this.networkIdIfExists)) { - try { - const networkId = await this.getNetworkAsync(); - this.networkIdIfExists = Number(networkId); - return this.networkIdIfExists; - } catch (err) { - return undefined; - } - } else { + if (!_.isUndefined(this.networkIdIfExists)) { + return this.networkIdIfExists; + } + + try { + const networkId = await this.getNetworkAsync(); + this.networkIdIfExists = Number(networkId); return this.networkIdIfExists; + } catch (err) { + return undefined; } } public toWei(ethAmount: BigNumber.BigNumber): BigNumber.BigNumber { -- cgit v1.2.3