diff options
Diffstat (limited to 'packages/contracts')
-rw-r--r-- | packages/contracts/package.json | 6 | ||||
-rw-r--r-- | packages/contracts/src/contracts/current/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol | 33 | ||||
-rw-r--r-- | packages/contracts/src/utils/exchange_wrapper.ts | 21 | ||||
-rw-r--r-- | packages/contracts/src/utils/types.ts | 3 | ||||
-rw-r--r-- | packages/contracts/test/asset_proxy/authorizable.ts (renamed from packages/contracts/test/asset_proxy_dispatcher/auth.ts) | 46 | ||||
-rw-r--r-- | packages/contracts/test/asset_proxy/proxies.ts (renamed from packages/contracts/test/asset_proxy_dispatcher/proxies.ts) | 25 | ||||
-rw-r--r-- | packages/contracts/test/exchange/core.ts | 69 | ||||
-rw-r--r-- | packages/contracts/test/exchange/dispatcher.ts (renamed from packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts) | 49 | ||||
-rw-r--r-- | packages/contracts/test/exchange/helpers.ts | 5 | ||||
-rw-r--r-- | packages/contracts/test/exchange/wrapper.ts | 40 |
10 files changed, 116 insertions, 181 deletions
diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 0cb6f3310..a85e9aa4f 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -19,7 +19,7 @@ "Yarn workspaces do not link binaries correctly so we need to reference them directly https://github.com/yarnpkg/yarn/issues/3846", "compile": "node ../deployer/lib/src/cli.js compile --contracts ${npm_package_config_contracts} --contracts-dir src/contracts --artifacts-dir ../migrations/src/artifacts", - "clean": "shx rm -rf ./lib", + "clean": "shx rm -rf ./lib ./src/contract_wrappers/generated", "generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'", "lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'", @@ -30,9 +30,9 @@ }, "config": { "abis": - "../migrations/src/artifacts/@(DummyERC20Token|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|AssetProxyDispatcher|ERC20Proxy|ERC721Proxy|DummyERC721Token|LibBytes).json", + "../migrations/src/artifacts/@(DummyERC20Token|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|TestAssetProxyDispatcher|ERC20Proxy|ERC721Proxy|DummyERC721Token|LibBytes|Authorizable).json", "contracts": - "Exchange,DummyERC20Token,ZRXToken,WETH9,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry,AssetProxyDispatcher,ERC20Proxy,ERC721Proxy,DummyERC721Token,LibBytes" + "Exchange,DummyERC20Token,ZRXToken,WETH9,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,TokenRegistry,TestAssetProxyDispatcher,ERC20Proxy,ERC721Proxy,DummyERC721Token,LibBytes,Authorizable" }, "repository": { "type": "git", diff --git a/packages/contracts/src/contracts/current/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol b/packages/contracts/src/contracts/current/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol new file mode 100644 index 000000000..8206b84bd --- /dev/null +++ b/packages/contracts/src/contracts/current/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol @@ -0,0 +1,33 @@ +/* + + Copyright 2018 ZeroEx Intl. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +pragma solidity ^0.4.21; + +import "../../protocol/Exchange/MixinAssetProxyDispatcher.sol"; + +contract TestAssetProxyDispatcher is MixinAssetProxyDispatcher { + function publicDispatchTransferFrom( + bytes memory assetMetadata, + address from, + address to, + uint256 amount) + public + { + dispatchTransferFrom(assetMetadata, from, to, amount); + } +} diff --git a/packages/contracts/src/utils/exchange_wrapper.ts b/packages/contracts/src/utils/exchange_wrapper.ts index 26ce8b04e..7d06c321b 100644 --- a/packages/contracts/src/utils/exchange_wrapper.ts +++ b/packages/contracts/src/utils/exchange_wrapper.ts @@ -9,7 +9,7 @@ import { constants } from './constants'; import { formatters } from './formatters'; import { LogDecoder } from './log_decoder'; import { orderUtils } from './order_utils'; -import { SignedOrder } from './types'; +import { AssetProxyId, SignedOrder } from './types'; export class ExchangeWrapper { private _exchange: ExchangeContract; @@ -189,7 +189,24 @@ export class ExchangeWrapper { const tx = await this._getTxWithDecodedExchangeLogsAsync(txHash); return tx; } - + public async registerAssetProxyAsync( + assetProxyId: AssetProxyId, + assetProxyAddress: string, + from: string, + opts: { oldAssetProxyAddressIfExists?: string } = {}, + ): Promise<TransactionReceiptWithDecodedLogs> { + const oldAssetProxyAddress = _.isUndefined(opts.oldAssetProxyAddressIfExists) + ? ZeroEx.NULL_ADDRESS + : opts.oldAssetProxyAddressIfExists; + const txHash = await this._exchange.registerAssetProxy.sendTransactionAsync( + assetProxyId, + assetProxyAddress, + oldAssetProxyAddress, + { from }, + ); + const tx = await this._getTxWithDecodedExchangeLogsAsync(txHash); + return tx; + } public async getOrderHashAsync(signedOrder: SignedOrder): Promise<string> { const order = orderUtils.getOrderStruct(signedOrder); const orderHash = await this._exchange.getOrderHash.callAsync(order); diff --git a/packages/contracts/src/utils/types.ts b/packages/contracts/src/utils/types.ts index 629187e95..bba463bd2 100644 --- a/packages/contracts/src/utils/types.ts +++ b/packages/contracts/src/utils/types.ts @@ -93,11 +93,12 @@ export enum ContractName { AccountLevels = 'AccountLevels', EtherDelta = 'EtherDelta', Arbitrage = 'Arbitrage', - AssetProxyDispatcher = 'AssetProxyDispatcher', + TestAssetProxyDispatcher = 'TestAssetProxyDispatcher', ERC20Proxy = 'ERC20Proxy', ERC721Proxy = 'ERC721Proxy', DummyERC721Token = 'DummyERC721Token', LibBytes = 'LibBytes', + Authorizable = 'Authorizable', } export interface Artifact { diff --git a/packages/contracts/test/asset_proxy_dispatcher/auth.ts b/packages/contracts/test/asset_proxy/authorizable.ts index 9d8645ab7..cc4f78a31 100644 --- a/packages/contracts/test/asset_proxy_dispatcher/auth.ts +++ b/packages/contracts/test/asset_proxy/authorizable.ts @@ -3,7 +3,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as chai from 'chai'; import * as Web3 from 'web3'; -import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher'; +import { AuthorizableContract } from '../../src/contract_wrappers/generated/authorizable'; import { constants } from '../../src/utils/constants'; import { ContractName } from '../../src/utils/types'; import { chaiSetup } from '../utils/chai_setup'; @@ -14,21 +14,17 @@ chaiSetup.configure(); const expect = chai.expect; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); -describe('AssetProxyDispatcher (Authorization Methods)', () => { +describe('Authorizable', () => { let owner: string; let notOwner: string; let address: string; - let assetProxyDispatcher: AssetProxyDispatcherContract; + let authorizable: AuthorizableContract; before(async () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); owner = address = accounts[0]; notOwner = accounts[1]; - const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher); - assetProxyDispatcher = new AssetProxyDispatcherContract( - assetProxyDispatcherInstance.abi, - assetProxyDispatcherInstance.address, - provider, - ); + const authorizableInstance = await deployer.deployAsync(ContractName.Authorizable); + authorizable = new AuthorizableContract(authorizableInstance.abi, authorizableInstance.address, provider); }); beforeEach(async () => { await blockchainLifecycle.startAsync(); @@ -39,44 +35,44 @@ describe('AssetProxyDispatcher (Authorization Methods)', () => { describe('addAuthorizedAddress', () => { it('should throw if not called by owner', async () => { return expect( - assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }), + authorizable.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }), ).to.be.rejectedWith(constants.REVERT); }); it('should allow owner to add an authorized address', async () => { - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); - const isAuthorized = await assetProxyDispatcher.authorized.callAsync(address); + await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); + const isAuthorized = await authorizable.authorized.callAsync(address); expect(isAuthorized).to.be.true(); }); it('should throw if owner attempts to authorize a duplicate address', async () => { - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); + await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); return expect( - assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }), + authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }), ).to.be.rejectedWith(constants.REVERT); }); }); describe('removeAuthorizedAddress', () => { it('should throw if not called by owner', async () => { - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); + await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); return expect( - assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, { + authorizable.removeAuthorizedAddress.sendTransactionAsync(address, { from: notOwner, }), ).to.be.rejectedWith(constants.REVERT); }); it('should allow owner to remove an authorized address', async () => { - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); - await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, { + await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }); + await authorizable.removeAuthorizedAddress.sendTransactionAsync(address, { from: owner, }); - const isAuthorized = await assetProxyDispatcher.authorized.callAsync(address); + const isAuthorized = await authorizable.authorized.callAsync(address); expect(isAuthorized).to.be.false(); }); it('should throw if owner attempts to remove an address that is not authorized', async () => { return expect( - assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, { + authorizable.removeAuthorizedAddress.sendTransactionAsync(address, { from: owner, }), ).to.be.rejectedWith(constants.REVERT); @@ -85,19 +81,19 @@ describe('AssetProxyDispatcher (Authorization Methods)', () => { describe('getAuthorizedAddresses', () => { it('should return all authorized addresses', async () => { - const initial = await assetProxyDispatcher.getAuthorizedAddresses.callAsync(); + const initial = await authorizable.getAuthorizedAddresses.callAsync(); expect(initial).to.have.length(0); - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { + await authorizable.addAuthorizedAddress.sendTransactionAsync(address, { from: owner, }); - const afterAdd = await assetProxyDispatcher.getAuthorizedAddresses.callAsync(); + const afterAdd = await authorizable.getAuthorizedAddresses.callAsync(); expect(afterAdd).to.have.length(1); expect(afterAdd).to.include(address); - await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, { + await authorizable.removeAuthorizedAddress.sendTransactionAsync(address, { from: owner, }); - const afterRemove = await assetProxyDispatcher.getAuthorizedAddresses.callAsync(); + const afterRemove = await authorizable.getAuthorizedAddresses.callAsync(); expect(afterRemove).to.have.length(0); }); }); diff --git a/packages/contracts/test/asset_proxy_dispatcher/proxies.ts b/packages/contracts/test/asset_proxy/proxies.ts index 830f40e13..8d60ef0e9 100644 --- a/packages/contracts/test/asset_proxy_dispatcher/proxies.ts +++ b/packages/contracts/test/asset_proxy/proxies.ts @@ -4,7 +4,6 @@ import { BigNumber } from '@0xproject/utils'; import * as chai from 'chai'; import * as Web3 from 'web3'; -import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher'; import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token'; import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token'; import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy'; @@ -25,7 +24,7 @@ const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); describe('Asset Transfer Proxies', () => { let owner: string; let notAuthorized: string; - let assetProxyDispatcherAddress: string; + let exchangeAddress: string; let makerAddress: string; let takerAddress: string; @@ -40,13 +39,7 @@ describe('Asset Transfer Proxies', () => { before(async () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); - const usedAddresses = ([ - owner, - notAuthorized, - assetProxyDispatcherAddress, - makerAddress, - takerAddress, - ] = accounts); + const usedAddresses = ([owner, notAuthorized, exchangeAddress, makerAddress, takerAddress] = accounts); erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner); erc721Wrapper = new ERC721Wrapper(deployer, provider, usedAddresses, owner); @@ -54,7 +47,7 @@ describe('Asset Transfer Proxies', () => { [zrx] = await erc20Wrapper.deployDummyERC20TokensAsync(); erc20Proxy = await erc20Wrapper.deployERC20ProxyAsync(); await erc20Wrapper.setBalancesAndAllowancesAsync(); - await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, { + await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, { from: owner, }); @@ -63,7 +56,7 @@ describe('Asset Transfer Proxies', () => { await erc721Wrapper.setBalancesAndAllowancesAsync(); const erc721Balances = await erc721Wrapper.getBalancesAsync(); erc721MakerTokenId = erc721Balances[makerAddress][erc721Token.address][0]; - await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, { + await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, { from: owner, }); }); @@ -85,7 +78,7 @@ describe('Asset Transfer Proxies', () => { makerAddress, takerAddress, amount, - { from: assetProxyDispatcherAddress }, + { from: exchangeAddress }, ); // Verify transfer was successful const newBalances = await erc20Wrapper.getBalancesAsync(); @@ -108,7 +101,7 @@ describe('Asset Transfer Proxies', () => { makerAddress, takerAddress, amount, - { from: assetProxyDispatcherAddress }, + { from: exchangeAddress }, ); // Verify transfer was successful const newBalances = await erc20Wrapper.getBalancesAsync(); @@ -169,7 +162,7 @@ describe('Asset Transfer Proxies', () => { makerAddress, takerAddress, amount, - { from: assetProxyDispatcherAddress }, + { from: exchangeAddress }, ); // Verify transfer was successful const newOwnerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId); @@ -191,7 +184,7 @@ describe('Asset Transfer Proxies', () => { makerAddress, takerAddress, amount, - { from: assetProxyDispatcherAddress }, + { from: exchangeAddress }, ), ).to.be.rejectedWith(constants.REVERT); }); @@ -211,7 +204,7 @@ describe('Asset Transfer Proxies', () => { makerAddress, takerAddress, amount, - { from: assetProxyDispatcherAddress }, + { from: exchangeAddress }, ), ).to.be.rejectedWith(constants.REVERT); }); diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts index 9065c5e3f..4d462826a 100644 --- a/packages/contracts/test/exchange/core.ts +++ b/packages/contracts/test/exchange/core.ts @@ -5,7 +5,6 @@ import * as chai from 'chai'; import ethUtil = require('ethereumjs-util'); import * as _ from 'lodash'; -import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher'; import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token'; import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token'; import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy'; @@ -51,7 +50,6 @@ describe('Exchange core', () => { let zrx: DummyERC20TokenContract; let erc721Token: DummyERC721TokenContract; let exchange: ExchangeContract; - let assetProxyDispatcher: AssetProxyDispatcherContract; let erc20Proxy: ERC20ProxyContract; let erc721Proxy: ERC721ProxyContract; @@ -88,44 +86,24 @@ describe('Exchange core', () => { erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address]; erc721TakerAssetIds = erc721Balances[takerAddress][erc721Token.address]; - const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher); - assetProxyDispatcher = new AssetProxyDispatcherContract( - assetProxyDispatcherInstance.abi, - assetProxyDispatcherInstance.address, - provider, - ); - const prevERC20ProxyAddress = ZeroEx.NULL_ADDRESS; - await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync( - AssetProxyId.ERC20, - erc20Proxy.address, - prevERC20ProxyAddress, - { from: owner }, - ); - const prevERC721ProxyAddress = ZeroEx.NULL_ADDRESS; - await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync( - AssetProxyId.ERC721, - erc721Proxy.address, - prevERC721ProxyAddress, - { from: owner }, - ); - await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { - from: owner, - }); - await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { - from: owner, - }); - const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [ - assetProxyDispatcher.address, assetProxyUtils.encodeERC20ProxyData(zrx.address), ]); exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider); - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner }); zeroEx = new ZeroEx(provider, { exchangeContractAddress: exchange.address, networkId: constants.TESTRPC_NETWORK_ID, }); exchangeWrapper = new ExchangeWrapper(exchange, zeroEx); + await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC20, erc20Proxy.address, owner); + await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC721, erc721Proxy.address, owner); + + await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }); + await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }); defaultMakerAssetAddress = erc20TokenA.address; defaultTakerAssetAddress = erc20TokenB.address; @@ -467,35 +445,6 @@ describe('Exchange core', () => { expect(orderUtils.getOrderHashHex(signedOrder)).to.be.equal(logArgs.orderHash); }); - it('should log 1 event with the correct arguments when order has no feeRecipient', async () => { - signedOrder = orderFactory.newSignedOrder({ - feeRecipientAddress: ZeroEx.NULL_ADDRESS, - }); - const divisor = 2; - const res = await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { - takerAssetFillAmount: signedOrder.takerAssetAmount.div(divisor), - }); - expect(res.logs).to.have.length(1); - - const log = res.logs[0] as LogWithDecodedArgs<FillContractEventArgs>; - const logArgs = log.args; - const expectedFilledMakerAssetAmount = signedOrder.makerAssetAmount.div(divisor); - const expectedFilledTakerAssetAmount = signedOrder.takerAssetAmount.div(divisor); - const expectedFeeMPaid = new BigNumber(0); - const expectedFeeTPaid = new BigNumber(0); - - expect(signedOrder.makerAddress).to.be.equal(logArgs.makerAddress); - expect(takerAddress).to.be.equal(logArgs.takerAddress); - expect(signedOrder.feeRecipientAddress).to.be.equal(logArgs.feeRecipientAddress); - expect(signedOrder.makerAssetData).to.be.equal(logArgs.makerAssetData); - expect(signedOrder.takerAssetData).to.be.equal(logArgs.takerAssetData); - expect(expectedFilledMakerAssetAmount).to.be.bignumber.equal(logArgs.makerAssetFilledAmount); - expect(expectedFilledTakerAssetAmount).to.be.bignumber.equal(logArgs.takerAssetFilledAmount); - expect(expectedFeeMPaid).to.be.bignumber.equal(logArgs.makerFeePaid); - expect(expectedFeeTPaid).to.be.bignumber.equal(logArgs.takerFeePaid); - expect(orderUtils.getOrderHashHex(signedOrder)).to.be.equal(logArgs.orderHash); - }); - it('should throw when taker is specified and order is claimed by other', async () => { signedOrder = orderFactory.newSignedOrder({ takerAddress: feeRecipientAddress, diff --git a/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts b/packages/contracts/test/exchange/dispatcher.ts index b5630d807..7d40bcfe3 100644 --- a/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts +++ b/packages/contracts/test/exchange/dispatcher.ts @@ -4,10 +4,10 @@ import { BigNumber } from '@0xproject/utils'; import * as chai from 'chai'; import * as Web3 from 'web3'; -import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher'; import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token'; import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy'; import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy'; +import { TestAssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/test_asset_proxy_dispatcher'; import { assetProxyUtils } from '../../src/utils/asset_proxy_utils'; import { constants } from '../../src/utils/constants'; import { ERC20Wrapper } from '../../src/utils/erc20_wrapper'; @@ -25,14 +25,13 @@ describe('AssetProxyDispatcher', () => { let owner: string; let notOwner: string; let notAuthorized: string; - let exchangeAddress: string; let makerAddress: string; let takerAddress: string; let zrx: DummyERC20TokenContract; let erc20Proxy: ERC20ProxyContract; let erc721Proxy: ERC721ProxyContract; - let assetProxyDispatcher: AssetProxyDispatcherContract; + let assetProxyDispatcher: TestAssetProxyDispatcherContract; let erc20Wrapper: ERC20Wrapper; let erc721Wrapper: ERC721Wrapper; @@ -40,7 +39,7 @@ describe('AssetProxyDispatcher', () => { before(async () => { // Setup accounts & addresses const accounts = await web3Wrapper.getAvailableAddressesAsync(); - const usedAddresses = ([owner, notOwner, exchangeAddress, makerAddress, takerAddress] = accounts); + const usedAddresses = ([owner, notOwner, makerAddress, takerAddress] = accounts); notAuthorized = notOwner; erc20Wrapper = new ERC20Wrapper(deployer, provider, usedAddresses, owner); @@ -52,15 +51,12 @@ describe('AssetProxyDispatcher', () => { erc721Proxy = await erc721Wrapper.deployERC721ProxyAsync(); - const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher); - assetProxyDispatcher = new AssetProxyDispatcherContract( + const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.TestAssetProxyDispatcher); + assetProxyDispatcher = new TestAssetProxyDispatcherContract( assetProxyDispatcherInstance.abi, assetProxyDispatcherInstance.address, provider, ); - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, { - from: owner, - }); await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { from: owner, }); @@ -219,7 +215,7 @@ describe('AssetProxyDispatcher', () => { }); }); - describe('transferFrom', () => { + describe('dispatchTransferFrom', () => { it('should dispatch transfer to registered proxy', async () => { // Register ERC20 proxy const prevProxyAddress = ZeroEx.NULL_ADDRESS; @@ -234,12 +230,12 @@ describe('AssetProxyDispatcher', () => { // Perform a transfer from makerAddress to takerAddress const erc20Balances = await erc20Wrapper.getBalancesAsync(); const amount = new BigNumber(10); - await assetProxyDispatcher.transferFrom.sendTransactionAsync( + await assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync( encodedProxyMetadata, makerAddress, takerAddress, amount, - { from: exchangeAddress }, + { from: owner }, ); // Verify transfer was successful const newBalances = await erc20Wrapper.getBalancesAsync(); @@ -258,37 +254,12 @@ describe('AssetProxyDispatcher', () => { const erc20Balances = await erc20Wrapper.getBalancesAsync(); const amount = new BigNumber(10); return expect( - assetProxyDispatcher.transferFrom.sendTransactionAsync( - encodedProxyMetadata, - makerAddress, - takerAddress, - amount, - { from: exchangeAddress }, - ), - ).to.be.rejectedWith(constants.REVERT); - }); - - it('should throw on transfer if requesting address is not authorized', async () => { - // Register ERC20 proxy - const prevProxyAddress = ZeroEx.NULL_ADDRESS; - await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync( - AssetProxyId.ERC20, - erc20Proxy.address, - prevProxyAddress, - { from: owner }, - ); - // Construct metadata for ERC20 proxy - const encodedProxyMetadata = assetProxyUtils.encodeERC20ProxyData(zrx.address); - // Perform a transfer from makerAddress to takerAddress - const erc20Balances = await erc20Wrapper.getBalancesAsync(); - const amount = new BigNumber(10); - return expect( - assetProxyDispatcher.transferFrom.sendTransactionAsync( + assetProxyDispatcher.publicDispatchTransferFrom.sendTransactionAsync( encodedProxyMetadata, makerAddress, takerAddress, amount, - { from: notAuthorized }, + { from: owner }, ), ).to.be.rejectedWith(constants.REVERT); }); diff --git a/packages/contracts/test/exchange/helpers.ts b/packages/contracts/test/exchange/helpers.ts index a5c2ca8d5..f986665ff 100644 --- a/packages/contracts/test/exchange/helpers.ts +++ b/packages/contracts/test/exchange/helpers.ts @@ -29,10 +29,7 @@ describe('Exchange helpers', () => { before(async () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); const makerAddress = accounts[0]; - const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [ - ZeroEx.NULL_ADDRESS, - AssetProxyId.ERC20, - ]); + const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [AssetProxyId.ERC20]); const exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider); const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID }); exchangeWrapper = new ExchangeWrapper(exchange, zeroEx); diff --git a/packages/contracts/test/exchange/wrapper.ts b/packages/contracts/test/exchange/wrapper.ts index 60f47373e..1d40bd3d9 100644 --- a/packages/contracts/test/exchange/wrapper.ts +++ b/packages/contracts/test/exchange/wrapper.ts @@ -6,7 +6,6 @@ import * as chai from 'chai'; import * as _ from 'lodash'; import * as Web3 from 'web3'; -import { AssetProxyDispatcherContract } from '../../src/contract_wrappers/generated/asset_proxy_dispatcher'; import { DummyERC20TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c20_token'; import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/dummy_e_r_c721_token'; import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy'; @@ -45,7 +44,6 @@ describe('Exchange wrappers', () => { let zrx: DummyERC20TokenContract; let erc721Token: DummyERC721TokenContract; let exchange: ExchangeContract; - let assetProxyDispatcher: AssetProxyDispatcherContract; let erc20Proxy: ERC20ProxyContract; let erc721Proxy: ERC721ProxyContract; @@ -81,44 +79,24 @@ describe('Exchange wrappers', () => { erc721MakerAssetId = erc721Balances[makerAddress][erc721Token.address][0]; erc721TakerAssetId = erc721Balances[takerAddress][erc721Token.address][0]; - const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher); - assetProxyDispatcher = new AssetProxyDispatcherContract( - assetProxyDispatcherInstance.abi, - assetProxyDispatcherInstance.address, - provider, - ); - const prevERC20ProxyAddress = ZeroEx.NULL_ADDRESS; - await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync( - AssetProxyId.ERC20, - erc20Proxy.address, - prevERC20ProxyAddress, - { from: owner }, - ); - const prevERC721ProxyAddress = ZeroEx.NULL_ADDRESS; - await assetProxyDispatcher.registerAssetProxy.sendTransactionAsync( - AssetProxyId.ERC721, - erc721Proxy.address, - prevERC721ProxyAddress, - { from: owner }, - ); - await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { - from: owner, - }); - await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { - from: owner, - }); - const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [ - assetProxyDispatcher.address, assetProxyUtils.encodeERC20ProxyData(zrx.address), ]); exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider); - await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner }); zeroEx = new ZeroEx(provider, { exchangeContractAddress: exchange.address, networkId: constants.TESTRPC_NETWORK_ID, }); exchangeWrapper = new ExchangeWrapper(exchange, zeroEx); + await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC20, erc20Proxy.address, owner); + await exchangeWrapper.registerAssetProxyAsync(AssetProxyId.ERC721, erc721Proxy.address, owner); + + await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }); + await erc721Proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }); defaultMakerAssetAddress = erc20TokenA.address; defaultTakerAssetAddress = erc20TokenB.address; |