ETH Price: $2,408.37 (+2.50%)

Contract

0xB59A226a2b8A2F2b0512bAA35CC348b6b213b671
 

Overview

ETH Balance

3,429.013222792326643699 ETH

Eth Value

$8,258,328.48 (@ $2,408.37/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw188087402023-12-17 22:33:59270 days ago1702852439IN
MEV Bot: 0xb59...671
0 ETH0.0013953136.87882582
Approve188084832023-12-17 21:41:35270 days ago1702849295IN
MEV Bot: 0xb59...671
0 ETH0.0015938734.34921038
Withdraw185135962023-11-06 14:40:23312 days ago1699281623IN
MEV Bot: 0xb59...671
0 ETH0.001500439.65645919
Approve And Call185135532023-11-06 14:31:47312 days ago1699281107IN
MEV Bot: 0xb59...671
0 ETH0.0022168140.99071462
Approve185134762023-11-06 14:16:23312 days ago1699280183IN
MEV Bot: 0xb59...671
0 ETH0.0015883534.20382687
Withdraw185134642023-11-06 14:13:59312 days ago1699280039IN
MEV Bot: 0xb59...671
0 ETH0.0021540290.45222506
Withdraw185134452023-11-06 14:10:11312 days ago1699279811IN
MEV Bot: 0xb59...671
0 ETH0.0008936337.52562562
Withdraw185134292023-11-06 14:06:59312 days ago1699279619IN
MEV Bot: 0xb59...671
0 ETH0.000814534.16827314
Withdraw185134182023-11-06 14:04:47312 days ago1699279487IN
MEV Bot: 0xb59...671
0 ETH0.0008550935.79900225
Withdraw185134032023-11-06 14:01:35312 days ago1699279295IN
MEV Bot: 0xb59...671
0 ETH0.0008516735.7634482
Approve And Call185088862023-11-05 22:50:47312 days ago1699224647IN
MEV Bot: 0xb59...671
0 ETH0.0008880115.87523016
Approve And Call185088012023-11-05 22:33:47312 days ago1699223627IN
MEV Bot: 0xb59...671
0 ETH0.0008895816.38006012
Withdraw185087892023-11-05 22:31:23312 days ago1699223483IN
MEV Bot: 0xb59...671
0 ETH0.0003875216.25650725
Withdraw185087592023-11-05 22:25:23312 days ago1699223123IN
MEV Bot: 0xb59...671
0 ETH0.0006003825.18604532
Withdraw185086972023-11-05 22:12:47312 days ago1699222367IN
MEV Bot: 0xb59...671
0 ETH0.0004037616.99780334
Set Access Polic...163552692023-01-07 13:41:35615 days ago1673098895IN
MEV Bot: 0xb59...671
0 ETH0.0007341118.06385852
Withdraw145299282022-04-06 3:26:08891 days ago1649215568IN
MEV Bot: 0xb59...671
0 ETH0.001816860.03397073
Withdraw144359632022-03-22 11:52:35906 days ago1647949955IN
MEV Bot: 0xb59...671
0 ETH0.0006428416.99064499
Withdraw143916732022-03-15 14:26:18913 days ago1647354378IN
MEV Bot: 0xb59...671
0 ETH0.001768846.73558881
Withdraw141807962022-02-10 21:38:15945 days ago1644529095IN
MEV Bot: 0xb59...671
0 ETH0.0024965565.98523056
Transfer140259642022-01-17 23:12:28969 days ago1642461148IN
MEV Bot: 0xb59...671
0 ETH0.00259678123.65636974
Withdraw140258982022-01-17 22:58:32969 days ago1642460312IN
MEV Bot: 0xb59...671
0 ETH0.0040868107.98232229
Withdraw140225212022-01-17 10:36:01970 days ago1642415761IN
MEV Bot: 0xb59...671
0 ETH0.0025202666.59088479
Withdraw140173542022-01-16 15:26:50971 days ago1642346810IN
MEV Bot: 0xb59...671
0 ETH0.0032123684.90451996
Withdraw140046142022-01-14 16:08:26973 days ago1642176506IN
MEV Bot: 0xb59...671
0 ETH0.01064147281.26002723
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
188087402023-12-17 22:33:59270 days ago1702852439
MEV Bot: 0xb59...671
4 ETH
185135962023-11-06 14:40:23312 days ago1699281623
MEV Bot: 0xb59...671
2 ETH
144359632022-03-22 11:52:35906 days ago1647949955
MEV Bot: 0xb59...671
1 ETH
143916732022-03-15 14:26:18913 days ago1647354378
MEV Bot: 0xb59...671
4.46491691 ETH
141807962022-02-10 21:38:15945 days ago1644529095
MEV Bot: 0xb59...671
5 ETH
140258982022-01-17 22:58:32969 days ago1642460312
MEV Bot: 0xb59...671
176 ETH
140225212022-01-17 10:36:01970 days ago1642415761
MEV Bot: 0xb59...671
300 ETH
140196872022-01-16 23:58:02970 days ago1642377482
MEV Bot: 0xb59...671
2 ETH
140176162022-01-16 16:22:04971 days ago1642350124
MEV Bot: 0xb59...671
1.8 ETH
140173542022-01-16 15:26:50971 days ago1642346810
MEV Bot: 0xb59...671
1 ETH
140169172022-01-16 13:54:04971 days ago1642341244
MEV Bot: 0xb59...671
1.61 ETH
140119332022-01-15 19:30:51971 days ago1642275051
MEV Bot: 0xb59...671
1.3 ETH
140093162022-01-15 9:51:56972 days ago1642240316
MEV Bot: 0xb59...671
2.749 ETH
140059132022-01-14 20:56:46972 days ago1642193806
MEV Bot: 0xb59...671
11 ETH
140046142022-01-14 16:08:26973 days ago1642176506
MEV Bot: 0xb59...671
1 ETH
139985192022-01-13 17:33:12973 days ago1642095192
MEV Bot: 0xb59...671
1.3 ETH
139973712022-01-13 13:17:28974 days ago1642079848
MEV Bot: 0xb59...671
1.00367668 ETH
139970282022-01-13 12:04:32974 days ago1642075472
MEV Bot: 0xb59...671
1.5 ETH
139910322022-01-12 13:47:38975 days ago1641995258
MEV Bot: 0xb59...671
20.3 ETH
139909402022-01-12 13:21:17975 days ago1641993677
MEV Bot: 0xb59...671
1.96615142 ETH
139847612022-01-11 14:24:58976 days ago1641911098
MEV Bot: 0xb59...671
10.3 ETH
139813102022-01-11 1:38:04976 days ago1641865084
MEV Bot: 0xb59...671
4 ETH
139691572022-01-09 4:27:57978 days ago1641702477
MEV Bot: 0xb59...671
4.00949348 ETH
138810352021-12-26 13:14:23992 days ago1640524463
MEV Bot: 0xb59...671
1 ETH
137916732021-12-12 17:28:261005 days ago1639330106
MEV Bot: 0xb59...671
2.80305259 ETH
View All Internal Transactions
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

Contract Source Code (Solidity)

/**
 *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

[{"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 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  ]
[ 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.