ETH Price: $2,333.43 (-0.77%)

Contract

0xB59A226a2b8A2F2b0512bAA35CC348b6b213b671
 

Overview

ETH Balance

3,420.014122792326643699 ETH

Eth Value

$7,980,366.06 (@ $2,333.43/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit239271512025-12-02 17:04:59105 days ago1764695099IN
MEV Bot: 0xb59...671
0 ETH0.000005550.18643912
Transfer239270982025-12-02 16:54:23105 days ago1764694463IN
MEV Bot: 0xb59...671
0 ETH0.000016790.20300497
Deposit239270942025-12-02 16:53:35105 days ago1764694415IN
MEV Bot: 0xb59...671
0.04 ETH0.000010650.20300497
Transfer239270742025-12-02 16:49:35105 days ago1764694175IN
MEV Bot: 0xb59...671
0 ETH0.000020880.25233412
Deposit239270722025-12-02 16:49:11105 days ago1764694151IN
MEV Bot: 0xb59...671
0.03932663 ETH0.000013240.25233412
Transfer239270572025-12-02 16:46:11105 days ago1764693971IN
MEV Bot: 0xb59...671
0 ETH0.000025730.31095275
Deposit239270562025-12-02 16:45:59105 days ago1764693959IN
MEV Bot: 0xb59...671
0.0395499 ETH0.000016310.31095275
Approve And Call239269632025-12-02 16:26:59105 days ago1764692819IN
MEV Bot: 0xb59...671
0 ETH0.000037220.43099131
Deposit239269612025-12-02 16:26:35105 days ago1764692795IN
MEV Bot: 0xb59...671
0.01 ETH0.000022730.43324402
Transfer239268942025-12-02 16:13:11105 days ago1764691991IN
MEV Bot: 0xb59...671
0 ETH0.000047340.57213118
Deposit239268932025-12-02 16:12:59105 days ago1764691979IN
MEV Bot: 0xb59...671
0.01 ETH0.000030220.5759454
Withdraw239267802025-12-02 15:50:23105 days ago1764690623IN
MEV Bot: 0xb59...671
0 ETH0.00003570.94394495
Transfer239267272025-12-02 15:39:23105 days ago1764689963IN
MEV Bot: 0xb59...671
0 ETH0.000068710.67433051
Deposit239267222025-12-02 15:38:11105 days ago1764689891IN
MEV Bot: 0xb59...671
0.01 ETH0.000025410.71836212
Transfer239267102025-12-02 15:35:47105 days ago1764689747IN
MEV Bot: 0xb59...671
0 ETH0.000088190.86552491
Deposit239267072025-12-02 15:35:11105 days ago1764689711IN
MEV Bot: 0xb59...671
0.01 ETH0.000031770.89797312
Transfer239266752025-12-02 15:28:47105 days ago1764689327IN
MEV Bot: 0xb59...671
0 ETH0.000111591.09523506
Deposit239266422025-12-02 15:22:11105 days ago1764688931IN
MEV Bot: 0xb59...671
0.01 ETH0.00006761.28824328
Withdraw239078602025-11-30 0:20:11108 days ago1764462011IN
MEV Bot: 0xb59...671
0 ETH0.000077332.04399551
Deposit229692632025-07-21 18:09:35239 days ago1753121375IN
MEV Bot: 0xb59...671
0.0005 ETH0.000056141.58684574
Deposit229692452025-07-21 18:05:59239 days ago1753121159IN
MEV Bot: 0xb59...671
0.0001 ETH0.000071232.01318646
Transfer229692442025-07-21 18:05:47239 days ago1753121147IN
MEV Bot: 0xb59...671
0 ETH0.000058472.06339849
Transfer229692432025-07-21 18:05:35239 days ago1753121135IN
MEV Bot: 0xb59...671
0 ETH0.000054811.93452017
Transfer229692412025-07-21 18:05:11239 days ago1753121111IN
MEV Bot: 0xb59...671
0 ETH0.0000551.94102374
Deposit229692402025-07-21 18:04:59239 days ago1753121099IN
MEV Bot: 0xb59...671
0.0002 ETH0.000073662.0820055
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer239270982025-12-02 16:54:23105 days ago1764694463
MEV Bot: 0xb59...671
0.04 ETH
Transfer239270742025-12-02 16:49:35105 days ago1764694175
MEV Bot: 0xb59...671
0.03932663 ETH
Transfer239270572025-12-02 16:46:11105 days ago1764693971
MEV Bot: 0xb59...671
0.0395499 ETH
Transfer239269632025-12-02 16:26:59105 days ago1764692819
MEV Bot: 0xb59...671
0.01 ETH
Transfer239268942025-12-02 16:13:11105 days ago1764691991
MEV Bot: 0xb59...671
0.01 ETH
Transfer239267802025-12-02 15:50:23105 days ago1764690623
MEV Bot: 0xb59...671
0.03 ETH
Transfer239267272025-12-02 15:39:23105 days ago1764689963
MEV Bot: 0xb59...671
0.03 ETH
Transfer239267192025-12-02 15:37:35105 days ago1764689855
MEV Bot: 0xb59...671
0.01 ETH
Deposit239267192025-12-02 15:37:35105 days ago1764689855
MEV Bot: 0xb59...671
0.01 ETH
Transfer239267102025-12-02 15:35:47105 days ago1764689747
MEV Bot: 0xb59...671
0.02 ETH
Transfer239266752025-12-02 15:28:47105 days ago1764689327
MEV Bot: 0xb59...671
0.01 ETH
Transfer239266252025-12-02 15:18:47105 days ago1764688727
MEV Bot: 0xb59...671
0.01 ETH
Deposit239266252025-12-02 15:18:47105 days ago1764688727
MEV Bot: 0xb59...671
0.01 ETH
Transfer239078602025-11-30 0:20:11108 days ago1764462011
MEV Bot: 0xb59...671
5 ETH
Transfer229691972025-07-21 17:56:23239 days ago1753120583
MEV Bot: 0xb59...671
0.002 ETH
Transfer229691182025-07-21 17:40:35239 days ago1753119635
MEV Bot: 0xb59...671
0.0013 ETH
Transfer229678572025-07-21 13:26:47239 days ago1753104407
MEV Bot: 0xb59...671
100 ETH
Deposit229678572025-07-21 13:26:47239 days ago1753104407
MEV Bot: 0xb59...671
100 ETH
Transfer229675382025-07-21 12:22:23239 days ago1753100543
MEV Bot: 0xb59...671
342.50132227 ETH
Deposit229675382025-07-21 12:22:23239 days ago1753100543
MEV Bot: 0xb59...671
342.50132227 ETH
Transfer229669302025-07-21 10:20:23239 days ago1753093223
MEV Bot: 0xb59...671
0.001 ETH
Transfer229667522025-07-21 9:44:35239 days ago1753091075
MEV Bot: 0xb59...671
0.001 ETH
Transfer213237502024-12-03 18:24:47469 days ago1733250287
MEV Bot: 0xb59...671
4 ETH
Transfer188087402023-12-17 22:33:59821 days ago1702852439
MEV Bot: 0xb59...671
4 ETH
Transfer185135962023-11-06 14:40:23862 days ago1699281623
MEV Bot: 0xb59...671
2 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherToken

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-11-10
*/

pragma solidity 0.4.15;

/// @title provides subject to role checking logic
contract IAccessPolicy {

    ////////////////////////
    // Public functions
    ////////////////////////

    /// @notice We don't make this function constant to allow for state-updating access controls such as rate limiting.
    /// @dev checks if subject belongs to requested role for particular object
    /// @param subject address to be checked against role, typically msg.sender
    /// @param role identifier of required role
    /// @param object contract instance context for role checking, typically contract requesting the check
    /// @param verb additional data, in current AccessControll implementation msg.sig
    /// @return if subject belongs to a role
    function allowed(
        address subject,
        bytes32 role,
        address object,
        bytes4 verb
    )
        public
        returns (bool);
}

/// @title enables access control in implementing contract
/// @dev see AccessControlled for implementation
contract IAccessControlled {

    ////////////////////////
    // Events
    ////////////////////////

    /// @dev must log on access policy change
    event LogAccessPolicyChanged(
        address controller,
        IAccessPolicy oldPolicy,
        IAccessPolicy newPolicy
    );

    ////////////////////////
    // Public functions
    ////////////////////////

    /// @dev allows to change access control mechanism for this contract
    ///     this method must be itself access controlled, see AccessControlled implementation and notice below
    /// @notice it is a huge issue for Solidity that modifiers are not part of function signature
    ///     then interfaces could be used for example to control access semantics
    /// @param newPolicy new access policy to controll this contract
    /// @param newAccessController address of ROLE_ACCESS_CONTROLLER of new policy that can set access to this contract
    function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController)
        public;

    function accessPolicy()
        public
        constant
        returns (IAccessPolicy);

}

contract StandardRoles {

    ////////////////////////
    // Constants
    ////////////////////////

    // @notice Soldity somehow doesn't evaluate this compile time
    // @dev role which has rights to change permissions and set new policy in contract, keccak256("AccessController")
    bytes32 internal constant ROLE_ACCESS_CONTROLLER = 0xac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da;
}

/// @title Granular code execution permissions
/// @notice Intended to replace existing Ownable pattern with more granular permissions set to execute smart contract functions
///     for each function where 'only' modifier is applied, IAccessPolicy implementation is called to evaluate if msg.sender belongs to required role for contract being called.
///     Access evaluation specific belong to IAccessPolicy implementation, see RoleBasedAccessPolicy for details.
/// @dev Should be inherited by a contract requiring such permissions controll. IAccessPolicy must be provided in constructor. Access policy may be replaced to a different one
///     by msg.sender with ROLE_ACCESS_CONTROLLER role
contract AccessControlled is IAccessControlled, StandardRoles {

    ////////////////////////
    // Mutable state
    ////////////////////////

    IAccessPolicy private _accessPolicy;

    ////////////////////////
    // Modifiers
    ////////////////////////

    /// @dev limits function execution only to senders assigned to required 'role'
    modifier only(bytes32 role) {
        require(_accessPolicy.allowed(msg.sender, role, this, msg.sig));
        _;
    }

    ////////////////////////
    // Constructor
    ////////////////////////

    function AccessControlled(IAccessPolicy policy) internal {
        require(address(policy) != 0x0);
        _accessPolicy = policy;
    }

    ////////////////////////
    // Public functions
    ////////////////////////

    //
    // Implements IAccessControlled
    //

    function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController)
        public
        only(ROLE_ACCESS_CONTROLLER)
    {
        // ROLE_ACCESS_CONTROLLER must be present
        // under the new policy. This provides some
        // protection against locking yourself out.
        require(newPolicy.allowed(newAccessController, ROLE_ACCESS_CONTROLLER, this, msg.sig));

        // We can now safely set the new policy without foot shooting.
        IAccessPolicy oldPolicy = _accessPolicy;
        _accessPolicy = newPolicy;

        // Log event
        LogAccessPolicyChanged(msg.sender, oldPolicy, newPolicy);
    }

    function accessPolicy()
        public
        constant
        returns (IAccessPolicy)
    {
        return _accessPolicy;
    }
}

contract IsContract {

    ////////////////////////
    // Internal functions
    ////////////////////////

    function isContract(address addr)
        internal
        constant
        returns (bool)
    {
        uint256 size;
        // takes 700 gas
        assembly { size := extcodesize(addr) }
        return size > 0;
    }
}

contract AccessRoles {

    ////////////////////////
    // Constants
    ////////////////////////

    // NOTE: All roles are set to the keccak256 hash of the
    // CamelCased role name, i.e.
    // ROLE_LOCKED_ACCOUNT_ADMIN = keccak256("LockedAccountAdmin")

    // may setup LockedAccount, change disbursal mechanism and set migration
    bytes32 internal constant ROLE_LOCKED_ACCOUNT_ADMIN = 0x4675da546d2d92c5b86c4f726a9e61010dce91cccc2491ce6019e78b09d2572e;

    // may setup whitelists and abort whitelisting contract with curve rollback
    bytes32 internal constant ROLE_WHITELIST_ADMIN = 0xaef456e7c864418e1d2a40d996ca4febf3a7e317fe3af5a7ea4dda59033bbe5c;

    // May issue (generate) Neumarks
    bytes32 internal constant ROLE_NEUMARK_ISSUER = 0x921c3afa1f1fff707a785f953a1e197bd28c9c50e300424e015953cbf120c06c;

    // May burn Neumarks it owns
    bytes32 internal constant ROLE_NEUMARK_BURNER = 0x19ce331285f41739cd3362a3ec176edffe014311c0f8075834fdd19d6718e69f;

    // May create new snapshots on Neumark
    bytes32 internal constant ROLE_SNAPSHOT_CREATOR = 0x08c1785afc57f933523bc52583a72ce9e19b2241354e04dd86f41f887e3d8174;

    // May enable/disable transfers on Neumark
    bytes32 internal constant ROLE_TRANSFER_ADMIN = 0xb6527e944caca3d151b1f94e49ac5e223142694860743e66164720e034ec9b19;

    // may reclaim tokens/ether from contracts supporting IReclaimable interface
    bytes32 internal constant ROLE_RECLAIMER = 0x0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc5;

    // represents legally platform operator in case of forks and contracts with legal agreement attached. keccak256("PlatformOperatorRepresentative")
    bytes32 internal constant ROLE_PLATFORM_OPERATOR_REPRESENTATIVE = 0xb2b321377653f655206f71514ff9f150d0822d062a5abcf220d549e1da7999f0;

    // allows to deposit EUR-T and allow addresses to send and receive EUR-T. keccak256("EurtDepositManager")
    bytes32 internal constant ROLE_EURT_DEPOSIT_MANAGER = 0x7c8ecdcba80ce87848d16ad77ef57cc196c208fc95c5638e4a48c681a34d4fe7;
}

contract IBasicToken {

    ////////////////////////
    // Events
    ////////////////////////

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

    ////////////////////////
    // Public functions
    ////////////////////////

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply()
        public
        constant
        returns (uint256);

    /// @param owner The address that's balance is being requested
    /// @return The balance of `owner` at the current block
    function balanceOf(address owner)
        public
        constant
        returns (uint256 balance);

    /// @notice Send `amount` tokens to `to` from `msg.sender`
    /// @param to The address of the recipient
    /// @param amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address to, uint256 amount)
        public
        returns (bool success);

}

/// @title allows deriving contract to recover any token or ether that it has balance of
/// @notice note that this opens your contracts to claims from various people saying they lost tokens and they want them back
///     be ready to handle such claims
/// @dev use with care!
///     1. ROLE_RECLAIMER is allowed to claim tokens, it's not returning tokens to original owner
///     2. in derived contract that holds any token by design you must override `reclaim` and block such possibility.
///         see LockedAccount as an example
contract Reclaimable is AccessControlled, AccessRoles {

    ////////////////////////
    // Constants
    ////////////////////////

    IBasicToken constant internal RECLAIM_ETHER = IBasicToken(0x0);

    ////////////////////////
    // Public functions
    ////////////////////////

    function reclaim(IBasicToken token)
        public
        only(ROLE_RECLAIMER)
    {
        address reclaimer = msg.sender;
        if(token == RECLAIM_ETHER) {
            reclaimer.transfer(this.balance);
        } else {
            uint256 balance = token.balanceOf(this);
            require(token.transfer(reclaimer, balance));
        }
    }
}

contract ITokenMetadata {

    ////////////////////////
    // Public functions
    ////////////////////////

    function symbol()
        public
        constant
        returns (string);

    function name()
        public
        constant
        returns (string);

    function decimals()
        public
        constant
        returns (uint8);
}

/// @title adds token metadata to token contract
/// @dev see Neumark for example implementation
contract TokenMetadata is ITokenMetadata {

    ////////////////////////
    // Immutable state
    ////////////////////////

    // The Token's name: e.g. DigixDAO Tokens
    string private NAME;

    // An identifier: e.g. REP
    string private SYMBOL;

    // Number of decimals of the smallest unit
    uint8 private DECIMALS;

    // An arbitrary versioning scheme
    string private VERSION;

    ////////////////////////
    // Constructor
    ////////////////////////

    /// @notice Constructor to set metadata
    /// @param tokenName Name of the new token
    /// @param decimalUnits Number of decimals of the new token
    /// @param tokenSymbol Token Symbol for the new token
    /// @param version Token version ie. when cloning is used
    function TokenMetadata(
        string tokenName,
        uint8 decimalUnits,
        string tokenSymbol,
        string version
    )
        public
    {
        NAME = tokenName;                                 // Set the name
        SYMBOL = tokenSymbol;                             // Set the symbol
        DECIMALS = decimalUnits;                          // Set the decimals
        VERSION = version;
    }

    ////////////////////////
    // Public functions
    ////////////////////////

    function name()
        public
        constant
        returns (string)
    {
        return NAME;
    }

    function symbol()
        public
        constant
        returns (string)
    {
        return SYMBOL;
    }

    function decimals()
        public
        constant
        returns (uint8)
    {
        return DECIMALS;
    }

    function version()
        public
        constant
        returns (string)
    {
        return VERSION;
    }
}

contract IERC223Callback {

    ////////////////////////
    // Public functions
    ////////////////////////

    function onTokenTransfer(
        address from,
        uint256 amount,
        bytes data
    )
        public;

}

contract IERC223Token is IBasicToken {

    /// @dev Departure: We do not log data, it has no advantage over a standard
    ///     log event. By sticking to the standard log event we
    ///     stay compatible with constracts that expect and ERC20 token.

    // event Transfer(
    //    address indexed from,
    //    address indexed to,
    //    uint256 amount,
    //    bytes data);


    /// @dev Departure: We do not use the callback on regular transfer calls to
    ///     stay compatible with constracts that expect and ERC20 token.

    // function transfer(address to, uint256 amount)
    //     public
    //     returns (bool);

    ////////////////////////
    // Public functions
    ////////////////////////

    function transfer(address to, uint256 amount, bytes data)
        public
        returns (bool);
}

contract IERC20Allowance {

    ////////////////////////
    // Events
    ////////////////////////

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount);

    ////////////////////////
    // Public functions
    ////////////////////////

    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param owner The address of the account that owns the token
    /// @param spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of owner that spender is allowed
    ///  to spend
    function allowance(address owner, address spender)
        public
        constant
        returns (uint256 remaining);

    /// @notice `msg.sender` approves `spender` to spend `amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param spender The address of the account able to transfer the tokens
    /// @param amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address spender, uint256 amount)
        public
        returns (bool success);

    /// @notice Send `amount` tokens to `to` from `from` on the condition it
    ///  is approved by `from`
    /// @param from The address holding the tokens being transferred
    /// @param to The address of the recipient
    /// @param amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address from, address to, uint256 amount)
        public
        returns (bool success);

}

contract IERC20Token is IBasicToken, IERC20Allowance {

}

contract IERC677Callback {

    ////////////////////////
    // Public functions
    ////////////////////////

    // NOTE: This call can be initiated by anyone. You need to make sure that
    // it is send by the token (`require(msg.sender == token)`) or make sure
    // amount is valid (`require(token.allowance(this) >= amount)`).
    function receiveApproval(
        address from,
        uint256 amount,
        address token, // IERC667Token
        bytes data
    )
        public
        returns (bool success);

}

contract IERC677Allowance is IERC20Allowance {

    ////////////////////////
    // Public functions
    ////////////////////////

    /// @notice `msg.sender` approves `spender` to send `amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param spender The address of the contract able to transfer the tokens
    /// @param amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address spender, uint256 amount, bytes extraData)
        public
        returns (bool success);

}

contract IERC677Token is IERC20Token, IERC677Allowance {
}

contract Math {

    ////////////////////////
    // Internal functions
    ////////////////////////

    // absolute difference: |v1 - v2|
    function absDiff(uint256 v1, uint256 v2)
        internal
        constant
        returns(uint256)
    {
        return v1 > v2 ? v1 - v2 : v2 - v1;
    }

    // divide v by d, round up if remainder is 0.5 or more
    function divRound(uint256 v, uint256 d)
        internal
        constant
        returns(uint256)
    {
        return add(v, d/2) / d;
    }

    // computes decimal decimalFraction 'frac' of 'amount' with maximum precision (multiplication first)
    // both amount and decimalFraction must have 18 decimals precision, frac 10**18 represents a whole (100% of) amount
    // mind loss of precision as decimal fractions do not have finite binary expansion
    // do not use instead of division
    function decimalFraction(uint256 amount, uint256 frac)
        internal
        constant
        returns(uint256)
    {
        // it's like 1 ether is 100% proportion
        return proportion(amount, frac, 10**18);
    }

    // computes part/total of amount with maximum precision (multiplication first)
    // part and total must have the same units
    function proportion(uint256 amount, uint256 part, uint256 total)
        internal
        constant
        returns(uint256)
    {
        return divRound(mul(amount, part), total);
    }

    //
    // Open Zeppelin Math library below
    //

    function mul(uint256 a, uint256 b)
        internal
        constant
        returns (uint256)
    {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function sub(uint256 a, uint256 b)
        internal
        constant
        returns (uint256)
    {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b)
        internal
        constant
        returns (uint256)
    {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }

    function min(uint256 a, uint256 b)
        internal
        constant
        returns (uint256)
    {
        return a < b ? a : b;
    }

    function max(uint256 a, uint256 b)
        internal
        constant
        returns (uint256)
    {
        return a > b ? a : b;
    }
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is IBasicToken, Math {

    ////////////////////////
    // Mutable state
    ////////////////////////

    mapping(address => uint256) internal _balances;

    uint256 internal _totalSupply;

    ////////////////////////
    // Public functions
    ////////////////////////

    /**
    * @dev transfer token for a specified address
    * @param to The address to transfer to.
    * @param amount The amount to be transferred.
    */
    function transfer(address to, uint256 amount)
        public
        returns (bool)
    {
        transferInternal(msg.sender, to, amount);
        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply()
        public
        constant
        returns (uint256)
    {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner)
        public
        constant
        returns (uint256 balance)
    {
        return _balances[owner];
    }

    ////////////////////////
    // Internal functions
    ////////////////////////

    // actual transfer function called by all public variants
    function transferInternal(address from, address to, uint256 amount)
        internal
    {
        require(to != address(0));

        _balances[from] = sub(_balances[from], amount);
        _balances[to] = add(_balances[to], amount);
        Transfer(from, to, amount);
    }
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is
    IERC20Token,
    BasicToken,
    IERC677Token
{

    ////////////////////////
    // Mutable state
    ////////////////////////

    mapping (address => mapping (address => uint256)) private _allowed;

    ////////////////////////
    // Public functions
    ////////////////////////

    //
    // Implements ERC20
    //

    /**
    * @dev Transfer tokens from one address to another
    * @param from address The address which you want to send tokens from
    * @param to address The address which you want to transfer to
    * @param amount uint256 the amount of tokens to be transferred
    */
    function transferFrom(address from, address to, uint256 amount)
        public
        returns (bool)
    {
        // check and reset allowance
        var allowance = _allowed[from][msg.sender];
        _allowed[from][msg.sender] = sub(allowance, amount);
        // do the transfer
        transferInternal(from, to, amount);
        return true;
    }

    /**
    * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
    * @param spender The address which will spend the funds.
    * @param amount The amount of tokens to be spent.
    */
    function approve(address spender, uint256 amount)
        public
        returns (bool)
    {

        // To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender, 0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((amount == 0) || (_allowed[msg.sender][spender] == 0));

        _allowed[msg.sender][spender] = amount;
        Approval(msg.sender, spender, amount);
        return true;
    }

    /**
    * @dev Function to check the amount of tokens that an owner allowed to a spender.
    * @param owner address The address which owns the funds.
    * @param spender address The address which will spend the funds.
    * @return A uint256 specifing the amount of tokens still avaible for the spender.
    */
    function allowance(address owner, address spender)
        public
        constant
        returns (uint256 remaining)
    {
        return _allowed[owner][spender];
    }

    //
    // Implements IERC677Token
    //

    function approveAndCall(
        address spender,
        uint256 amount,
        bytes extraData
    )
        public
        returns (bool)
    {
        require(approve(spender, amount));

        // in case of re-entry 1. approval is done 2. msg.sender is different
        bool success = IERC677Callback(spender).receiveApproval(
            msg.sender,
            amount,
            this,
            extraData
        );
        require(success);

        return true;
    }
}

contract EtherToken is
    IsContract,
    AccessControlled,
    StandardToken,
    TokenMetadata,
    Reclaimable
{
    ////////////////////////
    // Constants
    ////////////////////////

    string private constant NAME = "Ether Token";

    string private constant SYMBOL = "ETH-T";

    uint8 private constant DECIMALS = 18;

    ////////////////////////
    // Events
    ////////////////////////

    event LogDeposit(
        address indexed to,
        uint256 amount
    );

    event LogWithdrawal(
        address indexed from,
        uint256 amount
    );

    ////////////////////////
    // Constructor
    ////////////////////////

    function EtherToken(IAccessPolicy accessPolicy)
        AccessControlled(accessPolicy)
        StandardToken()
        TokenMetadata(NAME, DECIMALS, SYMBOL, "")
        Reclaimable()
        public
    {
    }

    ////////////////////////
    // Public functions
    ////////////////////////

    /// deposit msg.value of Ether to msg.sender balance
    function deposit()
        payable
        public
    {
        _balances[msg.sender] = add(_balances[msg.sender], msg.value);
        _totalSupply = add(_totalSupply, msg.value);
        LogDeposit(msg.sender, msg.value);
        Transfer(address(0), msg.sender, msg.value);
    }

    /// withdraws and sends 'amount' of ether to msg.sender
    function withdraw(uint256 amount)
        public
    {
        require(_balances[msg.sender] >= amount);
        _balances[msg.sender] = sub(_balances[msg.sender], amount);
        _totalSupply = sub(_totalSupply, amount);
        msg.sender.transfer(amount);
        LogWithdrawal(msg.sender, amount);
        Transfer(msg.sender, address(0), amount);
    }

    //
    // Implements IERC223Token
    //

    function transfer(address to, uint256 amount, bytes data)
        public
        returns (bool)
    {
        transferInternal(msg.sender, to, amount);

        // Notify the receiving contract.
        if (isContract(to)) {
            // in case of re-entry (1) transfer is done (2) msg.sender is different
            IERC223Callback(to).onTokenTransfer(msg.sender, amount, data);
        }
        return true;
    }

    //
    // Overrides Reclaimable
    //

    /// @notice allows EtherToken to reclaim tokens wrongly sent to its address
    /// @dev as EtherToken by design has balance of Ether (native Ethereum token)
    ///     such reclamation is not allowed
    function reclaim(IBasicToken token)
        public
    {
        // forbid reclaiming ETH hold in this contract.
        require(token != RECLAIM_ETHER);
        Reclaimable.reclaim(token);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPolicy","type":"address"},{"name":"newAccessController","type":"address"}],"name":"setAccessPolicy","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"},{"name":"extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"accessPolicy","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaim","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"accessPolicy","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"},{"indexed":false,"name":"oldPolicy","type":"address"},{"indexed":false,"name":"newPolicy","type":"address"}],"name":"LogAccessPolicyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"}]

606060405234156200001057600080fd5b604051602080620014d7833981016040528080519150505b6040805190810160405280600b81526020017f457468657220546f6b656e00000000000000000000000000000000000000000081525060126040805190810160405280600581526020017f4554482d540000000000000000000000000000000000000000000000000000008152506020604051908101604052600081525b845b600160a060020a0381161515620000be57600080fd5b60028054600160a060020a031916600160a060020a0383161790555b506004848051620000f092916020019062000139565b5060058280516200010692916020019062000139565b506006805460ff191660ff851617905560078180516200012b92916020019062000139565b505b505050505b50620001e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017c57805160ff1916838001178555620001ac565b82800160010185558215620001ac579182015b82811115620001ac5782518255916020019190600101906200018f565b5b50620001bb929150620001bf565b5090565b620001e091905b80821115620001bb5760008155600101620001c6565b5090565b90565b6112e480620001f36000396000f300606060405236156100d55763ffffffff60e060020a60003504166306fdde0381146100da578063095ea7b31461016557806318160ddd1461019b57806323b872dd146101c05780632e1a7d4d146101fc578063313ce5671461021457806354fd4d501461023d57806357875631146102c857806370a08231146102ef57806395d89b4114610320578063a9059cbb146103ab578063be45fd62146103e1578063cae9ca511461045a578063d0e30db0146104d3578063dd62ed3e146104dd578063f5d60a5114610514578063fc772c8b14610543575b600080fd5b34156100e557600080fd5b6100ed610564565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017057600080fd5b610187600160a060020a036004351660243561060d565b604051901515815260200160405180910390f35b34156101a657600080fd5b6101ae6106b4565b60405190815260200160405180910390f35b34156101cb57600080fd5b610187600160a060020a03600435811690602435166044356106bb565b604051901515815260200160405180910390f35b341561020757600080fd5b61021260043561072d565b005b341561021f57600080fd5b610227610850565b60405160ff909116815260200160405180910390f35b341561024857600080fd5b6100ed61085a565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d357600080fd5b610212600160a060020a0360043581169060243516610903565b005b34156102fa57600080fd5b6101ae600160a060020a0360043516610b2d565b60405190815260200160405180910390f35b341561032b57600080fd5b6100ed610b4c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b657600080fd5b610187600160a060020a0360043516602435610bf5565b604051901515815260200160405180910390f35b34156103ec57600080fd5b61018760048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c0c95505050505050565b604051901515815260200160405180910390f35b341561046557600080fd5b61018760048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610d1495505050505050565b604051901515815260200160405180910390f35b610212610e51565b005b34156104e857600080fd5b6101ae600160a060020a0360043581169060243516610f1c565b60405190815260200160405180910390f35b341561051f57600080fd5b610527610f49565b604051600160a060020a03909116815260200160405180910390f35b341561054e57600080fd5b610212600160a060020a0360043516610f59565b005b61056c6112a6565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b600081158061063f5750600160a060020a03338116600090815260036020908152604080832093871683529290522054155b151561064a57600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6001545b90565b600160a060020a038084166000908152600360209081526040808320339094168352929052908120546106ee8184610f7b565b600160a060020a0380871660009081526003602090815260408083203390941683529290522055610720858585610f92565b600191505b509392505050565b600160a060020a0333166000908152602081905260409020548190101561075357600080fd5b600160a060020a0333166000908152602081905260409020546107769082610f7b565b600160a060020a03331660009081526020819052604090205560015461079c9082610f7b565b600155600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156107d057600080fd5b33600160a060020a03167fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e918260405190815260200160405180910390a2600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35b50565b60065460ff165b90565b6108626112a6565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b6002546000907fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da90600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156109ae57600080fd5b6102c65a03f115156109bf57600080fd5b5050506040518051905015156109d457600080fd5b83600160a060020a0316639085b77f847fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da60010230600035600160e060020a03191660006040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b505050604051805190501515610aa357600080fd5b60028054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff198316179092551691507f7d475c32583df95fccc34a6e12df24c1fc9943092cc129b6512013aecba0f136338386604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a15b5b50505050565b600160a060020a0381166000908152602081905260409020545b919050565b610b546112a6565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b6000610c02338484610f92565b5060015b92915050565b6000610c19338585610f92565b610c2284611056565b15610d095783600160a060020a031663a4c0ed363385856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ca75780820151818401525b602001610c8e565b50505050905090810190601f168015610cd45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515610cf457600080fd5b6102c65a03f11515610d0557600080fd5b5050505b5060015b9392505050565b600080610d21858561060d565b1515610d2c57600080fd5b84600160a060020a0316638f4ffcb1338630876000604051602001526040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dce5780820151818401525b602001610db5565b50505050905090810190601f168015610dfb5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610e1c57600080fd5b6102c65a03f11515610e2d57600080fd5b505050604051805191505080151561072057600080fd5b600191505b509392505050565b600160a060020a033316600090815260208190526040902054610e749034611065565b600160a060020a033316600090815260208190526040902055600154610e9a9034611065565b600155600160a060020a0333167f1b851e1031ef35a238e6c67d0c7991162390df915f70eaf9098dbf0b175a61983460405190815260200160405180910390a2600160a060020a03331660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3460405190815260200160405180910390a35b565b600160a060020a038083166000908152600360209081526040808320938516835292905220545b92915050565b600254600160a060020a03165b90565b600160a060020a0381161515610f6e57600080fd5b61084d8161107f565b5b50565b600082821115610f8757fe5b508082035b92915050565b600160a060020a0382161515610fa757600080fd5b600160a060020a038316600090815260208190526040902054610fca9082610f7b565b600160a060020a038085166000908152602081905260408082209390935590841681522054610ff99082611065565b600160a060020a03808416600081815260208190526040908190209390935591908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a35b505050565b6000813b908111905b50919050565b60008282018381101561107457fe5b8091505b5092915050565b60025460009081907f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc590600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561112c57600080fd5b6102c65a03f1151561113d57600080fd5b50505060405180519050151561115257600080fd5b339250600160a060020a03841615156111a75782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156111a257600080fd5b610b26565b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111fe57600080fd5b6102c65a03f1151561120f57600080fd5b5050506040518051925050600160a060020a03841663a9059cbb848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561127757600080fd5b6102c65a03f1151561128857600080fd5b505050604051805190501515610b2657600080fd5b5b5b5b50505050565b602060405190810160405260008152905600a165627a7a7230582080791d1f9dc3b49e0568657b190fb23268e5977ad0754e8763006599b244326f0029000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490

Deployed Bytecode

0x606060405236156100d55763ffffffff60e060020a60003504166306fdde0381146100da578063095ea7b31461016557806318160ddd1461019b57806323b872dd146101c05780632e1a7d4d146101fc578063313ce5671461021457806354fd4d501461023d57806357875631146102c857806370a08231146102ef57806395d89b4114610320578063a9059cbb146103ab578063be45fd62146103e1578063cae9ca511461045a578063d0e30db0146104d3578063dd62ed3e146104dd578063f5d60a5114610514578063fc772c8b14610543575b600080fd5b34156100e557600080fd5b6100ed610564565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017057600080fd5b610187600160a060020a036004351660243561060d565b604051901515815260200160405180910390f35b34156101a657600080fd5b6101ae6106b4565b60405190815260200160405180910390f35b34156101cb57600080fd5b610187600160a060020a03600435811690602435166044356106bb565b604051901515815260200160405180910390f35b341561020757600080fd5b61021260043561072d565b005b341561021f57600080fd5b610227610850565b60405160ff909116815260200160405180910390f35b341561024857600080fd5b6100ed61085a565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d357600080fd5b610212600160a060020a0360043581169060243516610903565b005b34156102fa57600080fd5b6101ae600160a060020a0360043516610b2d565b60405190815260200160405180910390f35b341561032b57600080fd5b6100ed610b4c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012a5780820151818401525b602001610111565b50505050905090810190601f1680156101575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b657600080fd5b610187600160a060020a0360043516602435610bf5565b604051901515815260200160405180910390f35b34156103ec57600080fd5b61018760048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c0c95505050505050565b604051901515815260200160405180910390f35b341561046557600080fd5b61018760048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610d1495505050505050565b604051901515815260200160405180910390f35b610212610e51565b005b34156104e857600080fd5b6101ae600160a060020a0360043581169060243516610f1c565b60405190815260200160405180910390f35b341561051f57600080fd5b610527610f49565b604051600160a060020a03909116815260200160405180910390f35b341561054e57600080fd5b610212600160a060020a0360043516610f59565b005b61056c6112a6565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b600081158061063f5750600160a060020a03338116600090815260036020908152604080832093871683529290522054155b151561064a57600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6001545b90565b600160a060020a038084166000908152600360209081526040808320339094168352929052908120546106ee8184610f7b565b600160a060020a0380871660009081526003602090815260408083203390941683529290522055610720858585610f92565b600191505b509392505050565b600160a060020a0333166000908152602081905260409020548190101561075357600080fd5b600160a060020a0333166000908152602081905260409020546107769082610f7b565b600160a060020a03331660009081526020819052604090205560015461079c9082610f7b565b600155600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156107d057600080fd5b33600160a060020a03167fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e918260405190815260200160405180910390a2600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35b50565b60065460ff165b90565b6108626112a6565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b6002546000907fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da90600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b15156109ae57600080fd5b6102c65a03f115156109bf57600080fd5b5050506040518051905015156109d457600080fd5b83600160a060020a0316639085b77f847fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da60010230600035600160e060020a03191660006040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b505050604051805190501515610aa357600080fd5b60028054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff198316179092551691507f7d475c32583df95fccc34a6e12df24c1fc9943092cc129b6512013aecba0f136338386604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a15b5b50505050565b600160a060020a0381166000908152602081905260409020545b919050565b610b546112a6565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106025780601f106105d757610100808354040283529160200191610602565b820191906000526020600020905b8154815290600101906020018083116105e557829003601f168201915b505050505090505b90565b6000610c02338484610f92565b5060015b92915050565b6000610c19338585610f92565b610c2284611056565b15610d095783600160a060020a031663a4c0ed363385856040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ca75780820151818401525b602001610c8e565b50505050905090810190601f168015610cd45780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515610cf457600080fd5b6102c65a03f11515610d0557600080fd5b5050505b5060015b9392505050565b600080610d21858561060d565b1515610d2c57600080fd5b84600160a060020a0316638f4ffcb1338630876000604051602001526040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dce5780820151818401525b602001610db5565b50505050905090810190601f168015610dfb5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610e1c57600080fd5b6102c65a03f11515610e2d57600080fd5b505050604051805191505080151561072057600080fd5b600191505b509392505050565b600160a060020a033316600090815260208190526040902054610e749034611065565b600160a060020a033316600090815260208190526040902055600154610e9a9034611065565b600155600160a060020a0333167f1b851e1031ef35a238e6c67d0c7991162390df915f70eaf9098dbf0b175a61983460405190815260200160405180910390a2600160a060020a03331660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3460405190815260200160405180910390a35b565b600160a060020a038083166000908152600360209081526040808320938516835292905220545b92915050565b600254600160a060020a03165b90565b600160a060020a0381161515610f6e57600080fd5b61084d8161107f565b5b50565b600082821115610f8757fe5b508082035b92915050565b600160a060020a0382161515610fa757600080fd5b600160a060020a038316600090815260208190526040902054610fca9082610f7b565b600160a060020a038085166000908152602081905260408082209390935590841681522054610ff99082611065565b600160a060020a03808416600081815260208190526040908190209390935591908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a35b505050565b6000813b908111905b50919050565b60008282018381101561107457fe5b8091505b5092915050565b60025460009081907f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc590600160a060020a0316639085b77f338330600160e060020a0319873516876040516020015260405160e060020a63ffffffff8716028152600160a060020a039485166004820152602481019390935292166044820152600160e060020a03199091166064820152608401602060405180830381600087803b151561112c57600080fd5b6102c65a03f1151561113d57600080fd5b50505060405180519050151561115257600080fd5b339250600160a060020a03841615156111a75782600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156111a257600080fd5b610b26565b83600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111fe57600080fd5b6102c65a03f1151561120f57600080fd5b5050506040518051925050600160a060020a03841663a9059cbb848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561127757600080fd5b6102c65a03f1151561128857600080fd5b505050604051805190501515610b2657600080fd5b5b5b5b50505050565b602060405190810160405260008152905600a165627a7a7230582080791d1f9dc3b49e0568657b190fb23268e5977ad0754e8763006599b244326f0029

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

000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490

-----Decoded View---------------
Arg [0] : accessPolicy (address): 0xaE38c27E646959735ec70d77ED4eCc03A3EFf490

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490


Swarm Source

bzzr://80791d1f9dc3b49e0568657b190fb23268e5977ad0754e8763006599b244326f

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0xB59A226a2b8A2F2b0512bAA35CC348b6b213b671
Loading...
Loading
[ Download: CSV Export  ]
[ 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.