ETH Price: $2,635.50 (+1.47%)

Contract

0x9612746e023fC19faD80D019d1a49E4b449D9fbA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Take Back63935622018-09-24 23:37:592149 days ago1537832279IN
0x9612746e...b449D9fbA
0 ETH0.00010052.4
Take Back63794162018-09-22 15:51:012151 days ago1537631461IN
0x9612746e...b449D9fbA
0 ETH0.000020930.5
Take Back62697432018-09-04 10:21:072169 days ago1536056467IN
0x9612746e...b449D9fbA
0 ETH0.000041811
Take Back62654322018-09-03 16:54:022170 days ago1535993642IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62653562018-09-03 16:34:212170 days ago1535992461IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62653232018-09-03 16:26:492170 days ago1535992009IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62652812018-09-03 16:17:202170 days ago1535991440IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62652812018-09-03 16:17:202170 days ago1535991440IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62652682018-09-03 16:13:182170 days ago1535991198IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62652192018-09-03 15:59:282170 days ago1535990368IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62651772018-09-03 15:48:362170 days ago1535989716IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62651572018-09-03 15:43:582170 days ago1535989438IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62651572018-09-03 15:43:582170 days ago1535989438IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62651572018-09-03 15:43:582170 days ago1535989438IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62651522018-09-03 15:42:542170 days ago1535989374IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62651162018-09-03 15:36:052170 days ago1535988965IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62650882018-09-03 15:29:432170 days ago1535988583IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62650872018-09-03 15:29:402170 days ago1535988580IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62650872018-09-03 15:29:402170 days ago1535988580IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62650442018-09-03 15:17:392170 days ago1535987859IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62650282018-09-03 15:13:502170 days ago1535987630IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62649242018-09-03 14:47:572170 days ago1535986077IN
0x9612746e...b449D9fbA
0 ETH0.000083632
Take Back62649212018-09-03 14:46:392170 days ago1535985999IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62648142018-09-03 14:25:362170 days ago1535984736IN
0x9612746e...b449D9fbA
0 ETH0.000083752
Take Back62647542018-09-03 14:10:452170 days ago1535983845IN
0x9612746e...b449D9fbA
0 ETH0.00008352
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TakeBack

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-06
*/

pragma solidity ^0.4.23;

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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.
   */
  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;
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view returns (uint256);

  function transferFrom(address from, address to, uint256 value)
    public returns (bool);

  function approve(address spender, uint256 value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: contracts/TakeBack.sol

contract TakeBack is Ownable{

    // address of RING.sol on ethereum
    address public tokenAdd;

    address public supervisor;

    uint256 public networkId;

    mapping (address => uint256) public userToNonce;

    // used for old&new users to claim their ring out
    event TakedBack(address indexed _user, uint indexed _nonce, uint256 _value);
    // used for supervisor to claim all kind of token
    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);


    constructor(address _token, address _supervisor, uint256 _networkId) public {
        tokenAdd = _token;
        supervisor = _supervisor;
        networkId = _networkId;
    }

    // _hashmessage = hash("${_user}${_nonce}${_value}")
    // _v, _r, _s are from supervisor's signature on _hashmessage
    // claimRing(...) is invoked by the user who want to claim rings
    // while the _hashmessage is signed by supervisor
    function takeBack(uint256 _nonce, uint256 _value, bytes32 _hashmessage, uint8 _v, bytes32 _r, bytes32 _s) public {
        address _user = msg.sender;

        // verify the _nonce is right
        require(userToNonce[_user] == _nonce);

        // verify the _hashmessage is signed by supervisor
        require(supervisor == verify(_hashmessage, _v, _r, _s));

        // verify that the _user, _nonce, _value are exactly what they should be
        require(keccak256(abi.encodePacked(_user,_nonce,_value,networkId)) == _hashmessage);

        // transfer token from address(this) to _user
        ERC20 token = ERC20(tokenAdd);
        token.transfer(_user, _value);

        // after the claiming operation succeeds
        userToNonce[_user]  += 1;
        emit TakedBack(_user, _nonce, _value);
    }

    function verify(bytes32 _hashmessage, uint8 _v, bytes32 _r, bytes32 _s) internal pure returns (address) {
        bytes memory prefix = "\x19EvolutionLand Signed Message:\n32";
        bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, _hashmessage));
        address signer = ecrecover(prefixedHash, _v, _r, _s);
        return signer;
    }

    function claimTokens(address _token) public onlyOwner {
        if (_token == 0x0) {
            owner.transfer(address(this).balance);
            return;
        }

        ERC20 token = ERC20(_token);
        uint balance = token.balanceOf(this);
        token.transfer(owner, balance);

        emit ClaimedTokens(_token, owner, balance);
    }

    function changeSupervisor(address _newSupervisor) public onlyOwner {
        supervisor = _newSupervisor;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"supervisor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"networkId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userToNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenAdd","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nonce","type":"uint256"},{"name":"_value","type":"uint256"},{"name":"_hashmessage","type":"bytes32"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"takeBack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newSupervisor","type":"address"}],"name":"changeSupervisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_supervisor","type":"address"},{"name":"_networkId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"},{"indexed":true,"name":"_nonce","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"TakedBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b506040516060806109a983398101604090815281516020830151919092015160008054600160a060020a0319908116331790915560018054600160a060020a039586169083161790556002805494909316931692909217905560035561092e8061007b6000396000f3006080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166356e4b68b81146100a8578063715018a6146100d95780638da5cb5b146100f05780639025e64c14610105578063d87a794f1461012c578063df8de3e71461014d578063e29f99f01461016e578063e4cdf3cc14610183578063ee0c0346146101ad578063f2fde38b146101ce575b600080fd5b3480156100b457600080fd5b506100bd6101ef565b60408051600160a060020a039092168252519081900360200190f35b3480156100e557600080fd5b506100ee6101fe565b005b3480156100fc57600080fd5b506100bd61026a565b34801561011157600080fd5b5061011a610279565b60408051918252519081900360200190f35b34801561013857600080fd5b5061011a600160a060020a036004351661027f565b34801561015957600080fd5b506100ee600160a060020a0360043516610291565b34801561017a57600080fd5b506100bd610478565b34801561018f57600080fd5b506100ee60043560243560443560ff6064351660843560a435610487565b3480156101b957600080fd5b506100ee600160a060020a0360043516610693565b3480156101da57600080fd5b506100ee600160a060020a03600435166106d9565b600254600160a060020a031681565b600054600160a060020a0316331461021557600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b60035481565b60046020526000908152604090205481565b600080548190600160a060020a031633146102ab57600080fd5b600160a060020a03831615156102fc5760008054604051600160a060020a0390911691303180156108fc02929091818181858888f193505050501580156102f6573d6000803e3d6000fd5b50610473565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561036057600080fd5b505af1158015610374573d6000803e3d6000fd5b505050506040513d602081101561038a57600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b505050506040513d602081101561042a57600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600154600160a060020a031681565b3360008181526004602052604081205488146104a257600080fd5b6104ae868686866106fc565b600254600160a060020a039081169116146104c857600080fd5b85600019168289896003546040516020018085600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083106105575780518252601f199092019160209182019101610538565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561059457600080fd5b50600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152602482018a905291519190921691829163a9059cbb916044808201926020929091908290030181600087803b15801561060757600080fd5b505af115801561061b573d6000803e3d6000fd5b505050506040513d602081101561063157600080fd5b5050600160a060020a0382166000818152600460209081526040918290208054600101905581518a815291518b93927f947388a4a9d9f5a626e1867acb228f28168d398c4c1f411e50428581024f81b892908290030190a35050505050505050565b600054600160a060020a031633146106aa57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146106f057600080fd5b6106f981610885565b50565b6040805160608101825260218082527f1945766f6c7574696f6e4c616e64205369676e6564204d6573736167653a0a3360208084019182527f32000000000000000000000000000000000000000000000000000000000000008486015293516000948593849386938c9301918291908083835b6020831061078e5780518252601f19909201916020918201910161076f565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106107ee5780518252601f1990920191602091820191016107cf565b51815160209384036101000a600019018019909216911617905260408051929094018290038220600080845283830180875282905260ff8f1684870152606084018e9052608084018d905294519098506001965060a080840196509194601f19820194509281900390910191865af115801561086e573d6000803e3d6000fd5b5050604051601f1901519998505050505050505050565b600160a060020a038116151561089a57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a723058203dac510c7a40db5687853931de1ad32aca909914ec171c33d97ad8d44dea7cd0002900000000000000000000000086e56f3c89a14528858e58b3de48c074538baf2c000000000000000000000000536deacedc6e972822b9e78571786b5a6dd10c8a0000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x6080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166356e4b68b81146100a8578063715018a6146100d95780638da5cb5b146100f05780639025e64c14610105578063d87a794f1461012c578063df8de3e71461014d578063e29f99f01461016e578063e4cdf3cc14610183578063ee0c0346146101ad578063f2fde38b146101ce575b600080fd5b3480156100b457600080fd5b506100bd6101ef565b60408051600160a060020a039092168252519081900360200190f35b3480156100e557600080fd5b506100ee6101fe565b005b3480156100fc57600080fd5b506100bd61026a565b34801561011157600080fd5b5061011a610279565b60408051918252519081900360200190f35b34801561013857600080fd5b5061011a600160a060020a036004351661027f565b34801561015957600080fd5b506100ee600160a060020a0360043516610291565b34801561017a57600080fd5b506100bd610478565b34801561018f57600080fd5b506100ee60043560243560443560ff6064351660843560a435610487565b3480156101b957600080fd5b506100ee600160a060020a0360043516610693565b3480156101da57600080fd5b506100ee600160a060020a03600435166106d9565b600254600160a060020a031681565b600054600160a060020a0316331461021557600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b60035481565b60046020526000908152604090205481565b600080548190600160a060020a031633146102ab57600080fd5b600160a060020a03831615156102fc5760008054604051600160a060020a0390911691303180156108fc02929091818181858888f193505050501580156102f6573d6000803e3d6000fd5b50610473565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561036057600080fd5b505af1158015610374573d6000803e3d6000fd5b505050506040513d602081101561038a57600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561040057600080fd5b505af1158015610414573d6000803e3d6000fd5b505050506040513d602081101561042a57600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600154600160a060020a031681565b3360008181526004602052604081205488146104a257600080fd5b6104ae868686866106fc565b600254600160a060020a039081169116146104c857600080fd5b85600019168289896003546040516020018085600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083106105575780518252601f199092019160209182019101610538565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561059457600080fd5b50600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152602482018a905291519190921691829163a9059cbb916044808201926020929091908290030181600087803b15801561060757600080fd5b505af115801561061b573d6000803e3d6000fd5b505050506040513d602081101561063157600080fd5b5050600160a060020a0382166000818152600460209081526040918290208054600101905581518a815291518b93927f947388a4a9d9f5a626e1867acb228f28168d398c4c1f411e50428581024f81b892908290030190a35050505050505050565b600054600160a060020a031633146106aa57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031633146106f057600080fd5b6106f981610885565b50565b6040805160608101825260218082527f1945766f6c7574696f6e4c616e64205369676e6564204d6573736167653a0a3360208084019182527f32000000000000000000000000000000000000000000000000000000000000008486015293516000948593849386938c9301918291908083835b6020831061078e5780518252601f19909201916020918201910161076f565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b602083106107ee5780518252601f1990920191602091820191016107cf565b51815160209384036101000a600019018019909216911617905260408051929094018290038220600080845283830180875282905260ff8f1684870152606084018e9052608084018d905294519098506001965060a080840196509194601f19820194509281900390910191865af115801561086e573d6000803e3d6000fd5b5050604051601f1901519998505050505050505050565b600160a060020a038116151561089a57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a723058203dac510c7a40db5687853931de1ad32aca909914ec171c33d97ad8d44dea7cd00029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000086e56f3c89a14528858e58b3de48c074538baf2c000000000000000000000000536deacedc6e972822b9e78571786b5a6dd10c8a0000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _token (address): 0x86E56f3c89a14528858e58B3De48c074538BAf2c
Arg [1] : _supervisor (address): 0x536DeaCEdC6E972822b9e78571786B5a6dd10c8A
Arg [2] : _networkId (uint256): 1

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000086e56f3c89a14528858e58b3de48c074538baf2c
Arg [1] : 000000000000000000000000536deacedc6e972822b9e78571786b5a6dd10c8a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001


Swarm Source

bzzr://3dac510c7a40db5687853931de1ad32aca909914ec171c33d97ad8d44dea7cd0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.