Removed ERC20 V1 Proxy + TokenTransferProxy

This commit is contained in:
Greg Hysen
2018-04-16 17:33:55 -07:00
committed by Amir Bandeali
parent 436a6605fb
commit c19fb1dffc
17 changed files with 82 additions and 631 deletions

View File

@@ -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;
}
}

View File

@@ -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,

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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.

View File

@@ -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,
};

View File

@@ -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);

View File

@@ -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',
}