Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
    
                 Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x22e89898a04eaf43379beb70bf4e38b1faf8a31e.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
            All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
- Contract name:
- TokenProxy
- Optimization enabled
- true
- Compiler version
- v0.4.24+commit.e67f0147
- Optimization runs
- 200
- Verified at
- 2025-01-23 08:32:09.896579Z
Contract source code
// File: contracts/zos-lib/contracts/upgradeability/Proxy.solpragma solidity ^0.4.24;/** * @title Proxy * @dev Implements delegation of calls to other contracts, with proper * forwarding of return values and bubbling of failures. * It defines a fallback function that delegates all calls to the address * returned by the abstract _implementation() internal function. */contract Proxy {  /**   * @dev Fallback function.   * Implemented entirely in `_fallback`.   */  function () payable external {    _fallback();  }  /**   * @return The Address of the implementation.   */  function _implementation() internal view returns (address);  /**   * @dev Delegates execution to an implementation contract.   * This is a low level function that doesn't return to its internal call site.   * It will return to the external caller whatever the implementation returns.   * @param implementation Address to delegate.   */  function _delegate(address implementation) internal {    assembly {      // Copy msg.data. We take full control of memory in this inline assembly      // block because it will not return to Solidity code. We overwrite the      // Solidity scratch pad at memory position 0.      calldatacopy(0, 0, calldatasize)      // Call the implementation.      // out and outsize are 0 because we don't know the size yet.      let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0)      // Copy the returned data.      returndatacopy(0, 0, returndatasize)      switch result      // delegatecall returns 0 on error.      case 0 { revert(0, returndatasize) }      default { return(0, returndatasize) }    }  }  /**   * @dev Function that is run as the first thing in the fallback function.   * Can be redefined in derived contracts to add functionality.   * Redefinitions must call super._willFallback().   */  function _willFallback() internal {  }  /**   * @dev fallback implementation.   * Extracted to enable manual triggering.   */  function _fallback() internal {    _willFallback();    _delegate(_implementation());  }}// File: contracts/zos-lib/contracts/utils/Address.solpragma solidity ^0.4.24;/** * Utility library of inline functions on addresses * * Source https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v2.0.0/contracts/utils/Address.sol * This contract is copied here and renamed from the original to avoid clashes in the compiled artifacts * when the user imports a zos-lib contract (that transitively causes this contract to be compiled and added to the * build/artifacts folder) as well as the vanilla Address implementation from an openzeppelin version. */library ZOSLibAddress {  /**   * Returns whether the target address is a contract   * @dev This function will return false if invoked during the constructor of a contract,   * as the code is not actually created until after the constructor finishes.   * @param account address of the account to check   * @return whether the target address is a contract   */  function isContract(address account) internal view returns (bool) {    uint256 size;    // XXX Currently there is no better way to check if there is a contract in an address    // than to check the size of the code at that address.    // See https://ethereum.stackexchange.com/a/14016/36603    // for more details about how this works.    // TODO Check this again before the Serenity release, because all addresses will be    // contracts then.    // solium-disable-next-line security/no-inline-assembly    assembly { size := extcodesize(account) }    return size > 0;  }}// File: contracts/zos-lib/contracts/upgradeability/UpgradeabilityProxy.solpragma solidity ^0.4.24;/** * @title UpgradeabilityProxy * @dev This contract implements a proxy that allows to change the * implementation address to which it will delegate. * Such a change is called an implementation upgrade. */contract UpgradeabilityProxy is Proxy {  /**   * @dev Emitted when the implementation is upgraded.   * @param implementation Address of the new implementation.   */  event Upgraded(address indexed implementation);  /**   * @dev Storage slot with the address of the current implementation.   * This is the keccak-256 hash of "org.zeppelinos.proxy.implementation", and is   * validated in the constructor.   */  bytes32 private constant IMPLEMENTATION_SLOT = 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3;  /**   * @dev Contract constructor.   * @param _implementation Address of the initial implementation.   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.   * It should include the signature and the parameters of the function to be called, as described in   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.   */  constructor(address _implementation, bytes _data) public payable {    assert(IMPLEMENTATION_SLOT == keccak256("org.zeppelinos.proxy.implementation"));    _setImplementation(_implementation);    if(_data.length > 0) {      require(_implementation.delegatecall(_data));    }  }  /**   * @dev Returns the current implementation.   * @return Address of the current implementation   */  function _implementation() internal view returns (address impl) {    bytes32 slot = IMPLEMENTATION_SLOT;    assembly {      impl := sload(slot)    }  }  /**   * @dev Upgrades the proxy to a new implementation.   * @param newImplementation Address of the new implementation.   */  function _upgradeTo(address newImplementation) internal {    _setImplementation(newImplementation);    emit Upgraded(newImplementation);  }  /**   * @dev Sets the implementation address of the proxy.   * @param newImplementation Address of the new implementation.   */  function _setImplementation(address newImplementation) private {    require(ZOSLibAddress.isContract(newImplementation), "Cannot set a proxy implementation to a non-contract address");    bytes32 slot = IMPLEMENTATION_SLOT;    assembly {      sstore(slot, newImplementation)    }  }}// File: zos-lib/contracts/upgradeability/AdminUpgradeabilityProxy.solpragma solidity ^0.4.24;/** * @title AdminUpgradeabilityProxy * @dev This contract combines an upgradeability proxy with an authorization * mechanism for administrative tasks. * All external functions in this contract must be guarded by the * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity * feature proposal that would enable this to be done automatically. */contract AdminUpgradeabilityProxy is UpgradeabilityProxy {  /**   * @dev Emitted when the administration has been transferred.   * @param previousAdmin Address of the previous admin.   * @param newAdmin Address of the new admin.   */  event AdminChanged(address previousAdmin, address newAdmin);  /**   * @dev Storage slot with the admin of the contract.   * This is the keccak-256 hash of "org.zeppelinos.proxy.admin", and is   * validated in the constructor.   */  bytes32 private constant ADMIN_SLOT = 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b;  /**   * @dev Modifier to check whether the `msg.sender` is the admin.   * If it is, it will run the function. Otherwise, it will delegate the call   * to the implementation.   */  modifier ifAdmin() {    if (msg.sender == _admin()) {      _;    } else {      _fallback();    }  }  /**   * Contract constructor.   * @param _implementation address of the initial implementation.   * @param _admin Address of the proxy administrator.   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.   * It should include the signature and the parameters of the function to be called, as described in   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.   */  constructor(address _implementation, address _admin, bytes _data) UpgradeabilityProxy(_implementation, _data) public payable {    assert(ADMIN_SLOT == keccak256("org.zeppelinos.proxy.admin"));    _setAdmin(_admin);  }  /**   * @return The address of the proxy admin.   */  function admin() external view ifAdmin returns (address) {    return _admin();  }  /**   * @return The address of the implementation.   */  function implementation() external view ifAdmin returns (address) {    return _implementation();  }  /**   * @dev Changes the admin of the proxy.   * Only the current admin can call this function.   * @param newAdmin Address to transfer proxy administration to.   */  function changeAdmin(address newAdmin) external ifAdmin {    require(newAdmin != address(0), "Cannot change the admin of a proxy to the zero address");    emit AdminChanged(_admin(), newAdmin);    _setAdmin(newAdmin);  }  /**   * @dev Upgrade the backing implementation of the proxy.   * Only the admin can call this function.   * @param newImplementation Address of the new implementation.   */  function upgradeTo(address newImplementation) external ifAdmin {    _upgradeTo(newImplementation);  }  /**   * @dev Upgrade the backing implementation of the proxy and call a function   * on the new implementation.   * This is useful to initialize the proxied contract.   * @param newImplementation Address of the new implementation.   * @param data Data to send as msg.data in the low level call.   * It should include the signature and the parameters of the function to be called, as described in   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.   */  function upgradeToAndCall(address newImplementation, bytes data) payable external ifAdmin {    _upgradeTo(newImplementation);    require(newImplementation.delegatecall(data));  }  /**   * @return The admin slot.   */  function _admin() internal view returns (address adm) {    bytes32 slot = ADMIN_SLOT;    assembly {      adm := sload(slot)    }  }  /**   * @dev Sets the address of the proxy admin.   * @param newAdmin Address of the new proxy admin.   */  function _setAdmin(address newAdmin) internal {    bytes32 slot = ADMIN_SLOT;    assembly {      sstore(slot, newAdmin)    }  }  /**   * @dev Only fall back when the sender is not the admin.   */  function _willFallback() internal {    require(msg.sender != _admin(), "Cannot call fallback function from the proxy admin");    super._willFallback();  }}// File: contracts/TokenProxy.solpragma solidity 0.4.24;contract TokenProxy is AdminUpgradeabilityProxy {    constructor(address _implementation, address _admin, bytes memory _data)        AdminUpgradeabilityProxy(_implementation, _admin, _data) public payable {    }}Contract ABI
[{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"upgradeTo","inputs":[{"type":"address","name":"newImplementation"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"upgradeToAndCall","inputs":[{"type":"address","name":"newImplementation"},{"type":"bytes","name":"data"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"implementation","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeAdmin","inputs":[{"type":"address","name":"newAdmin"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"admin","inputs":[],"constant":true},{"type":"constructor","stateMutability":"payable","payable":true,"inputs":[{"type":"address","name":"_implementation"},{"type":"address","name":"_admin"},{"type":"bytes","name":"_data"}]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"AdminChanged","inputs":[{"type":"address","name":"previousAdmin","indexed":false},{"type":"address","name":"newAdmin","indexed":false}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"type":"address","name":"implementation","indexed":true}],"anonymous":false}]
            Deployed ByteCode
0x60806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633659cfe681146100765780634f1ef286146100975780635c60da1b146100b75780638f283970146100e8578063f851a44014610109575b61007461011e565b005b34801561008257600080fd5b50610074600160a060020a0360043516610138565b61007460048035600160a060020a03169060248035908101910135610172565b3480156100c357600080fd5b506100cc6101e7565b60408051600160a060020a039092168252519081900360200190f35b3480156100f457600080fd5b50610074600160a060020a0360043516610224565b34801561011557600080fd5b506100cc610336565b610126610361565b61013661013161040e565b610433565b565b610140610457565b600160a060020a031633600160a060020a03161415610167576101628161047c565b61016f565b61016f61011e565b50565b61017a610457565b600160a060020a031633600160a060020a031614156101da5761019c8361047c565b82600160a060020a0316828260405180838380828437820191505092505050600060405180830381855af491505015156101d557600080fd5b6101e2565b6101e261011e565b505050565b60006101f1610457565b600160a060020a031633600160a060020a031614156102195761021261040e565b9050610221565b61022161011e565b90565b61022c610457565b600160a060020a031633600160a060020a0316141561016757600160a060020a03811615156102e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f206164647265737300000000000000000000606482015290519081900360840190fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61030b610457565b60408051600160a060020a03928316815291841660208301528051918290030190a1610162816104bc565b6000610340610457565b600160a060020a031633600160a060020a0316141561021957610212610457565b610369610457565b600160a060020a031633141561040657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015290519081900360840190fd5b610136610136565b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35490565b3660008037600080366000845af43d6000803e808015610452573d6000f35b3d6000fd5b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b5490565b610485816104e0565b604051600160a060020a038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b55565b60006104eb826105a3565b151561057e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015290519081900360840190fd5b507f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c355565b6000903b11905600a165627a7a723058209641c00510c656104009a2063023158ba6d76f7092ebed6eb96040f59e99523e0029