aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/contracts/package.json4
-rw-r--r--packages/contracts/src/contracts/current/protocol/AssetProxyDispatcher/proxies/ERC20Proxy_v1.sol90
-rw-r--r--packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol1
-rw-r--r--packages/contracts/src/contracts/current/protocol/Exchange/IExchange.sol4
-rw-r--r--packages/contracts/src/contracts/current/protocol/TokenTransferProxy/ITokenTransferProxy.sol72
-rw-r--r--packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol115
-rw-r--r--packages/contracts/src/contracts/current/utils/Authorizable/IAuthorizable.sol1
-rw-r--r--packages/contracts/src/utils/artifacts.ts2
-rw-r--r--packages/contracts/src/utils/asset_proxy_utils.ts8
-rw-r--r--packages/contracts/src/utils/types.ts3
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/auth.ts (renamed from packages/contracts/test/token_transfer_proxy/auth.ts)46
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/dispatcher.ts28
-rw-r--r--packages/contracts/test/asset_proxy_dispatcher/proxies.ts167
-rw-r--r--packages/contracts/test/exchange/core.ts60
-rw-r--r--packages/contracts/test/exchange/helpers.ts1
-rw-r--r--packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts8
-rw-r--r--packages/contracts/test/token_transfer_proxy/transfer_from.ts103
17 files changed, 82 insertions, 631 deletions
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index fbe87e18e..d4bab4dca 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -26,8 +26,8 @@
"test:circleci": "yarn test:coverage"
},
"config": {
- "abis": "../migrations/src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|AssetProxyDispatcher|ERC20Proxy_v1|ERC20Proxy|ERC721Proxy|DummyERC721Token).json",
- "contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,AssetProxyDispatcher,ERC20Proxy_v1,ERC20Proxy,ERC721Proxy,DummyERC721Token",
+ "abis": "../migrations/src/artifacts/@(DummyToken|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|AssetProxyDispatcher|ERC20Proxy|ERC721Proxy|DummyERC721Token).json",
+ "contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,AssetProxyDispatcher,ERC20Proxy,ERC721Proxy,DummyERC721Token",
"dirs": "src/contracts,zeppelin:../../node_modules/zeppelin-solidity"
},
"repository": {
diff --git a/packages/contracts/src/contracts/current/protocol/AssetProxyDispatcher/proxies/ERC20Proxy_v1.sol b/packages/contracts/src/contracts/current/protocol/AssetProxyDispatcher/proxies/ERC20Proxy_v1.sol
deleted file mode 100644
index 161362edb..000000000
--- a/packages/contracts/src/contracts/current/protocol/AssetProxyDispatcher/proxies/ERC20Proxy_v1.sol
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-
- 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 "../IAssetProxy.sol";
-import "../../../utils/LibBytes/LibBytes.sol";
-import "../../../utils/Authorizable/Authorizable.sol";
-import { ITokenTransferProxy as ITokenTransferProxy_v1 } from "../../TokenTransferProxy/ITokenTransferProxy.sol";
-
-contract ERC20Proxy_v1 is
- LibBytes,
- Authorizable,
- IAssetProxy
-{
- ITokenTransferProxy_v1 TRANSFER_PROXY;
-
- /// @dev Contract constructor.
- /// @param tokenTransferProxyContract erc20 token transfer proxy contract.
- function ERC20Proxy_v1(ITokenTransferProxy_v1 tokenTransferProxyContract)
- public
- {
- // TODO: Hardcode this address for production.
- TRANSFER_PROXY = tokenTransferProxyContract;
- }
-
- /// @dev Transfers ERC20 tokens via the v1 TokenTransferProxy. Either succeeds or throws.
- /// @param assetMetadata Byte array encoded for the respective asset proxy.
- /// @param from Address to transfer token from.
- /// @param to Address to transfer token to.
- /// @param amount Amount of token to transfer.
- function transferFrom(
- bytes assetMetadata,
- address from,
- address to,
- uint256 amount)
- external
- onlyAuthorized
- {
- address token = decodeMetadata(assetMetadata);
- bool success = TRANSFER_PROXY.transferFrom(token, from, to, amount);
- require(success == true);
- }
-
- /// @dev Decodes ERC20-encoded byte array.
- /// @param assetMetadata ERC20-encoded byte array.
- /// @return tokenAddress Address of ERC20 token.
- function decodeMetadata(bytes memory assetMetadata)
- public pure
- returns (address tokenAddress)
- {
- require(assetMetadata.length == 21);
- return readAddress(assetMetadata, 1);
- }
-
- /// @dev Encodes ERC20 byte array.
- /// @param assetProxyId Id of the asset proxy.
- /// @param tokenAddress Address of the asset.
- /// @return assetMetadata ERC20-encoded byte.
- function encodeMetadata(
- uint8 assetProxyId,
- address tokenAddress)
- public pure
- returns (bytes memory assetMetadata)
- {
- // 0 is reserved as invalid proxy id
- require(assetProxyId != 0);
-
- // Encode fields into a byte array
- assetMetadata = new bytes(21);
- assetMetadata[0] = byte(assetProxyId);
- writeAddress(assetMetadata, 1, tokenAddress);
- return assetMetadata;
- }
-}
diff --git a/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol b/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol
index 9abc19b86..91136b29f 100644
--- a/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol
+++ b/packages/contracts/src/contracts/current/protocol/Exchange/Exchange.sol
@@ -24,7 +24,6 @@ import "./MixinSignatureValidator.sol";
import "./MixinSettlementProxy.sol";
import "./MixinWrapperFunctions.sol";
import "../AssetProxyDispatcher/IAssetProxyDispatcher.sol";
-import "../TokenTransferProxy/ITokenTransferProxy.sol";
contract Exchange is
MixinExchangeCore,
diff --git a/packages/contracts/src/contracts/current/protocol/Exchange/IExchange.sol b/packages/contracts/src/contracts/current/protocol/Exchange/IExchange.sol
index 083966425..3af51e915 100644
--- a/packages/contracts/src/contracts/current/protocol/Exchange/IExchange.sol
+++ b/packages/contracts/src/contracts/current/protocol/Exchange/IExchange.sol
@@ -58,10 +58,6 @@ contract IExchange {
public view
returns (address);
- function TOKEN_TRANSFER_PROXY_CONTRACT()
- public view
- returns (address);
-
function EXTERNAL_QUERY_GAS_LIMIT()
public view
returns (uint16);
diff --git a/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/ITokenTransferProxy.sol b/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/ITokenTransferProxy.sol
deleted file mode 100644
index 456f7065b..000000000
--- a/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/ITokenTransferProxy.sol
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-
- 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 { IOwnable_v1 as IOwnable } from "../../../previous/Ownable/IOwnable_v1.sol";
-
-/// @title TokenTransferProxy - Transfers tokens on behalf of contracts that have been approved via decentralized governance.
-/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>
-contract ITokenTransferProxy is IOwnable {
-
- function authorized(address addr)
- public view
- returns (bool);
-
- function authorities(uint256 index)
- public view
- returns (address);
-
- /// @dev Gets all authorized addresses.
- /// @return Array of authorized addresses.
- function getAuthorizedAddresses()
- public view
- returns (address[]);
-
- /// @dev Authorizes an address.
- /// @param target Address to authorize.
- function addAuthorizedAddress(address target)
- public;
-
- /// @dev Removes authorizion of an address.
- /// @param target Address to remove authorization from.
- function removeAuthorizedAddress(address target)
- public;
-
- /// @dev Calls into ERC20 Token contract, invoking transferFrom.
- /// @param token Address of token to transfer.
- /// @param from Address to transfer token from.
- /// @param to Address to transfer token to.
- /// @param value Amount of token to transfer.
- /// @return Success of transfer.
- function transferFrom(
- address token,
- address from,
- address to,
- uint value)
- public
- returns (bool);
-
- event LogAuthorizedAddressAdded(
- address indexed target,
- address indexed caller);
-
- event LogAuthorizedAddressRemoved(
- address indexed target,
- address indexed caller);
-}
diff --git a/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol b/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
deleted file mode 100644
index 6c4d5fbcf..000000000
--- a/packages/contracts/src/contracts/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-
- 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.11;
-
-import { Token_v1 as Token } from "../../../previous/Token/Token_v1.sol";
-import { Ownable_v1 as Ownable } from "../../../previous/Ownable/Ownable_v1.sol";
-
-/// @title TokenTransferProxy - Transfers tokens on behalf of contracts that have been approved via decentralized governance.
-/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>
-contract TokenTransferProxy is Ownable {
-
- /// @dev Only authorized addresses can invoke functions with this modifier.
- modifier onlyAuthorized {
- require(authorized[msg.sender]);
- _;
- }
-
- modifier targetAuthorized(address target) {
- require(authorized[target]);
- _;
- }
-
- modifier targetNotAuthorized(address target) {
- require(!authorized[target]);
- _;
- }
-
- mapping (address => bool) public authorized;
- address[] public authorities;
-
- event LogAuthorizedAddressAdded(address indexed target, address indexed caller);
- event LogAuthorizedAddressRemoved(address indexed target, address indexed caller);
-
- /*
- * Public functions
- */
-
- /// @dev Authorizes an address.
- /// @param target Address to authorize.
- function addAuthorizedAddress(address target)
- public
- onlyOwner
- targetNotAuthorized(target)
- {
- authorized[target] = true;
- authorities.push(target);
- LogAuthorizedAddressAdded(target, msg.sender);
- }
-
- /// @dev Removes authorizion of an address.
- /// @param target Address to remove authorization from.
- function removeAuthorizedAddress(address target)
- public
- onlyOwner
- targetAuthorized(target)
- {
- delete authorized[target];
- for (uint i = 0; i < authorities.length; i++) {
- if (authorities[i] == target) {
- authorities[i] = authorities[authorities.length - 1];
- authorities.length -= 1;
- break;
- }
- }
- LogAuthorizedAddressRemoved(target, msg.sender);
- }
-
- /// @dev Calls into ERC20 Token contract, invoking transferFrom.
- /// @param token Address of token to transfer.
- /// @param from Address to transfer token from.
- /// @param to Address to transfer token to.
- /// @param value Amount of token to transfer.
- /// @return Success of transfer.
- function transferFrom(
- address token,
- address from,
- address to,
- uint value)
- public
- onlyAuthorized
- returns (bool)
- {
- return Token(token).transferFrom(from, to, value);
- }
-
- /*
- * Public constant functions
- */
-
- /// @dev Gets all authorized addresses.
- /// @return Array of authorized addresses.
- function getAuthorizedAddresses()
- public
- constant
- returns (address[])
- {
- return authorities;
- }
-}
diff --git a/packages/contracts/src/contracts/current/utils/Authorizable/IAuthorizable.sol b/packages/contracts/src/contracts/current/utils/Authorizable/IAuthorizable.sol
index 1fdea562c..10c01c6fe 100644
--- a/packages/contracts/src/contracts/current/utils/Authorizable/IAuthorizable.sol
+++ b/packages/contracts/src/contracts/current/utils/Authorizable/IAuthorizable.sol
@@ -18,7 +18,6 @@
pragma solidity ^0.4.21;
-/// @title TokenTransferProxy - Transfers tokens on behalf of contracts that have been approved via decentralized governance.
contract IAuthorizable {
/// @dev Gets all authorized addresses.
diff --git a/packages/contracts/src/utils/artifacts.ts b/packages/contracts/src/utils/artifacts.ts
index fd9380d1d..87cc73cff 100644
--- a/packages/contracts/src/utils/artifacts.ts
+++ b/packages/contracts/src/utils/artifacts.ts
@@ -5,7 +5,6 @@ import * as MultiSigWalletWithTimeLockArtifact from '../artifacts/MultiSigWallet
import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact from '../artifacts/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json';
import * as TokenArtifact from '../artifacts/Token.json';
import * as TokenRegistryArtifact from '../artifacts/TokenRegistry.json';
-import * as TokenTransferProxyArtifact from '../artifacts/TokenTransferProxy.json';
import * as EtherTokenArtifact from '../artifacts/WETH9.json';
import * as ZRXArtifact from '../artifacts/ZRXToken.json';
@@ -19,7 +18,6 @@ export const artifacts = {
EtherTokenArtifact: (EtherTokenArtifact as any) as Artifact,
TokenRegistryArtifact: (TokenRegistryArtifact as any) as Artifact,
MaliciousTokenArtifact: (MaliciousTokenArtifact as any) as Artifact,
- TokenTransferProxyArtifact: (TokenTransferProxyArtifact as any) as Artifact,
MultiSigWalletWithTimeLockArtifact: (MultiSigWalletWithTimeLockArtifact as any) as Artifact,
MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact: (MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact as any) as Artifact,
};
diff --git a/packages/contracts/src/utils/asset_proxy_utils.ts b/packages/contracts/src/utils/asset_proxy_utils.ts
index 8c14b2847..da610cbcc 100644
--- a/packages/contracts/src/utils/asset_proxy_utils.ts
+++ b/packages/contracts/src/utils/asset_proxy_utils.ts
@@ -22,14 +22,6 @@ export function encodeUint256(value: BigNumber): Buffer {
return encodedValue;
}
-export function encodeERC20V1ProxyData(tokenAddress: string): string {
- const encodedAssetProxyId = encodeAssetProxyId(AssetProxyId.ERC20V1);
- const encodedAddress = encodeAddress(tokenAddress);
- const encodedMetadata = Buffer.concat([encodedAssetProxyId, encodedAddress]);
- const encodedMetadataHex = ethUtil.bufferToHex(encodedMetadata);
- return encodedMetadataHex;
-}
-
export function encodeERC20ProxyData(tokenAddress: string): string {
const encodedAssetProxyId = encodeAssetProxyId(AssetProxyId.ERC20);
const encodedAddress = encodeAddress(tokenAddress);
diff --git a/packages/contracts/src/utils/types.ts b/packages/contracts/src/utils/types.ts
index d692bed61..5bb1a36d4 100644
--- a/packages/contracts/src/utils/types.ts
+++ b/packages/contracts/src/utils/types.ts
@@ -39,7 +39,6 @@ export interface CancelOrdersBefore {
export enum AssetProxyId {
INVALID,
- ERC20V1,
ERC20,
ERC721,
}
@@ -97,7 +96,6 @@ export enum ExchangeContractErrs {
}
export enum ContractName {
- TokenTransferProxy = 'TokenTransferProxy',
TokenRegistry = 'TokenRegistry',
MultiSigWalletWithTimeLock = 'MultiSigWalletWithTimeLock',
Exchange = 'Exchange',
@@ -111,7 +109,6 @@ export enum ContractName {
Arbitrage = 'Arbitrage',
AssetProxyDispatcher = 'AssetProxyDispatcher',
ERC20Proxy = 'ERC20Proxy',
- ERC20V1Proxy = 'ERC20Proxy_v1',
ERC721Proxy = 'ERC721Proxy',
DummyERC721Token = 'DummyERC721Token',
}
diff --git a/packages/contracts/test/token_transfer_proxy/auth.ts b/packages/contracts/test/asset_proxy_dispatcher/auth.ts
index dc9eae4ff..ded5ff287 100644
--- a/packages/contracts/test/token_transfer_proxy/auth.ts
+++ b/packages/contracts/test/asset_proxy_dispatcher/auth.ts
@@ -3,7 +3,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as Web3 from 'web3';
-import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
+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';
@@ -14,19 +14,19 @@ chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
-describe('TokenTransferProxy', () => {
+describe('AssetProxyDispatcher - Auth', () => {
let owner: string;
let notOwner: string;
let address: string;
- let tokenTransferProxy: TokenTransferProxyContract;
+ let assetProxyDispatcher: AssetProxyDispatcherContract;
before(async () => {
const accounts = await web3Wrapper.getAvailableAddressesAsync();
owner = address = accounts[0];
notOwner = accounts[1];
- const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
- tokenTransferProxy = new TokenTransferProxyContract(
- tokenTransferProxyInstance.abi,
- tokenTransferProxyInstance.address,
+ const assetProxyDispatcherInstance = await deployer.deployAsync(ContractName.AssetProxyDispatcher);
+ assetProxyDispatcher = new AssetProxyDispatcherContract(
+ assetProxyDispatcherInstance.abi,
+ assetProxyDispatcherInstance.address,
provider,
);
});
@@ -39,44 +39,44 @@ describe('TokenTransferProxy', () => {
describe('addAuthorizedAddress', () => {
it('should throw if not called by owner', async () => {
return expect(
- tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
+ assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(notOwner, { from: notOwner }),
).to.be.rejectedWith(constants.REVERT);
});
it('should allow owner to add an authorized address', async () => {
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
- const isAuthorized = await tokenTransferProxy.authorized.callAsync(address);
+ 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 tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
return expect(
- tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
+ assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner }),
).to.be.rejectedWith(constants.REVERT);
});
});
describe('removeAuthorizedAddress', () => {
it('should throw if not called by owner', async () => {
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
return expect(
- tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
+ assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
from: notOwner,
}),
).to.be.rejectedWith(constants.REVERT);
});
it('should allow owner to remove an authorized address', async () => {
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
- await tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, { from: owner });
+ await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
- const isAuthorized = await tokenTransferProxy.authorized.callAsync(address);
+ 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(
- tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
+ assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
}),
).to.be.rejectedWith(constants.REVERT);
@@ -85,19 +85,19 @@ describe('TokenTransferProxy', () => {
describe('getAuthorizedAddresses', () => {
it('should return all authorized addresses', async () => {
- const initial = await tokenTransferProxy.getAuthorizedAddresses.callAsync();
+ const initial = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
expect(initial).to.have.length(0);
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(address, {
+ await assetProxyDispatcher.addAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
- const afterAdd = await tokenTransferProxy.getAuthorizedAddresses.callAsync();
+ const afterAdd = await assetProxyDispatcher.getAuthorizedAddresses.callAsync();
expect(afterAdd).to.have.length(1);
expect(afterAdd).to.include(address);
- await tokenTransferProxy.removeAuthorizedAddress.sendTransactionAsync(address, {
+ await assetProxyDispatcher.removeAuthorizedAddress.sendTransactionAsync(address, {
from: owner,
});
- const afterRemove = await tokenTransferProxy.getAuthorizedAddresses.callAsync();
+ 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(
diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts
index 499e846e8..087270db7 100644
--- a/packages/contracts/test/exchange/core.ts
+++ b/packages/contracts/test/exchange/core.ts
@@ -12,15 +12,13 @@ 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 {
CancelContractEventArgs,
ExchangeContract,
ExchangeErrorContractEventArgs,
FillContractEventArgs,
} from '../../src/contract_wrappers/generated/exchange';
-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 { crypto } from '../../src/utils/crypto';
@@ -56,9 +54,7 @@ describe('Exchange', () => {
let zrx: DummyTokenContract;
let erc721Token: DummyERC721TokenContract;
let exchange: ExchangeContract;
- let tokenTransferProxy: TokenTransferProxyContract;
let assetProxyDispatcher: AssetProxyDispatcherContract;
- let erc20TransferProxyV1: ERC20Proxy_v1Contract;
let erc20TransferProxy: ERC20ProxyContract;
let erc721TransferProxy: ERC721ProxyContract;
@@ -105,34 +101,6 @@ describe('Exchange', () => {
assetProxyDispatcherInstance.address,
provider,
);
- // 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,
- });
- await assetProxyDispatcher.addAssetProxy.sendTransactionAsync(
- AssetProxyId.ERC20V1,
- erc20TransferProxyV1.address,
- ZeroEx.NULL_ADDRESS,
- { from: owner },
- );
// Deploy ERC20 Proxy
const erc20TransferProxyInstance = await deployer.deployAsync(ContractName.ERC20Proxy);
erc20TransferProxy = new ERC20ProxyContract(
@@ -197,12 +165,6 @@ describe('Exchange', () => {
orderFactory = new OrderFactory(privateKey, defaultOrderParams);
dmyBalances = new Balances([rep, dgd, zrx], [makerAddress, takerAddress, feeRecipientAddress]);
await Promise.all([
- rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: makerAddress,
- }),
- rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: takerAddress,
- }),
rep.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_ALLOWANCE, {
from: makerAddress,
}),
@@ -211,12 +173,6 @@ describe('Exchange', () => {
}),
rep.setBalance.sendTransactionAsync(makerAddress, INITIAL_BALANCE, { from: tokenOwner }),
rep.setBalance.sendTransactionAsync(takerAddress, INITIAL_BALANCE, { from: tokenOwner }),
- dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: makerAddress,
- }),
- dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: takerAddress,
- }),
dgd.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_ALLOWANCE, {
from: makerAddress,
}),
@@ -225,12 +181,6 @@ describe('Exchange', () => {
}),
dgd.setBalance.sendTransactionAsync(makerAddress, INITIAL_BALANCE, { from: tokenOwner }),
dgd.setBalance.sendTransactionAsync(takerAddress, INITIAL_BALANCE, { from: tokenOwner }),
- zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: makerAddress,
- }),
- zrx.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
- from: takerAddress,
- }),
zrx.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_ALLOWANCE, {
from: makerAddress,
}),
@@ -672,21 +622,21 @@ describe('Exchange', () => {
});
it('should throw if maker allowances are too low to fill order', async () => {
- await rep.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), {
+ await rep.approve.sendTransactionAsync(erc20TransferProxy.address, new BigNumber(0), {
from: makerAddress,
});
expect(exWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(constants.REVERT);
- await rep.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await rep.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_ALLOWANCE, {
from: makerAddress,
});
});
it('should throw if taker allowances are too low to fill order', async () => {
- await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, new BigNumber(0), {
+ await dgd.approve.sendTransactionAsync(erc20TransferProxy.address, new BigNumber(0), {
from: takerAddress,
});
expect(exWrapper.fillOrderAsync(signedOrder, takerAddress)).to.be.rejectedWith(constants.REVERT);
- await dgd.approve.sendTransactionAsync(tokenTransferProxy.address, INITIAL_ALLOWANCE, {
+ await dgd.approve.sendTransactionAsync(erc20TransferProxy.address, INITIAL_ALLOWANCE, {
from: takerAddress,
});
});
diff --git a/packages/contracts/test/exchange/helpers.ts b/packages/contracts/test/exchange/helpers.ts
index 92fce8e47..43dfd5402 100644
--- a/packages/contracts/test/exchange/helpers.ts
+++ b/packages/contracts/test/exchange/helpers.ts
@@ -35,7 +35,6 @@ describe('Exchange', () => {
[makerAddress, feeRecipientAddress] = accounts;
const owner = accounts[0];
const tokenRegistry = await deployer.deployAsync(ContractName.TokenRegistry);
- const tokenTransferProxy = await deployer.deployAsync(ContractName.TokenTransferProxy);
const [rep, dgd, zrx] = await Promise.all([
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
diff --git a/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts b/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
index f29d26fca..762292c9f 100644
--- a/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
+++ b/packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
@@ -1,3 +1,9 @@
+/*
+ *
+ * @TODO: Before deploying, the MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress contract must be updated
+ * to have a mapping of all approved addresses. These tests muts be updated appropriately.
+ * For now, these tests have been commented out by @hysz (greg@0xproject.com).
+ *
import { LogWithDecodedArgs, ZeroEx } from '0x.js';
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { AbiDecoder } from '@0xproject/utils';
@@ -191,3 +197,5 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
});
});
});
+
+*/
diff --git a/packages/contracts/test/token_transfer_proxy/transfer_from.ts b/packages/contracts/test/token_transfer_proxy/transfer_from.ts
deleted file mode 100644
index dc6757cd9..000000000
--- a/packages/contracts/test/token_transfer_proxy/transfer_from.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
-import { BigNumber } from '@0xproject/utils';
-import { Web3Wrapper } from '@0xproject/web3-wrapper';
-import * as chai from 'chai';
-import * as Web3 from 'web3';
-
-import { DummyTokenContract } from '../../src/contract_wrappers/generated/dummy_token';
-import { TokenTransferProxyContract } from '../../src/contract_wrappers/generated/token_transfer_proxy';
-import { Balances } from '../../src/utils/balances';
-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('TokenTransferProxy', () => {
- let accounts: string[];
- let owner: string;
- let notAuthorized: string;
- const INIT_BAL = new BigNumber(100000000);
- const INIT_ALLOW = new BigNumber(100000000);
-
- let tokenTransferProxy: TokenTransferProxyContract;
- let rep: DummyTokenContract;
- let dmyBalances: Balances;
-
- before(async () => {
- accounts = await web3Wrapper.getAvailableAddressesAsync();
- owner = notAuthorized = accounts[0];
- const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
- tokenTransferProxy = new TokenTransferProxyContract(
- tokenTransferProxyInstance.abi,
- tokenTransferProxyInstance.address,
- provider,
- );
- const repInstance = await deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS);
- rep = new DummyTokenContract(repInstance.abi, repInstance.address, provider);
-
- dmyBalances = new Balances([rep], [accounts[0], accounts[1]]);
- await Promise.all([
- rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, {
- from: accounts[0],
- }),
- rep.setBalance.sendTransactionAsync(accounts[0], INIT_BAL, { from: owner }),
- rep.approve.sendTransactionAsync(tokenTransferProxy.address, INIT_ALLOW, {
- from: accounts[1],
- }),
- rep.setBalance.sendTransactionAsync(accounts[1], INIT_BAL, { from: owner }),
- ]);
- });
- beforeEach(async () => {
- await blockchainLifecycle.startAsync();
- });
- afterEach(async () => {
- await blockchainLifecycle.revertAsync();
- });
-
- describe('transferFrom', () => {
- it('should throw when called by an unauthorized address', async () => {
- expect(
- tokenTransferProxy.transferFrom.sendTransactionAsync(
- rep.address,
- accounts[0],
- accounts[1],
- new BigNumber(1000),
- {
- from: notAuthorized,
- },
- ),
- ).to.be.rejectedWith(constants.REVERT);
- });
-
- it('should allow an authorized address to transfer', async () => {
- const balances = await dmyBalances.getAsync();
-
- await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(notAuthorized, {
- from: owner,
- });
- const transferAmt = new BigNumber(10000);
- await tokenTransferProxy.transferFrom.sendTransactionAsync(
- rep.address,
- accounts[0],
- accounts[1],
- transferAmt,
- {
- from: notAuthorized,
- },
- );
-
- const newBalances = await dmyBalances.getAsync();
- expect(newBalances[accounts[0]][rep.address]).to.be.bignumber.equal(
- balances[accounts[0]][rep.address].minus(transferAmt),
- );
- expect(newBalances[accounts[1]][rep.address]).to.be.bignumber.equal(
- balances[accounts[1]][rep.address].add(transferAmt),
- );
- });
- });
-});