aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
diff options
context:
space:
mode:
authorBrandon Millman <brandon.millman@gmail.com>2018-02-06 05:16:46 +0800
committerBrandon Millman <brandon.millman@gmail.com>2018-02-06 05:16:46 +0800
commit99b1f81e89e3ac929c7829552ea7ae19998524e9 (patch)
tree534161a9fa8bcf8bb5572d7ef0aa311fe9b9d116 /packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
parent6577d607332e2fb1a442d663e260ecb969457c36 (diff)
parent46ad7b1b38df0f302821258629ffa749e7dd00b9 (diff)
downloaddexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar.gz
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar.bz2
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar.lz
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar.xz
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.tar.zst
dexon-sol-tools-99b1f81e89e3ac929c7829552ea7ae19998524e9.zip
Merge branch 'development' into feature/testnet-faucets/order-dispenser
* development: (37 commits) Add dates to CHANGELOGs Change CHANGELOGs Add .editorconfig Fix a typo Temp Use forEach instead of map Add PR number Fix an exception when a signature collision happens Fix prettier Add regression tests Improve the comment and fix an exception Add missing comas Lerna-ignore tslint and tsconfig Update contract versions, fix tests Rename directories Rename previous contracts, fix imports, add nested file structure Move all contracts into a single directory Update import Fix import Get rid of suffixed contract versioning and replace it with a poor-mans package manager. Versions are stored locally, and are generated in a copy-on-write basis as required ...
Diffstat (limited to 'packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol')
-rw-r--r--packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol115
1 files changed, 115 insertions, 0 deletions
diff --git a/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol b/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
new file mode 100644
index 000000000..1ce949fa6
--- /dev/null
+++ b/packages/contracts/src/current/protocol/TokenTransferProxy/TokenTransferProxy.sol
@@ -0,0 +1,115 @@
+/*
+
+ Copyright 2017 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;
+ }
+}