From dacf19ecaeb6a31c2f7d6b19aa6a517328e5d15f Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 14:48:11 -0700 Subject: [PATCH 1/6] Make proxy wrapper public on zeroEx instance --- src/0x.ts | 12 ++++++++---- test/exchange_wrapper_test.ts | 3 +-- test/proxy_wrapper_test.ts | 3 +-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/0x.ts b/src/0x.ts index b56a2f949a..938e61805b 100644 --- a/src/0x.ts +++ b/src/0x.ts @@ -52,7 +52,11 @@ export class ZeroEx { * wrapped ETH ERC20 token smart contract. */ public etherToken: EtherTokenWrapper; - private _proxyWrapper: ProxyWrapper; + /** + * An instance of the ProxyWrapper class containing methods for interacting with the + * proxy smart contract. + */ + public proxy: ProxyWrapper; private _web3Wrapper: Web3Wrapper; /** * Verifies that the elliptic curve signature `signature` was generated @@ -150,8 +154,8 @@ export class ZeroEx { constructor(provider: Web3Provider) { this._web3Wrapper = new Web3Wrapper(provider); this.token = new TokenWrapper(this._web3Wrapper); - this._proxyWrapper = new ProxyWrapper(this._web3Wrapper); - this.exchange = new ExchangeWrapper(this._web3Wrapper, this.token, this._proxyWrapper); + this.proxy = new ProxyWrapper(this._web3Wrapper); + this.exchange = new ExchangeWrapper(this._web3Wrapper, this.token, this.proxy); this.tokenRegistry = new TokenRegistryWrapper(this._web3Wrapper); this.etherToken = new EtherTokenWrapper(this._web3Wrapper, this.token); } @@ -165,7 +169,7 @@ export class ZeroEx { await this.exchange.invalidateContractInstancesAsync(); this.tokenRegistry.invalidateContractInstance(); this.token.invalidateContractInstances(); - this._proxyWrapper.invalidateContractInstance(); + this.proxy.invalidateContractInstance(); } /** * Get user Ethereum addresses available through the supplied web3 instance available for sending transactions. diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 5833a8c235..c775f6789d 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -828,8 +828,7 @@ describe('ExchangeWrapper', () => { const exchangeAddresses = await zeroEx.exchange.getProxyAuthorizedContractAddressesAsync(); for (const exchangeAddress of exchangeAddresses) { assert.isETHAddressHex('exchangeAddress', exchangeAddress); - const proxyWrapper = (zeroEx as any)._proxyWrapper as ProxyWrapper; - const isAuthorized = await proxyWrapper.isAuthorizedAsync(exchangeAddress); + const isAuthorized = await zeroEx.proxy.isAuthorizedAsync(exchangeAddress); expect(isAuthorized).to.be.true(); } }); diff --git a/test/proxy_wrapper_test.ts b/test/proxy_wrapper_test.ts index 29b5776c67..ecda09e570 100644 --- a/test/proxy_wrapper_test.ts +++ b/test/proxy_wrapper_test.ts @@ -15,8 +15,7 @@ describe('ProxyWrapper', () => { }); describe('#isAuthorizedAsync', () => { it('should return false if the address is not authorized', async () => { - const proxyWrapper = (zeroEx as any)._proxyWrapper as ProxyWrapper; - const isAuthorized = await proxyWrapper.isAuthorizedAsync(ZeroEx.NULL_ADDRESS); + const isAuthorized = await zeroEx.proxy.isAuthorizedAsync(ZeroEx.NULL_ADDRESS); expect(isAuthorized).to.be.false(); }); }); From 1275f243a3d2e790919d8dfe09b970d7bce8a0c5 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 14:57:40 -0700 Subject: [PATCH 2/6] Add zeroEx.proxy.getAuthorizedAddressesAsync and tests --- src/contract_wrappers/proxy_wrapper.ts | 10 ++++++++++ src/types.ts | 3 +++ test/proxy_wrapper_test.ts | 11 +++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/contract_wrappers/proxy_wrapper.ts b/src/contract_wrappers/proxy_wrapper.ts index 862bce1319..f74c145bf0 100644 --- a/src/contract_wrappers/proxy_wrapper.ts +++ b/src/contract_wrappers/proxy_wrapper.ts @@ -22,6 +22,16 @@ export class ProxyWrapper extends ContractWrapper { const isAuthorized = await proxyContractInstance.authorized.call(exchangeContractAddress); return isAuthorized; } + /** + * Get the list of all exchange addresses authorized by the Proxy contract. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @return The list of authorized addresses. + */ + public async getAuthorizedAddressesAsync(exchangeContractAddress: string): Promise { + const proxyContractInstance = await this._getProxyContractAsync(); + const authorizedAddresses = await proxyContractInstance.getAuthorizedAddresses.call(); + return authorizedAddresses; + } private async _getProxyContractAsync(): Promise { if (!_.isUndefined(this._proxyContractIfExists)) { return this._proxyContractIfExists; diff --git a/src/types.ts b/src/types.ts index 2af7786772..01c22c5ada 100644 --- a/src/types.ts +++ b/src/types.ts @@ -149,6 +149,9 @@ export interface EtherTokenContract extends ContractInstance { } export interface ProxyContract extends ContractInstance { + getAuthorizedAddresses: { + call: () => Promise; + }; authorized: { call: (address: string) => Promise; }; diff --git a/test/proxy_wrapper_test.ts b/test/proxy_wrapper_test.ts index ecda09e570..c60159b81a 100644 --- a/test/proxy_wrapper_test.ts +++ b/test/proxy_wrapper_test.ts @@ -9,9 +9,11 @@ const expect = chai.expect; describe('ProxyWrapper', () => { let zeroEx: ZeroEx; + let exchangeContractAddress: string; before(async () => { const web3 = web3Factory.create(); zeroEx = new ZeroEx(web3.currentProvider); + [exchangeContractAddress] = await zeroEx.exchange.getAvailableContractAddressesAsync(); }); describe('#isAuthorizedAsync', () => { it('should return false if the address is not authorized', async () => { @@ -19,4 +21,13 @@ describe('ProxyWrapper', () => { expect(isAuthorized).to.be.false(); }); }); + describe('#getAuthorizedAddressesAsync', () => { + it('should return the list of authorized addresses', async () => { + const authorizedAddresses = await zeroEx.proxy.getAuthorizedAddressesAsync(exchangeContractAddress); + for (const authorizedAddress of authorizedAddresses) { + const isAuthorized = await zeroEx.proxy.isAuthorizedAsync(authorizedAddress); + expect(isAuthorized).to.be.true(); + } + }); + }); }); From 20f630d1aefb3659cfcf42c046e95491a1f5b8f6 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 15:05:21 -0700 Subject: [PATCH 3/6] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 700095ea0b..5a49d9c9e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,10 @@ # CHANGELOG -v0.7.2 - _Jun. 26, 2017_ +v0.7.2 - TBD ------------------------ * Add the ability to call methods on different authorized versions of the Exchange smart contract (#82) * Update contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59) + * Add `zeroEx.proxy.isAuthorizedAsync` and `zeroEx.proxy.getAuthorizedAddressesAsync` (#89) v0.7.1 - _Jun. 26, 2017_ ------------------------ From 99051bdfdf7dbf5480cf8de70d03974116fcc78e Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 15:13:35 -0700 Subject: [PATCH 4/6] Bump the minor version in CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a49d9c9e4..d5e41bc74b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG -v0.7.2 - TBD +v0.8.0 - TBD ------------------------ * Add the ability to call methods on different authorized versions of the Exchange smart contract (#82) * Update contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59) From 4633637efe1c44ebccea25fe554c0f125b530097 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 16:11:37 -0700 Subject: [PATCH 5/6] Fix the comment --- src/contract_wrappers/proxy_wrapper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contract_wrappers/proxy_wrapper.ts b/src/contract_wrappers/proxy_wrapper.ts index f74c145bf0..bff917eee1 100644 --- a/src/contract_wrappers/proxy_wrapper.ts +++ b/src/contract_wrappers/proxy_wrapper.ts @@ -23,7 +23,7 @@ export class ProxyWrapper extends ContractWrapper { return isAuthorized; } /** - * Get the list of all exchange addresses authorized by the Proxy contract. + * Get the list of all Exchange contract addresses authorized by the Proxy contract. * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. * @return The list of authorized addresses. */ From e6fcf9cdbf8b6159a6af2ecc7dfcf8a65ee2d638 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 3 Jul 2017 16:24:10 -0700 Subject: [PATCH 6/6] Use call instead of use in the comments --- src/contract_wrappers/exchange_wrapper.ts | 8 ++++---- src/contract_wrappers/proxy_wrapper.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/contract_wrappers/exchange_wrapper.ts b/src/contract_wrappers/exchange_wrapper.ts index f596cb4298..12c2d73963 100644 --- a/src/contract_wrappers/exchange_wrapper.ts +++ b/src/contract_wrappers/exchange_wrapper.ts @@ -96,7 +96,7 @@ export class ExchangeWrapper extends ContractWrapper { * subtracting the unavailable amount from the total order takerAmount. * @param orderHash The hex encoded orderHash for which you would like to retrieve the * unavailable takerAmount. - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return The amount of the order (in taker tokens) that has either been filled or canceled. */ public async getUnavailableTakerAmountAsync(orderHash: string, @@ -112,7 +112,7 @@ export class ExchangeWrapper extends ContractWrapper { /** * Retrieve the takerAmount of an order that has already been filled. * @param orderHash The hex encoded orderHash for which you would like to retrieve the filled takerAmount. - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return The amount of the order (in taker tokens) that has already been filled. */ public async getFilledTakerAmountAsync(orderHash: string, @@ -129,7 +129,7 @@ export class ExchangeWrapper extends ContractWrapper { * Retrieve the takerAmount of an order that has been cancelled. * @param orderHash The hex encoded orderHash for which you would like to retrieve the * cancelled takerAmount. - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return The amount of the order (in taker tokens) that has been cancelled. */ public async getCanceledTakerAmountAsync(orderHash: string, @@ -575,7 +575,7 @@ export class ExchangeWrapper extends ContractWrapper { * @param subscriptionOpts Subscriptions options that let you configure the subscription. * @param indexFilterValues An object where the keys are indexed args returned by the event and * the value is the value you are interested in. E.g `{maker: aUserAddressHex}` - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return ContractEventEmitter object */ public async subscribeAsync(eventName: ExchangeEvents, subscriptionOpts: SubscriptionOpts, diff --git a/src/contract_wrappers/proxy_wrapper.ts b/src/contract_wrappers/proxy_wrapper.ts index bff917eee1..bdf163f35d 100644 --- a/src/contract_wrappers/proxy_wrapper.ts +++ b/src/contract_wrappers/proxy_wrapper.ts @@ -14,7 +14,7 @@ export class ProxyWrapper extends ContractWrapper { } /** * Check if the Exchange contract address is authorized by the Proxy contract. - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return Whether the exchangeContractAddress is authorized. */ public async isAuthorizedAsync(exchangeContractAddress: string): Promise { @@ -24,7 +24,7 @@ export class ProxyWrapper extends ContractWrapper { } /** * Get the list of all Exchange contract addresses authorized by the Proxy contract. - * @param exchangeContractAddress The hex encoded address of the Exchange contract to use. + * @param exchangeContractAddress The hex encoded address of the Exchange contract to call. * @return The list of authorized addresses. */ public async getAuthorizedAddressesAsync(exchangeContractAddress: string): Promise {