ETH Price: $2,491.52 (-1.27%)
Gas: 0.6 Gwei

Contract

0xC016555BBC68A2d6d28e2D05B274017D420F3CA8
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Release123434402021-04-30 18:28:351219 days ago1619807315IN
0xC016555B...D420F3CA8
0 ETH0.0014718660
Release123434402021-04-30 18:28:351219 days ago1619807315IN
0xC016555B...D420F3CA8
0 ETH0.0024638953.911
0x60806040104377682020-07-11 10:42:431512 days ago1594464163IN
 Contract Creation
0 ETH0.060151440

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x79FB01E3...e01d1d718
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PolypuXvesting

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-07-11
*/

/**
 *Submitted for verification at Etherscan.io on 2019-04-20
*/

pragma solidity 0.5.2;

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol
//PUX Vesting Contract

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

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

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

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

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        require(token.transfer(to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        require(token.transferFrom(from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require((value == 0) || (token.allowance(msg.sender, spender) == 0));
        require(token.approve(spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        require(token.approve(spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value);
        require(token.approve(spender, newAllowance));
    }
}

// File: contracts/puxTokenVesting.sol

/**
 * @title TokenVesting
 * @dev A token holder contract that can release its token balance gradually like a
 * typical vesting scheme, with a cliff and vesting period. Optionally revocable by the
 * owner.
 */
contract PolypuXvesting is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 private puxToken;
    uint256 private tokensToVest = 0;
    uint256 private vestingId = 0;

    string private constant INSUFFICIENT_BALANCE = "Insufficient balance";
    string private constant INVALID_VESTING_ID = "Invalid vesting id";
    string private constant VESTING_ALREADY_RELEASED = "Vesting already released";
    string private constant INVALID_BENEFICIARY = "Invalid beneficiary address";
    string private constant NOT_VESTED = "Tokens have not vested yet";

    struct Vesting {
        uint256 releaseTime;
        uint256 amount;
        address beneficiary;
        bool released;
    }
    mapping(uint256 => Vesting) public vestings;

    event TokenVestingReleased(uint256 indexed vestingId, address indexed beneficiary, uint256 amount);
    event TokenVestingAdded(uint256 indexed vestingId, address indexed beneficiary, uint256 amount);
    event TokenVestingRemoved(uint256 indexed vestingId, address indexed beneficiary, uint256 amount);

    constructor(IERC20 _token) public {
        require(address(_token) != address(0x0), "PUX token address is not valid");
        puxToken = _token;

        uint256 SCALING_FACTOR = 10 ** 8;
        uint256 day = 1 days;

        addVesting(0x63c4303E0Bf93e8010757A29A733a1827866f337, now + 180 * day, 3000000 * SCALING_FACTOR);
        
    }

    function token() public view returns (IERC20) {
        return puxToken;
    }

    function beneficiary(uint256 _vestingId) public view returns (address) {
        return vestings[_vestingId].beneficiary;
    }

    function releaseTime(uint256 _vestingId) public view returns (uint256) {
        return vestings[_vestingId].releaseTime;
    }

    function vestingAmount(uint256 _vestingId) public view returns (uint256) {
        return vestings[_vestingId].amount;
    }

    function removeVesting(uint256 _vestingId) public onlyOwner {
        Vesting storage vesting = vestings[_vestingId];
        require(vesting.beneficiary != address(0x0), INVALID_VESTING_ID);
        require(!vesting.released , VESTING_ALREADY_RELEASED);
        vesting.released = true;
        tokensToVest = tokensToVest.sub(vesting.amount);
        emit TokenVestingRemoved(_vestingId, vesting.beneficiary, vesting.amount);
    }

    function addVesting(address _beneficiary, uint256 _releaseTime, uint256 _amount) public onlyOwner {
        require(_beneficiary != address(0x0), INVALID_BENEFICIARY);
        tokensToVest = tokensToVest.add(_amount);
        vestingId = vestingId.add(1);
        vestings[vestingId] = Vesting({
            beneficiary: _beneficiary,
            releaseTime: _releaseTime,
            amount: _amount,
            released: false
        });
        emit TokenVestingAdded(vestingId, _beneficiary, _amount);
    }

    function release(uint256 _vestingId) public {
        Vesting storage vesting = vestings[_vestingId];
        require(vesting.beneficiary != address(0x0), INVALID_VESTING_ID);
        require(!vesting.released , VESTING_ALREADY_RELEASED);
        // solhint-disable-next-line not-rely-on-time
        require(block.timestamp >= vesting.releaseTime, NOT_VESTED);

        require(puxToken.balanceOf(address(this)) >= vesting.amount, INSUFFICIENT_BALANCE);
        vesting.released = true;
        tokensToVest = tokensToVest.sub(vesting.amount);
        puxToken.safeTransfer(vesting.beneficiary, vesting.amount);
        emit TokenVestingReleased(_vestingId, vesting.beneficiary, vesting.amount);
    }

    function retrieveExcessTokens(uint256 _amount) public onlyOwner {
        require(_amount <= puxToken.balanceOf(address(this)).sub(tokensToVest), INSUFFICIENT_BALANCE);
        puxToken.safeTransfer(owner(), _amount);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_vestingId","type":"uint256"}],"name":"vestingAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_vestingId","type":"uint256"}],"name":"releaseTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_vestingId","type":"uint256"}],"name":"removeVesting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_vestingId","type":"uint256"}],"name":"release","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_releaseTime","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"addVesting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_vestingId","type":"uint256"}],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"retrieveExcessTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"vestings","outputs":[{"name":"releaseTime","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"released","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vestingId","type":"uint256"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenVestingReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vestingId","type":"uint256"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenVestingAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vestingId","type":"uint256"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenVestingRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480636eb48096116100a95780638da5cb5b116100835780638da5cb5b146103565780638f32d59b146103a0578063f2fde38b146103c2578063fc0c546a14610406576100ec565b80636eb4809614610297578063715018a6146102c5578063821bee73146102cf576100ec565b806307ad23ef146100f157806309c4bb2b146101335780631bcde4ec1461017557806337bdc99b146101a35780634691a998146101d15780635daa316014610229575b600080fd5b61011d6004803603602081101561010757600080fd5b8101908080359060200190929190505050610450565b6040518082815260200191505060405180910390f35b61015f6004803603602081101561014957600080fd5b8101908080359060200190929190505050610470565b6040518082815260200191505060405180910390f35b6101a16004803603602081101561018b57600080fd5b8101908080359060200190929190505050610490565b005b6101cf600480360360208110156101b957600080fd5b8101908080359060200190929190505050610797565b005b610227600480360360608110156101e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610dc3565b005b6102556004803603602081101561023f57600080fd5b8101908080359060200190929190505050611041565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c3600480360360208110156102ad57600080fd5b8101908080359060200190929190505050611081565b005b6102cd6112d7565b005b6102fb600480360360208110156102e557600080fd5b81019080803590602001909291905050506113a9565b604051808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200194505050505060405180910390f35b61035e611406565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a861142f565b604051808215151515815260200191505060405180910390f35b610404600480360360208110156103d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611486565b005b61040e6114a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600060046000838152602001908152602001600020600101549050919050565b600060046000838152602001908152602001600020600001549050919050565b61049861142f565b15156104a357600080fd5b6000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601281526020017f496e76616c69642076657374696e6720696400000000000000000000000000008152509015156105ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105b2578082015181840152602081019050610597565b50505050905090810190601f1680156105df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508060020160149054906101000a900460ff16156040805190810160405280601881526020017f56657374696e6720616c72656164792072656c656173656400000000000000008152509015156106df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106a4578082015181840152602081019050610689565b50505050905090810190601f1680156106d15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060018160020160146101000a81548160ff02191690831515021790555061071681600101546002546114cf90919063ffffffff16565b6002819055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16827fdc8b9c8cc0c8d05e10824e69ee88995716a539af94a1c60fb9898367f613477c83600101546040518082815260200191505060405180910390a35050565b6000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601281526020017f496e76616c69642076657374696e6720696400000000000000000000000000008152509015156108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108a657808201518184015260208101905061088b565b50505050905090810190601f1680156108d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508060020160149054906101000a900460ff16156040805190810160405280601881526020017f56657374696e6720616c72656164792072656c656173656400000000000000008152509015156109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561099857808201518184015260208101905061097d565b50505050905090810190601f1680156109c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080600001544210156040805190810160405280601a81526020017f546f6b656e732068617665206e6f742076657374656420796574000000000000815250901515610aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a7f578082015181840152602081019050610a64565b50505050905090810190601f168015610aac5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508060010154600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b7b57600080fd5b505afa158015610b8f573d6000803e3d6000fd5b505050506040513d6020811015610ba557600080fd5b810190808051906020019092919050505010156040805190810160405280601481526020017f496e73756666696369656e742062616c616e6365000000000000000000000000815250901515610c96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c5b578082015181840152602081019050610c40565b50505050905090810190601f168015610c885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060018160020160146101000a81548160ff021916908315150217905550610ccd81600101546002546114cf90919063ffffffff16565b600281905550610d488160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260010154600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114f19092919063ffffffff16565b8060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16827f295ac83a3c5cf518a125ba974be97dca6a668bae6dd90b6902b2618cdff1fcc683600101546040518082815260200191505060405180910390a35050565b610dcb61142f565b1515610dd657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601b81526020017f496e76616c69642062656e656669636961727920616464726573730000000000815250901515610ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610eaa578082015181840152602081019050610e8f565b50505050905090810190601f168015610ed75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610efb816002546115df90919063ffffffff16565b600281905550610f1760016003546115df90919063ffffffff16565b6003819055506080604051908101604052808381526020018281526020018473ffffffffffffffffffffffffffffffffffffffff16815260200160001515815250600460006003548152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160146101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff166003547ffbd41c6118c5ed14f196c270a1793d95e8517e43031d9bb61aa71cb2a38bf557836040518082815260200191505060405180910390a3505050565b60006004600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61108961142f565b151561109457600080fd5b61119e600254600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561115557600080fd5b505afa158015611169573d6000803e3d6000fd5b505050506040513d602081101561117f57600080fd5b81019080805190602001909291905050506114cf90919063ffffffff16565b8111156040805190810160405280601481526020017f496e73756666696369656e742062616c616e636500000000000000000000000081525090151561127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611244578082015181840152602081019050611229565b50505050905090810190601f1680156112715780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506112d461128b611406565b82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114f19092919063ffffffff16565b50565b6112df61142f565b15156112ea57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60046020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900460ff16905084565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b61148e61142f565b151561149957600080fd5b6114a281611600565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008282111515156114e057600080fd5b600082840390508091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561159457600080fd5b505af11580156115a8573d6000803e3d6000fd5b505050506040513d60208110156115be57600080fd5b810190808051906020019092919050505015156115da57600080fd5b505050565b60008082840190508381101515156115f657600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561163c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea165627a7a72305820e8df9b98c1a9df30c20e6acf5c946b4ed15488fd5f845848a8c415c271bf64740029

Deployed Bytecode Sourcemap

6991:3895:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6991:3895:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8820:126;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8820:126:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8683:129;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8683:129:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8954:440;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8954:440:0;;;;;;;;;;;;;;;;;:::i;:::-;;9935:714;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9935:714:0;;;;;;;;;;;;;;;;;:::i;:::-;;9402:525;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9402:525:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8546:129;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8546:129:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10657:226;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10657:226:0;;;;;;;;;;;;;;;;;:::i;:::-;;1556:140;;;:::i;:::-;;7734:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7734:43:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;843:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1178:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1873:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1873:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8458:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8820:126;8884:7;8911:8;:20;8920:10;8911:20;;;;;;;;;;;:27;;;8904:34;;8820:126;;;:::o;8683:129::-;8745:7;8772:8;:20;8781:10;8772:20;;;;;;;;;;;:32;;;8765:39;;8683:129;;;:::o;8954:440::-;1055:9;:7;:9::i;:::-;1047:18;;;;;;;;9025:23;9051:8;:20;9060:10;9051:20;;;;;;;;;;;9025:46;;9121:3;9090:35;;:7;:19;;;;;;;;;;;;:35;;;;9127:18;;;;;;;;;;;;;;;;;;9082:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9082:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9166:7;:16;;;;;;;;;;;;9165:17;9185:24;;;;;;;;;;;;;;;;;;9157:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9157:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:4;9221:7;:16;;;:23;;;;;;;;;;;;;;;;;;9270:32;9287:7;:14;;;9270:12;;:16;;:32;;;;:::i;:::-;9255:12;:47;;;;9350:7;:19;;;;;;;;;;;;9318:68;;9338:10;9318:68;9371:7;:14;;;9318:68;;;;;;;;;;;;;;;;;;1076:1;8954:440;:::o;9935:714::-;9990:23;10016:8;:20;10025:10;10016:20;;;;;;;;;;;9990:46;;10086:3;10055:35;;:7;:19;;;;;;;;;;;;:35;;;;10092:18;;;;;;;;;;;;;;;;;;10047:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10047:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10131:7;:16;;;;;;;;;;;;10130:17;10150:24;;;;;;;;;;;;;;;;;;10122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10122:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10268:7;:19;;;10249:15;:38;;10289:10;;;;;;;;;;;;;;;;;;10241:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10241:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10358:7;:14;;;10321:8;;;;;;;;;;;:18;;;10348:4;10321:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10321:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10321:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10321:33:0;;;;;;;;;;;;;;;;:51;;10374:20;;;;;;;;;;;;;;;;;;10313:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10313:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10425:4;10406:7;:16;;;:23;;;;;;;;;;;;;;;;;;10455:32;10472:7;:14;;;10455:12;;:16;;:32;;;;:::i;:::-;10440:12;:47;;;;10498:58;10520:7;:19;;;;;;;;;;;;10541:7;:14;;;10498:8;;;;;;;;;;;:21;;;;:58;;;;;:::i;:::-;10605:7;:19;;;;;;;;;;;;10572:69;;10593:10;10572:69;10626:7;:14;;;10572:69;;;;;;;;;;;;;;;;;;9935:714;;:::o;9402:525::-;1055:9;:7;:9::i;:::-;1047:18;;;;;;;;9543:3;9519:28;;:12;:28;;;;9549:19;;;;;;;;;;;;;;;;;;9511:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9511:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9595:25;9612:7;9595:12;;:16;;:25;;;;:::i;:::-;9580:12;:40;;;;9643:16;9657:1;9643:9;;:13;;:16;;;;:::i;:::-;9631:9;:28;;;;9692:160;;;;;;;;;9768:12;9692:160;;;;9803:7;9692:160;;;;9728:12;9692:160;;;;;;9835:5;9692:160;;;;;9670:8;:19;9679:9;;9670:19;;;;;;;;;;;:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9897:12;9868:51;;9886:9;;9868:51;9911:7;9868:51;;;;;;;;;;;;;;;;;;9402:525;;;:::o;8546:129::-;8608:7;8635:8;:20;8644:10;8635:20;;;;;;;;;;;:32;;;;;;;;;;;;8628:39;;8546:129;;;:::o;10657:226::-;1055:9;:7;:9::i;:::-;1047:18;;;;;;;;10751:51;10789:12;;10751:8;;;;;;;;;;;:18;;;10778:4;10751:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10751:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10751:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10751:33:0;;;;;;;;;;;;;;;;:37;;:51;;;;:::i;:::-;10740:7;:62;;10804:20;;;;;;;;;;;;;;;;;;10732:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10732:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10836:39;10858:7;:5;:7::i;:::-;10867;10836:8;;;;;;;;;;;:21;;;;:39;;;;;:::i;:::-;10657:226;:::o;1556:140::-;1055:9;:7;:9::i;:::-;1047:18;;;;;;;;1655:1;1618:40;;1639:6;;;;;;;;;;;1618:40;;;;;;;;;;;;1686:1;1669:6;;:19;;;;;;;;;;;;;;;;;;1556:140::o;7734:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;843:79::-;881:7;908:6;;;;;;;;;;;901:13;;843:79;:::o;1178:92::-;1218:4;1256:6;;;;;;;;;;;1242:20;;:10;:20;;;1235:27;;1178:92;:::o;1873:109::-;1055:9;:7;:9::i;:::-;1047:18;;;;;;;;1946:28;1965:8;1946:18;:28::i;:::-;1873:109;:::o;8458:80::-;8496:6;8522:8;;;;;;;;;;;8515:15;;8458:80;:::o;3605:150::-;3663:7;3696:1;3691;:6;;3683:15;;;;;;;;3709:9;3725:1;3721;:5;3709:17;;3746:1;3739:8;;;3605:150;;;;:::o;5513:125::-;5604:5;:14;;;5619:2;5623:5;5604:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5604:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5604:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5604:25:0;;;;;;;;;;;;;;;;5596:34;;;;;;;;5513:125;;;:::o;3841:150::-;3899:7;3919:9;3935:1;3931;:5;3919:17;;3960:1;3955;:6;;3947:15;;;;;;;;3982:1;3975:8;;;3841:150;;;;:::o;2132:187::-;2226:1;2206:22;;:8;:22;;;;2198:31;;;;;;;;2274:8;2245:38;;2266:6;;;;;;;;;;;2245:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2132:187;:::o

Swarm Source

bzzr://e8df9b98c1a9df30c20e6acf5c946b4ed15488fd5f845848a8c415c271bf6474

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.