ETH Price: $2,751.43 (+1.52%)

Contract

0x4288F043370910c923f7a600526CA8064Da05d0d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Reclaim Tokens120297102021-03-13 10:40:581440 days ago1615632058IN
0x4288F043...64Da05d0d
0 ETH0.01012125150
Revoke Allocatio...111451182020-10-28 12:28:131576 days ago1603888093IN
0x4288F043...64Da05d0d
0 ETH0.0019017575.02000176
Revoke Allocatio...111450942020-10-28 12:23:071576 days ago1603887787IN
0x4288F043...64Da05d0d
0 ETH0.0019017575.02000176
Set Ops Address110008122020-10-06 7:16:131598 days ago1601968573IN
0x4288F043...64Da05d0d
0 ETH0.0013883240
Set Ops Address110007862020-10-06 7:11:291598 days ago1601968289IN
0x4288F043...64Da05d0d
0 ETH0.0013883240
Set Ops Address107948142020-09-04 12:22:361630 days ago1599222156IN
0x4288F043...64Da05d0d
0 ETH0.0069416200
Set Ops Address107947922020-09-04 12:17:441630 days ago1599221864IN
0x4288F043...64Da05d0d
0 ETH0.0099416200
Set Ops Address106072992020-08-06 16:18:041659 days ago1596730684IN
0x4288F043...64Da05d0d
0 ETH0.000973450
Set Ops Address106072552020-08-06 16:07:571659 days ago1596730077IN
0x4288F043...64Da05d0d
0 ETH0.001735450
Set Ops Address106072012020-08-06 15:56:151659 days ago1596729375IN
0x4288F043...64Da05d0d
0 ETH0.002603175
Set Ops Address106071692020-08-06 15:51:381659 days ago1596729098IN
0x4288F043...64Da05d0d
0 ETH0.0040263481
Set Ops Address104195142020-07-08 14:49:041688 days ago1594219744IN
0x4288F043...64Da05d0d
0 ETH0.0014016972
Set Ops Address104194962020-07-08 14:45:551688 days ago1594219555IN
0x4288F043...64Da05d0d
0 ETH0.0024989772
Set Ops Address104194672020-07-08 14:41:051688 days ago1594219265IN
0x4288F043...64Da05d0d
0 ETH0.0024989772
Set Ops Address104194362020-07-08 14:34:451688 days ago1594218885IN
0x4288F043...64Da05d0d
0 ETH0.0035292671
Set Ops Address101808252020-06-01 15:37:271725 days ago1591025847IN
0x4288F043...64Da05d0d
0 ETH0.0006813835
Set Ops Address101806822020-06-01 15:01:581725 days ago1591023718IN
0x4288F043...64Da05d0d
0 ETH0.0012147835
Set Ops Address101804632020-06-01 14:16:491725 days ago1591021009IN
0x4288F043...64Da05d0d
0 ETH0.0012147835
Set Ops Address101804032020-06-01 14:03:241725 days ago1591020204IN
0x4288F043...64Da05d0d
0 ETH0.0010412430
Set Ops Address101804032020-06-01 14:03:241725 days ago1591020204IN
0x4288F043...64Da05d0d
0 ETH0.0014912430
Set Ops Address100077642020-05-05 18:17:021752 days ago1588702622IN
0x4288F043...64Da05d0d
0 ETH0.0002920215
Set Ops Address100077462020-05-05 18:12:231752 days ago1588702343IN
0x4288F043...64Da05d0d
0 ETH0.0005206215
Set Ops Address100077292020-05-05 18:08:211752 days ago1588702101IN
0x4288F043...64Da05d0d
0 ETH0.0005206215
Set Ops Address100077122020-05-05 18:04:081752 days ago1588701848IN
0x4288F043...64Da05d0d
0 ETH0.0005206215
Set Ops Address100077022020-05-05 18:01:411752 days ago1588701701IN
0x4288F043...64Da05d0d
0 ETH0.0007456215
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
120297102021-03-13 10:40:581440 days ago1615632058
0x4288F043...64Da05d0d
0 ETH
120297102021-03-13 10:40:581440 days ago1615632058
0x4288F043...64Da05d0d
0 ETH
120297102021-03-13 10:40:581440 days ago1615632058
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
110008212020-10-06 7:18:101598 days ago1601968690
0x4288F043...64Da05d0d
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Trustee

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-11-13
*/

pragma solidity ^0.4.17;

// ----------------------------------------------------------------------------
// Token Trustee Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// SafeMath Library Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
//
// Based on the SafeMath library by the OpenZeppelin team.
// Copyright (c) 2016 Smart Contract Solutions, Inc.
// https://github.com/OpenZeppelin/zeppelin-solidity
// The MIT License.
// ----------------------------------------------------------------------------


library SafeMath {

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;

        assert(a == 0 || c / a == b);

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity automatically throws when dividing by 0
        uint256 c = a / b;

        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);

        return a - b;
    }


    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;

        assert(c >= a);

        return c;
    }
}

//
// Implements basic ownership with 2-step transfers.
//
contract Owned {

    address public owner;
    address public proposedOwner;

    event OwnershipTransferInitiated(address indexed _proposedOwner);
    event OwnershipTransferCompleted(address indexed _newOwner);


    function Owned() public {
        owner = msg.sender;
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }


    function isOwner(address _address) internal view returns (bool) {
        return (_address == owner);
    }


    function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) {
        proposedOwner = _proposedOwner;

        OwnershipTransferInitiated(_proposedOwner);

        return true;
    }


    function completeOwnershipTransfer() public returns (bool) {
        require(msg.sender == proposedOwner);

        owner = proposedOwner;
        proposedOwner = address(0);

        OwnershipTransferCompleted(owner);

        return true;
    }
}

//
// Implements a more advanced ownership and permission model based on owner,
// admin and ops per Simple Token key management specification.
//
contract OpsManaged is Owned {

    address public opsAddress;
    address public adminAddress;

    event AdminAddressChanged(address indexed _newAddress);
    event OpsAddressChanged(address indexed _newAddress);


    function OpsManaged() public
        Owned()
    {
    }


    modifier onlyAdmin() {
        require(isAdmin(msg.sender));
        _;
    }


    modifier onlyAdminOrOps() {
        require(isAdmin(msg.sender) || isOps(msg.sender));
        _;
    }


    modifier onlyOwnerOrAdmin() {
        require(isOwner(msg.sender) || isAdmin(msg.sender));
        _;
    }


    modifier onlyOps() {
        require(isOps(msg.sender));
        _;
    }


    function isAdmin(address _address) internal view returns (bool) {
        return (adminAddress != address(0) && _address == adminAddress);
    }


    function isOps(address _address) internal view returns (bool) {
        return (opsAddress != address(0) && _address == opsAddress);
    }


    function isOwnerOrOps(address _address) internal view returns (bool) {
        return (isOwner(_address) || isOps(_address));
    }


    // Owner and Admin can change the admin address. Address can also be set to 0 to 'disable' it.
    function setAdminAddress(address _adminAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_adminAddress != owner);
        require(_adminAddress != address(this));
        require(!isOps(_adminAddress));

        adminAddress = _adminAddress;

        AdminAddressChanged(_adminAddress);

        return true;
    }


    // Owner and Admin can change the operations address. Address can also be set to 0 to 'disable' it.
    function setOpsAddress(address _opsAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_opsAddress != owner);
        require(_opsAddress != address(this));
        require(!isAdmin(_opsAddress));

        opsAddress = _opsAddress;

        OpsAddressChanged(_opsAddress);

        return true;
    }
}

contract SimpleTokenConfig {

    string  public constant TOKEN_SYMBOL   = "ST";
    string  public constant TOKEN_NAME     = "Simple Token";
    uint8   public constant TOKEN_DECIMALS = 18;

    uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS);
    uint256 public constant TOKENS_MAX     = 800000000 * DECIMALSFACTOR;
}

contract ERC20Interface {

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    function name() public view returns (string);
    function symbol() public view returns (string);
    function decimals() public view returns (uint8);
    function totalSupply() public view returns (uint256);

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

    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
}

//
// Standard ERC20 implementation, with ownership.
//
contract ERC20Token is ERC20Interface, Owned {

    using SafeMath for uint256;

    string  private tokenName;
    string  private tokenSymbol;
    uint8   private tokenDecimals;
    uint256 internal tokenTotalSupply;

    mapping(address => uint256) balances;
    mapping(address => mapping (address => uint256)) allowed;


    function ERC20Token(string _symbol, string _name, uint8 _decimals, uint256 _totalSupply) public
        Owned()
    {
        tokenSymbol      = _symbol;
        tokenName        = _name;
        tokenDecimals    = _decimals;
        tokenTotalSupply = _totalSupply;
        balances[owner]  = _totalSupply;

        // According to the ERC20 standard, a token contract which creates new tokens should trigger
        // a Transfer event and transfers of 0 values must also fire the event.
        Transfer(0x0, owner, _totalSupply);
    }


    function name() public view returns (string) {
        return tokenName;
    }


    function symbol() public view returns (string) {
        return tokenSymbol;
    }


    function decimals() public view returns (uint8) {
        return tokenDecimals;
    }


    function totalSupply() public view returns (uint256) {
        return tokenTotalSupply;
    }


    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }


    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }


    function transfer(address _to, uint256 _value) public returns (bool success) {
        // According to the EIP20 spec, "transfers of 0 values MUST be treated as normal
        // transfers and fire the Transfer event".
        // Also, should throw if not enough balance. This is taken care of by SafeMath.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }


    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        balances[_from] = balances[_from].sub(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(_from, _to, _value);

        return true;
    }


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

        allowed[msg.sender][_spender] = _value;

        Approval(msg.sender, _spender, _value);

        return true;
    }
}

//
// SimpleToken is a standard ERC20 token with some additional functionality:
// - It has a concept of finalize
// - Before finalize, nobody can transfer tokens except:
//     - Owner and operations can transfer tokens
//     - Anybody can send back tokens to owner
// - After finalize, no restrictions on token transfers
//

//
// Permissions, according to the ST key management specification.
//
//                                    Owner    Admin   Ops
// transfer (before finalize)           x               x
// transferForm (before finalize)       x               x
// finalize                                      x
//

contract SimpleToken is ERC20Token, OpsManaged, SimpleTokenConfig {

    bool public finalized;


    // Events
    event Burnt(address indexed _from, uint256 _amount);
    event Finalized();


    function SimpleToken() public
        ERC20Token(TOKEN_SYMBOL, TOKEN_NAME, TOKEN_DECIMALS, TOKENS_MAX)
        OpsManaged()
    {
        finalized = false;
    }


    // Implementation of the standard transfer method that takes into account the finalize flag.
    function transfer(address _to, uint256 _value) public returns (bool success) {
        checkTransferAllowed(msg.sender, _to);

        return super.transfer(_to, _value);
    }


    // Implementation of the standard transferFrom method that takes into account the finalize flag.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        checkTransferAllowed(msg.sender, _to);

        return super.transferFrom(_from, _to, _value);
    }


    function checkTransferAllowed(address _sender, address _to) private view {
        if (finalized) {
            // Everybody should be ok to transfer once the token is finalized.
            return;
        }

        // Owner and Ops are allowed to transfer tokens before the sale is finalized.
        // This allows the tokens to move from the TokenSale contract to a beneficiary.
        // We also allow someone to send tokens back to the owner. This is useful among other
        // cases, for the Trustee to transfer unlocked tokens back to the owner (reclaimTokens).
        require(isOwnerOrOps(_sender) || _to == owner);
    }

    // Implement a burn function to permit msg.sender to reduce its balance
    // which also reduces tokenTotalSupply
    function burn(uint256 _value) public returns (bool success) {
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        tokenTotalSupply = tokenTotalSupply.sub(_value);

        Burnt(msg.sender, _value);

        return true;
    }


    // Finalize method marks the point where token transfers are finally allowed for everybody.
    function finalize() external onlyAdmin returns (bool success) {
        require(!finalized);

        finalized = true;

        Finalized();

        return true;
    }
}

//
// Implements a simple trustee which can release tokens based on
// an explicit call from the owner.
//

//
// Permissions, according to the ST key management specification.
//
//                                Owner    Admin   Ops   Revoke
// grantAllocation                           x      x
// revokeAllocation                                        x
// processAllocation                                x
// reclaimTokens                             x
// setRevokeAddress                 x                      x
//

contract Trustee is OpsManaged {

    using SafeMath for uint256;


    SimpleToken public tokenContract;

    struct Allocation {
        uint256 amountGranted;
        uint256 amountTransferred;
        bool    revokable;
    }

    // The trustee has a special 'revoke' key which is allowed to revoke allocations.
    address public revokeAddress;

    // Total number of tokens that are currently allocated.
    // This does not include tokens that have been processed (sent to an address) already or
    // the ones in the trustee's account that have not been allocated yet.
    uint256 public totalLocked;

    mapping (address => Allocation) public allocations;


    //
    // Events
    //
    event AllocationGranted(address indexed _from, address indexed _account, uint256 _amount, bool _revokable);
    event AllocationRevoked(address indexed _from, address indexed _account, uint256 _amountRevoked);
    event AllocationProcessed(address indexed _from, address indexed _account, uint256 _amount);
    event RevokeAddressChanged(address indexed _newAddress);
    event TokensReclaimed(uint256 _amount);


    function Trustee(SimpleToken _tokenContract) public
        OpsManaged()
    {
        require(address(_tokenContract) != address(0));

        tokenContract = _tokenContract;
    }


    modifier onlyOwnerOrRevoke() {
        require(isOwner(msg.sender) || isRevoke(msg.sender));
        _;
    }


    modifier onlyRevoke() {
        require(isRevoke(msg.sender));
        _;
    }


    function isRevoke(address _address) private view returns (bool) {
        return (revokeAddress != address(0) && _address == revokeAddress);
    }


    // Owner and revoke can change the revoke address. Address can also be set to 0 to 'disable' it.
    function setRevokeAddress(address _revokeAddress) external onlyOwnerOrRevoke returns (bool) {
        require(_revokeAddress != owner);
        require(!isAdmin(_revokeAddress));
        require(!isOps(_revokeAddress));

        revokeAddress = _revokeAddress;

        RevokeAddressChanged(_revokeAddress);

        return true;
    }


    // Allows admin or ops to create new allocations for a specific account.
    function grantAllocation(address _account, uint256 _amount, bool _revokable) public onlyAdminOrOps returns (bool) {
        require(_account != address(0));
        require(_account != address(this));
        require(_amount > 0);

        // Can't create an allocation if there is already one for this account.
        require(allocations[_account].amountGranted == 0);

        if (isOps(msg.sender)) {
            // Once the token contract is finalized, the ops key should not be able to grant allocations any longer.
            // Before finalized, it is used by the TokenSale contract to allocate pre-sales.
            require(!tokenContract.finalized());
        }

        totalLocked = totalLocked.add(_amount);
        require(totalLocked <= tokenContract.balanceOf(address(this)));

        allocations[_account] = Allocation({
            amountGranted     : _amount,
            amountTransferred : 0,
            revokable         : _revokable
        });

        AllocationGranted(msg.sender, _account, _amount, _revokable);

        return true;
    }


    // Allows the revoke key to revoke allocations, if revoke is allowed.
    function revokeAllocation(address _account) external onlyRevoke returns (bool) {
        require(_account != address(0));

        Allocation memory allocation = allocations[_account];

        require(allocation.revokable);

        uint256 ownerRefund = allocation.amountGranted.sub(allocation.amountTransferred);

        delete allocations[_account];

        totalLocked = totalLocked.sub(ownerRefund);

        AllocationRevoked(msg.sender, _account, ownerRefund);

        return true;
    }


    // Push model which allows ops to transfer tokens to the beneficiary.
    // The exact amount to transfer is calculated based on agreements with
    // the beneficiaries. Here we only restrict that the total amount transfered cannot
    // exceed what has been granted.
    function processAllocation(address _account, uint256 _amount) external onlyOps returns (bool) {
        require(_account != address(0));
        require(_amount > 0);

        Allocation storage allocation = allocations[_account];

        require(allocation.amountGranted > 0);

        uint256 transferable = allocation.amountGranted.sub(allocation.amountTransferred);

        if (transferable < _amount) {
           return false;
        }

        allocation.amountTransferred = allocation.amountTransferred.add(_amount);

        // Note that transfer will fail if the token contract has not been finalized yet.
        require(tokenContract.transfer(_account, _amount));

        totalLocked = totalLocked.sub(_amount);

        AllocationProcessed(msg.sender, _account, _amount);

        return true;
    }


    // Allows the admin to claim back all tokens that are not currently allocated.
    // Note that the trustee should be able to move tokens even before the token is
    // finalized because SimpleToken allows sending back to owner specifically.
    function reclaimTokens() external onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));

        // If balance <= amount locked, there is nothing to reclaim.
        require(ownBalance > totalLocked);

        uint256 amountReclaimed = ownBalance.sub(totalLocked);

        address tokenOwner = tokenContract.owner();
        require(tokenOwner != address(0));

        require(tokenContract.transfer(tokenOwner, amountReclaimed));

        TokensReclaimed(amountReclaimed);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_adminAddress","type":"address"}],"name":"setAdminAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"allocations","outputs":[{"name":"amountGranted","type":"uint256"},{"name":"amountTransferred","type":"uint256"},{"name":"revokable","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_revokeAddress","type":"address"}],"name":"setRevokeAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLocked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_opsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_amount","type":"uint256"}],"name":"processAllocation","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"opsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_revokable","type":"bool"}],"name":"grantAllocation","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"revokeAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"initiateOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"revokeAllocation","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"completeOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_revokable","type":"bool"}],"name":"AllocationGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_amountRevoked","type":"uint256"}],"name":"AllocationRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"AllocationProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"RevokeAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"AdminAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"OpsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_proposedOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"}]

6060604052341561000f57600080fd5b604051602080610f708339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055610eec806100846000396000f3006060604052600436106100d75763ffffffff60e060020a6000350416632c1e816d81146100dc5780633c54caa51461010f57806352a9039c1461012257806355575ddb1461016757806355a373d61461018657806356891412146101b5578063707789c5146101da57806388559aaf146101f95780638da5cb5b1461021b5780638ea643761461022e57806395c8d4ee14610241578063a38ce2b414610268578063c0b6f5611461027b578063d153b60c1461029a578063e70b11df146102ad578063e71a7811146102cc578063fc6f9468146102df575b600080fd5b34156100e757600080fd5b6100fb600160a060020a03600435166102f2565b604051901515815260200160405180910390f35b341561011a57600080fd5b6100fb6103c5565b341561012d57600080fd5b610141600160a060020a03600435166105b6565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561017257600080fd5b6100fb600160a060020a03600435166105da565b341561019157600080fd5b61019961069f565b604051600160a060020a03909116815260200160405180910390f35b34156101c057600080fd5b6101c86106ae565b60405190815260200160405180910390f35b34156101e557600080fd5b6100fb600160a060020a03600435166106b4565b341561020457600080fd5b6100fb600160a060020a0360043516602435610787565b341561022657600080fd5b610199610915565b341561023957600080fd5b610199610924565b341561024c57600080fd5b6100fb600160a060020a03600435166024356044351515610933565b341561027357600080fd5b610199610b80565b341561028657600080fd5b6100fb600160a060020a0360043516610b8f565b34156102a557600080fd5b610199610c04565b34156102b857600080fd5b6100fb600160a060020a0360043516610c13565b34156102d757600080fd5b6100fb610d44565b34156102ea57600080fd5b610199610dcb565b60006102fd33610dda565b8061030c575061030c33610dee565b151561031757600080fd5b600054600160a060020a038381169116141561033257600080fd5b30600160a060020a031682600160a060020a03161415151561035357600080fd5b61035c82610e1e565b1561036657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f17bb0532ac84902a52bb6799529153f5ea501fc54fbcf3ea00dbd42bceb6b0f460405160405180910390a2506001919050565b6000806000806103d433610dee565b15156103df57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561043857600080fd5b6102c65a03f1151561044957600080fd5b50505060405180516006549094508411905061046457600080fd5b60065461047890849063ffffffff610e4b16565b600454909250600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104c357600080fd5b6102c65a03f115156104d457600080fd5b5050506040518051915050600160a060020a03811615156104f457600080fd5b600454600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561055357600080fd5b6102c65a03f1151561056457600080fd5b50505060405180519050151561057957600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8260405190815260200160405180910390a16001935050505090565b60076020526000908152604090208054600182015460029092015490919060ff1683565b60006105e533610dda565b806105f457506105f433610e5d565b15156105ff57600080fd5b600054600160a060020a038381169116141561061a57600080fd5b61062382610dee565b1561062d57600080fd5b61063682610e1e565b1561064057600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f14950f6463abdf1281cbe4d16af796cd87405b1c26c2238f9954e04eafe87bdd60405160405180910390a2506001919050565b600454600160a060020a031681565b60065481565b60006106bf33610dda565b806106ce57506106ce33610dee565b15156106d957600080fd5b600054600160a060020a03838116911614156106f457600080fd5b30600160a060020a031682600160a060020a03161415151561071557600080fd5b61071e82610dee565b1561072857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fac46a4511b8366ae3b7cf3cf342e31556274975598dcae03c866f8f0f55d51c460405160405180910390a2506001919050565b600080600061079533610e1e565b15156107a057600080fd5b600160a060020a03851615156107b557600080fd5b600084116107c257600080fd5b600160a060020a03851660009081526007602052604081208054909350116107e957600080fd5b600182015482546107ff9163ffffffff610e4b16565b905083811015610812576000925061090d565b6001820154610827908563ffffffff610e8a16565b6001830155600454600160a060020a031663a9059cbb868660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561088b57600080fd5b6102c65a03f1151561089c57600080fd5b5050506040518051905015156108b157600080fd5b6006546108c4908563ffffffff610e4b16565b600655600160a060020a038086169033167f5171bdecf41168cfcbc85d1dd8fcfa68bd50d53cf61aa5f8a4609d12334e3afd8660405190815260200160405180910390a3600192505b505092915050565b600054600160a060020a031681565b600254600160a060020a031681565b600061093e33610dee565b8061094d575061094d33610e1e565b151561095857600080fd5b600160a060020a038416151561096d57600080fd5b30600160a060020a031684600160a060020a03161415151561098e57600080fd5b6000831161099b57600080fd5b600160a060020a038416600090815260076020526040902054156109be57600080fd5b6109c733610e1e565b15610a3957600454600160a060020a031663b3f05b976000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a1457600080fd5b6102c65a03f11515610a2557600080fd5b5050506040518051159050610a3957600080fd5b600654610a4c908463ffffffff610e8a16565b600655600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610aa857600080fd5b6102c65a03f11515610ab957600080fd5b505050604051805160065411159050610ad157600080fd5b606060405190810160409081528482526000602080840182905285151583850152600160a060020a0388168252600790522081518155602082015181600101556040820151600291909101805460ff191691151591909117905550600160a060020a038481169033167faf8a849c746f857caadd7644cfb59ee64d62fc8c1aac842d591469b64dceab818585604051918252151560208201526040908101905180910390a35060019392505050565b600554600160a060020a031681565b6000610b9a33610dda565b1515610ba557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b600154600160a060020a031681565b6000610c1d610ea0565b6000610c2833610e5d565b1515610c3357600080fd5b600160a060020a0384161515610c4857600080fd5b600160a060020a0384166000908152600760205260409081902090606090519081016040908152825482526001830154602083015260029092015460ff1615159181019182529250511515610c9c57600080fd5b610cb2826020015183519063ffffffff610e4b16565b600160a060020a03851660009081526007602052604081208181556001810191909155600201805460ff19169055600654909150610cf6908263ffffffff610e4b16565b600655600160a060020a038085169033167f9550c023e3b81a07bf690bdfc489ebae166c30f918f7aefa6274ba922a1315658360405190815260200160405180910390a35060019392505050565b60015460009033600160a060020a03908116911614610d6257600080fd5b6001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff1992831617928390559216909255167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600354600160a060020a031681565b600054600160a060020a0390811691161490565b600354600090600160a060020a031615801590610e185750600354600160a060020a038381169116145b92915050565b600254600090600160a060020a031615801590610e18575050600254600160a060020a0390811691161490565b600082821115610e5757fe5b50900390565b600554600090600160a060020a031615801590610e18575050600554600160a060020a0390811691161490565b600082820183811015610e9957fe5b9392505050565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a723058203045bfadd496ff91f0119b1beacc606e9fcc87b9284d66e1b5655ef44a731f7700290000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca

Deployed Bytecode

0x6060604052600436106100d75763ffffffff60e060020a6000350416632c1e816d81146100dc5780633c54caa51461010f57806352a9039c1461012257806355575ddb1461016757806355a373d61461018657806356891412146101b5578063707789c5146101da57806388559aaf146101f95780638da5cb5b1461021b5780638ea643761461022e57806395c8d4ee14610241578063a38ce2b414610268578063c0b6f5611461027b578063d153b60c1461029a578063e70b11df146102ad578063e71a7811146102cc578063fc6f9468146102df575b600080fd5b34156100e757600080fd5b6100fb600160a060020a03600435166102f2565b604051901515815260200160405180910390f35b341561011a57600080fd5b6100fb6103c5565b341561012d57600080fd5b610141600160a060020a03600435166105b6565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561017257600080fd5b6100fb600160a060020a03600435166105da565b341561019157600080fd5b61019961069f565b604051600160a060020a03909116815260200160405180910390f35b34156101c057600080fd5b6101c86106ae565b60405190815260200160405180910390f35b34156101e557600080fd5b6100fb600160a060020a03600435166106b4565b341561020457600080fd5b6100fb600160a060020a0360043516602435610787565b341561022657600080fd5b610199610915565b341561023957600080fd5b610199610924565b341561024c57600080fd5b6100fb600160a060020a03600435166024356044351515610933565b341561027357600080fd5b610199610b80565b341561028657600080fd5b6100fb600160a060020a0360043516610b8f565b34156102a557600080fd5b610199610c04565b34156102b857600080fd5b6100fb600160a060020a0360043516610c13565b34156102d757600080fd5b6100fb610d44565b34156102ea57600080fd5b610199610dcb565b60006102fd33610dda565b8061030c575061030c33610dee565b151561031757600080fd5b600054600160a060020a038381169116141561033257600080fd5b30600160a060020a031682600160a060020a03161415151561035357600080fd5b61035c82610e1e565b1561036657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f17bb0532ac84902a52bb6799529153f5ea501fc54fbcf3ea00dbd42bceb6b0f460405160405180910390a2506001919050565b6000806000806103d433610dee565b15156103df57600080fd5b600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561043857600080fd5b6102c65a03f1151561044957600080fd5b50505060405180516006549094508411905061046457600080fd5b60065461047890849063ffffffff610e4b16565b600454909250600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104c357600080fd5b6102c65a03f115156104d457600080fd5b5050506040518051915050600160a060020a03811615156104f457600080fd5b600454600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561055357600080fd5b6102c65a03f1151561056457600080fd5b50505060405180519050151561057957600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8260405190815260200160405180910390a16001935050505090565b60076020526000908152604090208054600182015460029092015490919060ff1683565b60006105e533610dda565b806105f457506105f433610e5d565b15156105ff57600080fd5b600054600160a060020a038381169116141561061a57600080fd5b61062382610dee565b1561062d57600080fd5b61063682610e1e565b1561064057600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f14950f6463abdf1281cbe4d16af796cd87405b1c26c2238f9954e04eafe87bdd60405160405180910390a2506001919050565b600454600160a060020a031681565b60065481565b60006106bf33610dda565b806106ce57506106ce33610dee565b15156106d957600080fd5b600054600160a060020a03838116911614156106f457600080fd5b30600160a060020a031682600160a060020a03161415151561071557600080fd5b61071e82610dee565b1561072857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fac46a4511b8366ae3b7cf3cf342e31556274975598dcae03c866f8f0f55d51c460405160405180910390a2506001919050565b600080600061079533610e1e565b15156107a057600080fd5b600160a060020a03851615156107b557600080fd5b600084116107c257600080fd5b600160a060020a03851660009081526007602052604081208054909350116107e957600080fd5b600182015482546107ff9163ffffffff610e4b16565b905083811015610812576000925061090d565b6001820154610827908563ffffffff610e8a16565b6001830155600454600160a060020a031663a9059cbb868660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561088b57600080fd5b6102c65a03f1151561089c57600080fd5b5050506040518051905015156108b157600080fd5b6006546108c4908563ffffffff610e4b16565b600655600160a060020a038086169033167f5171bdecf41168cfcbc85d1dd8fcfa68bd50d53cf61aa5f8a4609d12334e3afd8660405190815260200160405180910390a3600192505b505092915050565b600054600160a060020a031681565b600254600160a060020a031681565b600061093e33610dee565b8061094d575061094d33610e1e565b151561095857600080fd5b600160a060020a038416151561096d57600080fd5b30600160a060020a031684600160a060020a03161415151561098e57600080fd5b6000831161099b57600080fd5b600160a060020a038416600090815260076020526040902054156109be57600080fd5b6109c733610e1e565b15610a3957600454600160a060020a031663b3f05b976000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a1457600080fd5b6102c65a03f11515610a2557600080fd5b5050506040518051159050610a3957600080fd5b600654610a4c908463ffffffff610e8a16565b600655600454600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610aa857600080fd5b6102c65a03f11515610ab957600080fd5b505050604051805160065411159050610ad157600080fd5b606060405190810160409081528482526000602080840182905285151583850152600160a060020a0388168252600790522081518155602082015181600101556040820151600291909101805460ff191691151591909117905550600160a060020a038481169033167faf8a849c746f857caadd7644cfb59ee64d62fc8c1aac842d591469b64dceab818585604051918252151560208201526040908101905180910390a35060019392505050565b600554600160a060020a031681565b6000610b9a33610dda565b1515610ba557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b600154600160a060020a031681565b6000610c1d610ea0565b6000610c2833610e5d565b1515610c3357600080fd5b600160a060020a0384161515610c4857600080fd5b600160a060020a0384166000908152600760205260409081902090606090519081016040908152825482526001830154602083015260029092015460ff1615159181019182529250511515610c9c57600080fd5b610cb2826020015183519063ffffffff610e4b16565b600160a060020a03851660009081526007602052604081208181556001810191909155600201805460ff19169055600654909150610cf6908263ffffffff610e4b16565b600655600160a060020a038085169033167f9550c023e3b81a07bf690bdfc489ebae166c30f918f7aefa6274ba922a1315658360405190815260200160405180910390a35060019392505050565b60015460009033600160a060020a03908116911614610d6257600080fd5b6001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff1992831617928390559216909255167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600354600160a060020a031681565b600054600160a060020a0390811691161490565b600354600090600160a060020a031615801590610e185750600354600160a060020a038381169116145b92915050565b600254600090600160a060020a031615801590610e18575050600254600160a060020a0390811691161490565b600082821115610e5757fe5b50900390565b600554600090600160a060020a031615801590610e18575050600554600160a060020a0390811691161490565b600082820183811015610e9957fe5b9392505050565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a723058203045bfadd496ff91f0119b1beacc606e9fcc87b9284d66e1b5655ef44a731f770029

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

0000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca

-----Decoded View---------------
Arg [0] : _tokenContract (address): 0x2C4e8f2D746113d0696cE89B35F0d8bF88E0AEcA

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca


Swarm Source

bzzr://3045bfadd496ff91f0119b1beacc606e9fcc87b9284d66e1b5655ef44a731f77

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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