Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x74758AcFcE059f503a7E6B0fC2c8737600f9F2c4
Balance 0 ETH
Nonce 1
Code Size 2382 bytes
Indexed Transactions 0 (1 on-chain, 0.6% indexed)
External Etherscan · Sourcify

Contract Bytecode

2382 bytes
0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166315dacbea811461009d57806342f1181e146100ee578063494503d41461011e578063707129391461015f578063715018a61461018d5780638da5cb5b146101a2578063b9181611146101b7578063d39de6e9146101e5578063f2fde38b1461024a575b600080fd5b3480156100a957600080fd5b506100da73ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443516606435610278565b604080519115158252519081900360200190f35b3480156100fa57600080fd5b5061011c73ffffffffffffffffffffffffffffffffffffffff600435166102b8565b005b34801561012a57600080fd5b506101366004356103ba565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561016b57600080fd5b5061011c73ffffffffffffffffffffffffffffffffffffffff600435166103ef565b34801561019957600080fd5b5061011c6105c6565b3480156101ae57600080fd5b5061013661064c565b3480156101c357600080fd5b506100da73ffffffffffffffffffffffffffffffffffffffff60043516610668565b3480156101f157600080fd5b506101fa61067d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561023657818101518382015260200161021e565b505050509050019250505060405180910390f35b34801561025657600080fd5b5061011c73ffffffffffffffffffffffffffffffffffffffff600435166106ed565b3360009081526001602052604081205460ff16151561029657600080fd5b6102a28585858561071d565b15156102ad57600080fd5b506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040902054819060ff161561031157600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101805473ffffffffffffffffffffffffffffffffffffffff191684179055513392917f94bb87f4c15c4587ff559a7584006fa01ddf9299359be6b512b94527aa961aca91a35050565b60028054829081106103c857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461041457600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054829060ff16151561044a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120805460ff1916905591505b60025482101561057e578273ffffffffffffffffffffffffffffffffffffffff166002838154811015156104aa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610573576002805460001981019081106104e457fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918490811061051757fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560028054600019019061056d90826108df565b5061057e565b60019091019061047a565b604051339073ffffffffffffffffffffffffffffffffffffffff8516907ff5b347a1e40749dd050f5f07fbdbeb7e3efa9756903044dd29401fd1d4bb4a1c90600090a3505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ea57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60016020526000908152604090205460ff1681565b606060028054806020026020016040519081016040528092919081815260200182805480156106e257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106b7575b505050505090505b90565b60005473ffffffffffffffffffffffffffffffffffffffff16331461071157600080fd5b61071a8161080c565b50565b604080517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f74323536290000000000000000000000000000000000000000000000000000006020820152815190819003602501812063ffffffff7c010000000000000000000000000000000000000000000000000000000091829004908116909102825273ffffffffffffffffffffffffffffffffffffffff868116600484015285811660248401526044830185905292516000938816926064808201928692909190829003018183875af19250505015156107fb57600080fd5b6108036108b0565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116151561082e57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60003d80156108c657602081146108cf57600080fd5b600191506108db565b60206000803e60005191505b5090565b81548183558181111561090357600083815260209020610903918101908301610908565b505050565b6106ea91905b808211156108db576000815560010161090e5600a165627a7a72305820f5bd2f2a71ccfe1c41a6ef6dfacfb888911b01ee2817c68a5a885443e2aafe810029

Verified Source Code Partial Match

Compiler: v0.4.25+commit.59dbf8f1 EVM: byzantium Optimization: Yes (999 runs)
TokenTransferProxy.sol 247 lines
pragma solidity 0.4.25;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 {
  function totalSupply() public view returns (uint256);

  function balanceOf(address _who) public view returns (uint256);

  function allowance(address _owner, address _spender)
    public view returns (uint256);

  function transfer(address _to, uint256 _value) public returns (bool);

  function approve(address _spender, uint256 _value)
    public returns (bool);

  function transferFrom(address _from, address _to, uint256 _value)
    public returns (bool);

  function decimals() public view returns (uint256);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}
library ERC20SafeTransfer {
    function safeTransfer(address _tokenAddress, address _to, uint256 _value) internal returns (bool success) {

        require(_tokenAddress.call(bytes4(keccak256("transfer(address,uint256)")), _to, _value));

        return fetchReturnData();
    }

    function safeTransferFrom(address _tokenAddress, address _from, address _to, uint256 _value) internal returns (bool success) {

        require(_tokenAddress.call(bytes4(keccak256("transferFrom(address,address,uint256)")), _from, _to, _value));

        return fetchReturnData();
    }

    function safeApprove(address _tokenAddress, address _spender, uint256 _value) internal returns (bool success) {

        require(_tokenAddress.call(bytes4(keccak256("approve(address,uint256)")), _spender, _value));

        return fetchReturnData();
    }

    function fetchReturnData() internal returns (bool success){
        assembly {
            switch returndatasize()
            case 0 {
                success := 1
            }
            case 32 {
                returndatacopy(0, 0, 32)
                success := mload(0)
            }
            default {
                revert(0, 0)
            }
        }
    }

}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;

  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

/*

  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.

*/

/// @title TokenTransferProxy - Transfers tokens on behalf of contracts that have been approved via decentralized governance.
/// @author Amir Bandeali - <[email protected]>, Will Warren - <[email protected]>
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);
        emit 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;
            }
        }
        emit 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)
    {
        require(ERC20SafeTransfer.safeTransferFrom(token, from, to, value));
        return true;
    }

    /*
     * Public constant functions
     */

    /// @dev Gets all authorized addresses.
    /// @return Array of authorized addresses.
    function getAuthorizedAddresses()
        public
        view
        returns (address[])
    {
        return authorities;
    }
}

Read Contract

authorities 0x494503d4 → address
authorized 0xb9181611 → bool
getAuthorizedAddresses 0xd39de6e9 → address[]
owner 0x8da5cb5b → address

Write Contract 5 functions

These functions modify contract state and require a wallet transaction to execute.

addAuthorizedAddress 0x42f1181e
address target
removeAuthorizedAddress 0x70712939
address target
renounceOwnership 0x715018a6
No parameters
transferFrom 0x15dacbea
address token
address from
address to
uint256 value
returns: bool
transferOwnership 0xf2fde38b
address _newOwner

Recent Transactions

This address has 1 on-chain transactions, but only 0.6% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →