aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/test/asset_proxy_dispatcher
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-04-17 08:33:55 +0800
committerAmir Bandeali <abandeali1@gmail.com>2018-04-21 04:56:18 +0800
commitc19fb1dffcca820e1e82b5baad4b126abda8d112 (patch)
treeb899bd223172aed975e0fc3f5aca9e4b5a17c8bc /packages/contracts/test/asset_proxy_dispatcher
parent436a6605fb990d4c7aaea5688aefad73dee4d748 (diff)
downloaddexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar.gz
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar.bz2
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar.lz
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar.xz
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.tar.zst
dexon-sol-tools-c19fb1dffcca820e1e82b5baad4b126abda8d112.zip
Removed ERC20 V1 Proxy + TokenTransferProxy
Diffstat (limited to 'packages/contracts/test/asset_proxy_dispatcher')
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/auth.ts104
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts28
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/proxies.ts167
3 files changed, 148 insertions, 151 deletions
diff --git a/packages/contracts/test/asset_proxy_dispatcher/auth.ts b/packages/contracts/test/asset_proxy_dispatcher/auth.ts
new file mode 100644
index 000000000..ded5ff287
--- /dev/null
+++ b/packages/contracts/test/asset_proxy_dispatcher/auth.ts
@@ -0,0 +1,104 @@
+import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
+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 { constants } from '../../src/utils/constants';
+import { ContractName } from '../../src/utils/types';
+import { chaiSetup } from '../utils/chai_setup';
+import { deployer } from '../utils/deployer';
+import { provider, web3Wrapper } from '../utils/web3_wrapper';
+
+chaiSetup.configure();
+const expect = chai.expect;
+const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
+
+describe('AssetProxyDispatcher - Auth', () => {
+ let owner: string;
+ let notOwner: string;
+ let address: string;
+ let assetProxyDispatcher: AssetProxyDispatcherContract;
+ 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,
+ );
+ });
+ beforeEach(async () => {
+ await blockchainLifecycle.startAsync();
+ });
+ afterEach(async () => {
+ await blockchainLifecycle.revertAsync();
+ });
+ describe('addAuthorizedAddress', () => {
+ it('should throw if not called by owner', async () => {
+ return expect(
+ assetProxyDispatcher.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);
+ expect(isAuthorized).to.be.true();
+ });
+ it('should throw if owner attempts to authorize a duplicate address', async () => {
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ return expect(
+ assetProxyDispatcher.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 });
+ return expect(
+ assetProxyDispatcher.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, {
+ from: owner,
+ });
+ const isAuthorized = await assetProxyDispatcher.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, {
+ from: owner,
+ }),
+ ).to.be.rejectedWith(constants.REVERT);
+ });
+ });
+
+ describe('getAuthorizedAddresses', () => {
+ it('should return all authorized addresses', async () => {
+ const initial = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
+ expect(initial).to.have.length(0);
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, {
+ from: owner,
+ });
+ const afterAdd = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
+ expect(afterAdd).to.have.length(1);
+ expect(afterAdd).to.include(address);
+
+ await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
+ from: owner,
+ });
+ const afterRemove = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
+ expect(afterRemove).to.have.length(0);
+ });
+ });
+});
diff --git a/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts b/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts
index 606965743..103bce10d 100644
--- a/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts
+++ b/packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts
@@ -10,9 +10,7 @@ import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/
import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
-import { ERC20Proxy_v1Contract } from '../../src/contract_wrappers/generated/erc20proxy_v1';
-import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
-import { encodeERC20ProxyData, encodeERC20V1ProxyData, encodeERC721ProxyData } from '../../src/utils/asset_proxy_utils';
+import { encodeERC20ProxyData, encodeERC721ProxyData } from '../../src/utils/asset_proxy_utils';
import { Balances } from '../../src/utils/balances';
import { constants } from '../../src/utils/constants';
import { AssetProxyId, ContractName } from '../../src/utils/types';
@@ -34,9 +32,7 @@ describe('AssetProxyDispatcher', () => {
let takerAddress: string;
let zrx: DummyTokenContract;
let dmyBalances: Balances;
- let tokenTransferProxy: TokenTransferProxyContract;
let assetProxyDispatcher: AssetProxyDispatcherContract;
- let erc20TransferProxyV1: ERC20Proxy_v1Contract;
let erc20TransferProxy: ERC20ProxyContract;
let erc721TransferProxy: ERC721ProxyContract;
const INITIAL_BALANCE = new BigNumber(10000);
@@ -59,28 +55,6 @@ describe('AssetProxyDispatcher', () => {
await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(exchangeAddress, {
from: owner,
});
- // Deploy TokenTransferProxy
- const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
- tokenTransferProxy = new TokenTransferProxyContract(
- tokenTransferProxyInstance.abi,
- tokenTransferProxyInstance.address,
- provider,
- );
- // Deploy ERC20 V1 Proxy
- const erc20TransferProxyV1Instance = await deployer.deployAsync(ContractName.ERC20V1Proxy, [
- tokenTransferProxy.address,
- ]);
- erc20TransferProxyV1 = new ERC20Proxy_v1Contract(
- erc20TransferProxyV1Instance.abi,
- erc20TransferProxyV1Instance.address,
- provider,
- );
- await erc20TransferProxyV1.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, {
- from: owner,
- });
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(erc20TransferProxyV1.address, {
- from: owner,
- });
// Deploy ERC20 Proxy
const erc20TransferProxyInstance = await deployer.deployAsync(ContractName.ERC20Proxy);
erc20TransferProxy = new ERC20ProxyContract(
diff --git a/packages/contracts/test/asset_proxy_dispatcher/proxies.ts b/packages/contracts/test/asset_proxy_dispatcher/proxies.ts
index 6ffc5c998..b7adf5a7e 100644
--- a/packages/contracts/test/asset_proxy_dispatcher/proxies.ts
+++ b/packages/contracts/test/asset_proxy_dispatcher/proxies.ts
@@ -10,9 +10,7 @@ import { DummyERC721TokenContract } from '../../src/contract_wrappers/generated/
import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
import { ERC20ProxyContract } from '../../src/contract_wrappers/generated/e_r_c20_proxy';
import { ERC721ProxyContract } from '../../src/contract_wrappers/generated/e_r_c721_proxy';
-import { ERC20Proxy_v1Contract } from '../../src/contract_wrappers/generated/erc20proxy_v1';
-import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
-import { encodeERC20ProxyData, encodeERC20V1ProxyData, encodeERC721ProxyData } from '../../src/utils/asset_proxy_utils';
+import { encodeERC20ProxyData, encodeERC721ProxyData } from '../../src/utils/asset_proxy_utils';
import { Balances } from '../../src/utils/balances';
import { constants } from '../../src/utils/constants';
import { AssetProxyId, ContractName } from '../../src/utils/types';
@@ -34,8 +32,6 @@ describe('Asset Transfer Proxies', () => {
let zrx: DummyTokenContract;
let erc721Token: DummyERC721TokenContract;
let dmyBalances: Balances;
- let tokenTransferProxy: TokenTransferProxyContract;
- let erc20TransferProxyV1: ERC20Proxy_v1Contract;
let erc20TransferProxy: ERC20ProxyContract;
let erc721TransferProxy: ERC721ProxyContract;
const makerTokenId = new BigNumber('0x1010101010101010101010101010101010101010101010101010101010101010');
@@ -50,28 +46,6 @@ describe('Asset Transfer Proxies', () => {
assetProxyDispatcherAddress = accounts[2];
makerAddress = accounts[3];
takerAddress = accounts[4];
- // Deploy TokenTransferProxy
- const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
- tokenTransferProxy = new TokenTransferProxyContract(
- tokenTransferProxyInstance.abi,
- tokenTransferProxyInstance.address,
- provider,
- );
- // Deploy ERC20 V1 Proxy
- const erc20TransferProxyV1Instance = await deployer.deployAsync(ContractName.ERC20V1Proxy, [
- tokenTransferProxy.address,
- ]);
- erc20TransferProxyV1 = new ERC20Proxy_v1Contract(
- erc20TransferProxyV1Instance.abi,
- erc20TransferProxyV1Instance.address,
- provider,
- );
- await erc20TransferProxyV1.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcherAddress, {
- from: owner,
- });
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(erc20TransferProxyV1.address, {
- from: owner,
- });
// Deploy ERC20 Proxy
const erc20TransferProxyInstance = await deployer.deployAsync(ContractName.ERC20Proxy);
erc20TransferProxy = new ERC20ProxyContract(
@@ -98,12 +72,6 @@ describe('Asset Transfer Proxies', () => {
await zrx.setBalance.sendTransactionAsync(makerAddress, INITIAL_BALANCE, { from: tokenOwner });
await zrx.setBalance.sendTransactionAsync(takerAddress, INITIAL_BALANCE, { from: tokenOwner });
dmyBalances = new Balances([zrx], [makerAddress, takerAddress]);
- await zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_BALANCE, {
- from: takerAddress,
- });
- await zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_BALANCE, {
- from: makerAddress,
- });
await zrx.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_BALANCE, {
from: takerAddress,
});
@@ -130,94 +98,6 @@ describe('Asset Transfer Proxies', () => {
afterEach(async () => {
await blockchainLifecycle.revertAsync();
});
- describe('Transfer Proxy - ERC20V1', () => {
- it('should successfully encode/decode metadata', async () => {
- const metadata = await erc20TransferProxyV1.encodeMetadata.callAsync(AssetProxyId.ERC20V1, zrx.address);
- const address = await erc20TransferProxyV1.decodeMetadata.callAsync(metadata);
- expect(address).to.be.equal(zrx.address);
- });
-
- it('should successfully decode metadata encoded by typescript helpers', async () => {
- const metadata = encodeERC20V1ProxyData(zrx.address);
- const address = await erc20TransferProxyV1.decodeMetadata.callAsync(metadata);
- expect(address).to.be.equal(zrx.address);
- });
-
- it('should successfully encode/decode metadata padded with zeros', async () => {
- const metadata = await erc20TransferProxyV1.encodeMetadata.callAsync(
- AssetProxyId.ERC20V1,
- testAddressPaddedWithZeros,
- );
- const address = await erc20TransferProxyV1.decodeMetadata.callAsync(metadata);
- expect(address).to.be.equal(testAddressPaddedWithZeros);
- });
-
- it('should successfully decode metadata padded with zeros and encoded by typescript helpers', async () => {
- const metadata = encodeERC20V1ProxyData(testAddressPaddedWithZeros);
- const address = await erc20TransferProxyV1.decodeMetadata.callAsync(metadata);
- expect(address).to.be.equal(testAddressPaddedWithZeros);
- });
-
- it('should successfully transfer tokens', async () => {
- // Construct metadata for ERC20V1 proxy
- const encodedProxyMetadata = encodeERC20V1ProxyData(zrx.address);
- // Perform a transfer from makerAddress to takerAddress
- const balances = await dmyBalances.getAsync();
- const amount = new BigNumber(10);
- await erc20TransferProxyV1.transferFrom.sendTransactionAsync(
- encodedProxyMetadata,
- makerAddress,
- takerAddress,
- amount,
- { from: assetProxyDispatcherAddress },
- );
- // Verify transfer was successful
- const newBalances = await dmyBalances.getAsync();
- expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(
- balances[makerAddress][zrx.address].minus(amount),
- );
- expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(
- balances[takerAddress][zrx.address].add(amount),
- );
- });
-
- it('should do nothing if transferring 0 amount of a token', async () => {
- // Construct metadata for ERC20V1 proxy
- const encodedProxyMetadata = encodeERC20V1ProxyData(zrx.address);
- // Perform a transfer from makerAddress to takerAddress
- const balances = await dmyBalances.getAsync();
- const amount = new BigNumber(0);
- await erc20TransferProxyV1.transferFrom.sendTransactionAsync(
- encodedProxyMetadata,
- makerAddress,
- takerAddress,
- amount,
- { from: assetProxyDispatcherAddress },
- );
- // Verify transfer was successful
- const newBalances = await dmyBalances.getAsync();
- expect(newBalances[makerAddress][zrx.address]).to.be.bignumber.equal(balances[makerAddress][zrx.address]);
- expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(balances[takerAddress][zrx.address]);
- });
-
- it('should throw if requesting address is not authorized', async () => {
- // Construct metadata for ERC20V1 proxy
- const encodedProxyMetadata = encodeERC20V1ProxyData(zrx.address);
- // Perform a transfer from makerAddress to takerAddress
- const balances = await dmyBalances.getAsync();
- const amount = new BigNumber(10);
- return expect(
- erc20TransferProxyV1.transferFrom.sendTransactionAsync(
- encodedProxyMetadata,
- makerAddress,
- takerAddress,
- amount,
- { from: notAuthorized },
- ),
- ).to.be.rejectedWith(constants.REVERT);
- });
- });
-
describe('Transfer Proxy - ERC20', () => {
it('should successfully encode/decode metadata', async () => {
const metadata = await erc20TransferProxy.encodeMetadata.callAsync(AssetProxyId.ERC20, zrx.address);
@@ -288,11 +168,31 @@ describe('Asset Transfer Proxies', () => {
expect(newBalances[takerAddress][zrx.address]).to.be.bignumber.equal(balances[takerAddress][zrx.address]);
});
+ it('should throw if allowances are too low', async () => {
+ // Construct metadata for ERC20 proxy
+ const encodedProxyMetadata = encodeERC20ProxyData(zrx.address);
+ // Create allowance less than transfer amount. Set allowance on proxy.
+ const allowance = new BigNumber(0);
+ const transferAmount = new BigNumber(10);
+ await zrx.approve.sendTransactionAsync(erc20TransferProxy.address, allowance, {
+ from: makerAddress,
+ });
+ // Perform a transfer; expect this to fail.
+ return expect(
+ erc20TransferProxy.transferFrom.sendTransactionAsync(
+ encodedProxyMetadata,
+ makerAddress,
+ takerAddress,
+ transferAmount,
+ { from: notAuthorized },
+ ),
+ ).to.be.rejectedWith(constants.REVERT);
+ });
+
it('should throw if requesting address is not authorized', async () => {
// Construct metadata for ERC20 proxy
const encodedProxyMetadata = encodeERC20ProxyData(zrx.address);
// Perform a transfer from makerAddress to takerAddress
- const balances = await dmyBalances.getAsync();
const amount = new BigNumber(10);
return expect(
erc20TransferProxy.transferFrom.sendTransactionAsync(
@@ -404,11 +304,30 @@ describe('Asset Transfer Proxies', () => {
).to.be.rejectedWith(constants.REVERT);
});
+ it('should throw if allowances are too low', async () => {
+ // Construct metadata for ERC721 proxy
+ const encodedProxyMetadata = encodeERC721ProxyData(erc721Token.address, makerTokenId);
+ // Remove transfer approval for makerAddress.
+ await erc721Token.setApprovalForAll.sendTransactionAsync(erc721TransferProxy.address, false, {
+ from: makerAddress,
+ });
+ // Perform a transfer; expect this to fail.
+ const amount = new BigNumber(1);
+ return expect(
+ erc20TransferProxy.transferFrom.sendTransactionAsync(
+ encodedProxyMetadata,
+ makerAddress,
+ takerAddress,
+ amount,
+ { from: notAuthorized },
+ ),
+ ).to.be.rejectedWith(constants.REVERT);
+ });
+
it('should throw if requesting address is not authorized', async () => {
// Construct metadata for ERC721 proxy
- const encodedProxyMetadata = encodeERC721ProxyData(zrx.address, makerTokenId);
+ const encodedProxyMetadata = encodeERC721ProxyData(erc721Token.address, makerTokenId);
// Perform a transfer from makerAddress to takerAddress
- const balances = await dmyBalances.getAsync();
const amount = new BigNumber(1);
return expect(
erc721TransferProxy.transferFrom.sendTransactionAsync(