ETH Price: $2,085.90 (+4.54%)
Gas: 0.81 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenOWL

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

// File: @gnosis.pm/util-contracts/contracts/Math.sol

pragma solidity ^0.5.2;

/// @title Math library - Allows calculation of logarithmic and exponential functions
/// @author Alan Lu - <[email protected]>
/// @author Stefan George - <[email protected]>
library GnosisMath {
    /*
     *  Constants
     */
    // This is equal to 1 in our calculations
    uint public constant ONE = 0x10000000000000000;
    uint public constant LN2 = 0xb17217f7d1cf79ac;
    uint public constant LOG2_E = 0x171547652b82fe177;

    /*
     *  Public functions
     */
    /// @dev Returns natural exponential function value of given x
    /// @param x x
    /// @return e**x
    function exp(int x) public pure returns (uint) {
        // revert if x is > MAX_POWER, where
        // MAX_POWER = int(mp.floor(mp.log(mpf(2**256 - 1) / ONE) * ONE))
        require(x <= 2454971259878909886679);
        // return 0 if exp(x) is tiny, using
        // MIN_POWER = int(mp.floor(mp.log(mpf(1) / ONE) * ONE))
        if (x < -818323753292969962227) return 0;
        // Transform so that e^x -> 2^x
        x = x * int(ONE) / int(LN2);
        // 2^x = 2^whole(x) * 2^frac(x)
        //       ^^^^^^^^^^ is a bit shift
        // so Taylor expand on z = frac(x)
        int shift;
        uint z;
        if (x >= 0) {
            shift = x / int(ONE);
            z = uint(x % int(ONE));
        } else {
            shift = x / int(ONE) - 1;
            z = ONE - uint(-x % int(ONE));
        }
        // 2^x = 1 + (ln 2) x + (ln 2)^2/2! x^2 + ...
        //
        // Can generate the z coefficients using mpmath and the following lines
        // >>> from mpmath import mp
        // >>> mp.dps = 100
        // >>> ONE =  0x10000000000000000
        // >>> print('\n'.join(hex(int(mp.log(2)**i / mp.factorial(i) * ONE)) for i in range(1, 7)))
        // 0xb17217f7d1cf79ab
        // 0x3d7f7bff058b1d50
        // 0xe35846b82505fc5
        // 0x276556df749cee5
        // 0x5761ff9e299cc4
        // 0xa184897c363c3
        uint zpow = z;
        uint result = ONE;
        result += 0xb17217f7d1cf79ab * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x3d7f7bff058b1d50 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0xe35846b82505fc5 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x276556df749cee5 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x5761ff9e299cc4 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0xa184897c363c3 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0xffe5fe2c4586 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x162c0223a5c8 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x1b5253d395e * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x1e4cf5158b * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x1e8cac735 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x1c3bd650 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x1816193 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x131496 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0xe1b7 * zpow / ONE;
        zpow = zpow * z / ONE;
        result += 0x9c7 * zpow / ONE;
        if (shift >= 0) {
            if (result >> (256 - shift) > 0) return (2 ** 256 - 1);
            return result << shift;
        } else return result >> (-shift);
    }

    /// @dev Returns natural logarithm value of given x
    /// @param x x
    /// @return ln(x)
    function ln(uint x) public pure returns (int) {
        require(x > 0);
        // binary search for floor(log2(x))
        int ilog2 = floorLog2(x);
        int z;
        if (ilog2 < 0) z = int(x << uint(-ilog2));
        else z = int(x >> uint(ilog2));
        // z = x * 2^-⌊log₂x⌋
        // so 1 <= z < 2
        // and ln z = ln x - ⌊log₂x⌋/log₂e
        // so just compute ln z using artanh series
        // and calculate ln x from that
        int term = (z - int(ONE)) * int(ONE) / (z + int(ONE));
        int halflnz = term;
        int termpow = term * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 3;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 5;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 7;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 9;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 11;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 13;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 15;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 17;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 19;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 21;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 23;
        termpow = termpow * term / int(ONE) * term / int(ONE);
        halflnz += termpow / 25;
        return (ilog2 * int(ONE)) * int(ONE) / int(LOG2_E) + 2 * halflnz;
    }

    /// @dev Returns base 2 logarithm value of given x
    /// @param x x
    /// @return logarithmic value
    function floorLog2(uint x) public pure returns (int lo) {
        lo = -64;
        int hi = 193;
        // I use a shift here instead of / 2 because it floors instead of rounding towards 0
        int mid = (hi + lo) >> 1;
        while ((lo + 1) < hi) {
            if (mid < 0 && x << uint(-mid) < ONE || mid >= 0 && x >> uint(mid) < ONE) hi = mid;
            else lo = mid;
            mid = (hi + lo) >> 1;
        }
    }

    /// @dev Returns maximum of an array
    /// @param nums Numbers to look through
    /// @return Maximum number
    function max(int[] memory nums) public pure returns (int maxNum) {
        require(nums.length > 0);
        maxNum = -2 ** 255;
        for (uint i = 0; i < nums.length; i++) if (nums[i] > maxNum) maxNum = nums[i];
    }

    /// @dev Returns whether an add operation causes an overflow
    /// @param a First addend
    /// @param b Second addend
    /// @return Did no overflow occur?
    function safeToAdd(uint a, uint b) internal pure returns (bool) {
        return a + b >= a;
    }

    /// @dev Returns whether a subtraction operation causes an underflow
    /// @param a Minuend
    /// @param b Subtrahend
    /// @return Did no underflow occur?
    function safeToSub(uint a, uint b) internal pure returns (bool) {
        return a >= b;
    }

    /// @dev Returns whether a multiply operation causes an overflow
    /// @param a First factor
    /// @param b Second factor
    /// @return Did no overflow occur?
    function safeToMul(uint a, uint b) internal pure returns (bool) {
        return b == 0 || a * b / b == a;
    }

    /// @dev Returns sum if no overflow occurred
    /// @param a First addend
    /// @param b Second addend
    /// @return Sum
    function add(uint a, uint b) internal pure returns (uint) {
        require(safeToAdd(a, b));
        return a + b;
    }

    /// @dev Returns difference if no overflow occurred
    /// @param a Minuend
    /// @param b Subtrahend
    /// @return Difference
    function sub(uint a, uint b) internal pure returns (uint) {
        require(safeToSub(a, b));
        return a - b;
    }

    /// @dev Returns product if no overflow occurred
    /// @param a First factor
    /// @param b Second factor
    /// @return Product
    function mul(uint a, uint b) internal pure returns (uint) {
        require(safeToMul(a, b));
        return a * b;
    }

    /// @dev Returns whether an add operation causes an overflow
    /// @param a First addend
    /// @param b Second addend
    /// @return Did no overflow occur?
    function safeToAdd(int a, int b) internal pure returns (bool) {
        return (b >= 0 && a + b >= a) || (b < 0 && a + b < a);
    }

    /// @dev Returns whether a subtraction operation causes an underflow
    /// @param a Minuend
    /// @param b Subtrahend
    /// @return Did no underflow occur?
    function safeToSub(int a, int b) internal pure returns (bool) {
        return (b >= 0 && a - b <= a) || (b < 0 && a - b > a);
    }

    /// @dev Returns whether a multiply operation causes an overflow
    /// @param a First factor
    /// @param b Second factor
    /// @return Did no overflow occur?
    function safeToMul(int a, int b) internal pure returns (bool) {
        return (b == 0) || (a * b / b == a);
    }

    /// @dev Returns sum if no overflow occurred
    /// @param a First addend
    /// @param b Second addend
    /// @return Sum
    function add(int a, int b) internal pure returns (int) {
        require(safeToAdd(a, b));
        return a + b;
    }

    /// @dev Returns difference if no overflow occurred
    /// @param a Minuend
    /// @param b Subtrahend
    /// @return Difference
    function sub(int a, int b) internal pure returns (int) {
        require(safeToSub(a, b));
        return a - b;
    }

    /// @dev Returns product if no overflow occurred
    /// @param a First factor
    /// @param b Second factor
    /// @return Product
    function mul(int a, int b) internal pure returns (int) {
        require(safeToMul(a, b));
        return a * b;
    }
}

// File: @gnosis.pm/util-contracts/contracts/Token.sol

/// Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
pragma solidity ^0.5.2;

/// @title Abstract token contract - Functions to be implemented by token contracts
contract Token {
    /*
     *  Events
     */
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);

    /*
     *  Public functions
     */
    function transfer(address to, uint value) public returns (bool);
    function transferFrom(address from, address to, uint value) public returns (bool);
    function approve(address spender, uint value) public returns (bool);
    function balanceOf(address owner) public view returns (uint);
    function allowance(address owner, address spender) public view returns (uint);
    function totalSupply() public view returns (uint);
}

// File: @gnosis.pm/util-contracts/contracts/Proxy.sol

pragma solidity ^0.5.2;

/// @title Proxied - indicates that a contract will be proxied. Also defines storage requirements for Proxy.
/// @author Alan Lu - <[email protected]>
contract Proxied {
    address public masterCopy;
}

/// @title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.
/// @author Stefan George - <[email protected]>
contract Proxy is Proxied {
    /// @dev Constructor function sets address of master copy contract.
    /// @param _masterCopy Master copy address.
    constructor(address _masterCopy) public {
        require(_masterCopy != address(0), "The master copy is required");
        masterCopy = _masterCopy;
    }

    /// @dev Fallback function forwards all transactions and returns all received return data.
    function() external payable {
        address _masterCopy = masterCopy;
        assembly {
            calldatacopy(0, 0, calldatasize)
            let success := delegatecall(not(0), _masterCopy, 0, calldatasize, 0, 0)
            returndatacopy(0, 0, returndatasize)
            switch success
                case 0 {
                    revert(0, returndatasize)
                }
                default {
                    return(0, returndatasize)
                }
        }
    }
}

// File: @gnosis.pm/util-contracts/contracts/GnosisStandardToken.sol

pragma solidity ^0.5.2;




/**
 * Deprecated: Use Open Zeppeling one instead
 */
contract StandardTokenData {
    /*
     *  Storage
     */
    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowances;
    uint totalTokens;
}

/**
 * Deprecated: Use Open Zeppeling one instead
 */
/// @title Standard token contract with overflow protection
contract GnosisStandardToken is Token, StandardTokenData {
    using GnosisMath for *;

    /*
     *  Public functions
     */
    /// @dev Transfers sender's tokens to a given address. Returns success
    /// @param to Address of token receiver
    /// @param value Number of tokens to transfer
    /// @return Was transfer successful?
    function transfer(address to, uint value) public returns (bool) {
        if (!balances[msg.sender].safeToSub(value) || !balances[to].safeToAdd(value)) {
            return false;
        }

        balances[msg.sender] -= value;
        balances[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }

    /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success
    /// @param from Address from where tokens are withdrawn
    /// @param to Address to where tokens are sent
    /// @param value Number of tokens to transfer
    /// @return Was transfer successful?
    function transferFrom(address from, address to, uint value) public returns (bool) {
        if (!balances[from].safeToSub(value) || !allowances[from][msg.sender].safeToSub(
            value
        ) || !balances[to].safeToAdd(value)) {
            return false;
        }
        balances[from] -= value;
        allowances[from][msg.sender] -= value;
        balances[to] += value;
        emit Transfer(from, to, value);
        return true;
    }

    /// @dev Sets approved amount of tokens for spender. Returns success
    /// @param spender Address of allowed account
    /// @param value Number of approved tokens
    /// @return Was approval successful?
    function approve(address spender, uint value) public returns (bool) {
        allowances[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /// @dev Returns number of allowed tokens for given address
    /// @param owner Address of token owner
    /// @param spender Address of token spender
    /// @return Remaining allowance for spender
    function allowance(address owner, address spender) public view returns (uint) {
        return allowances[owner][spender];
    }

    /// @dev Returns number of tokens owned by given address
    /// @param owner Address of token owner
    /// @return Balance of owner
    function balanceOf(address owner) public view returns (uint) {
        return balances[owner];
    }

    /// @dev Returns total supply of tokens
    /// @return Total supply
    function totalSupply() public view returns (uint) {
        return totalTokens;
    }
}

// File: contracts/TokenOWL.sol

pragma solidity ^0.5.2;




contract TokenOWL is Proxied, GnosisStandardToken {
    using GnosisMath for *;

    string public constant name = "OWL Token";
    string public constant symbol = "OWL";
    uint8 public constant decimals = 18;

    struct masterCopyCountdownType {
        address masterCopy;
        uint timeWhenAvailable;
    }

    masterCopyCountdownType masterCopyCountdown;

    address public creator;
    address public minter;

    event Minted(address indexed to, uint256 amount);
    event Burnt(address indexed from, address indexed user, uint256 amount);

    modifier onlyCreator() {
        // R1
        require(msg.sender == creator, "Only the creator can perform the transaction");
        _;
    }
    /// @dev trickers the update process via the proxyMaster for a new address _masterCopy
    /// updating is only possible after 30 days
    function startMasterCopyCountdown(address _masterCopy) public onlyCreator {
        require(address(_masterCopy) != address(0), "The master copy must be a valid address");

        // Update masterCopyCountdown
        masterCopyCountdown.masterCopy = _masterCopy;
        masterCopyCountdown.timeWhenAvailable = now + 30 days;
    }

    /// @dev executes the update process via the proxyMaster for a new address _masterCopy
    function updateMasterCopy() public onlyCreator {
        require(address(masterCopyCountdown.masterCopy) != address(0), "The master copy must be a valid address");
        require(
            block.timestamp >= masterCopyCountdown.timeWhenAvailable,
            "It's not possible to update the master copy during the waiting period"
        );

        // Update masterCopy
        masterCopy = masterCopyCountdown.masterCopy;
    }

    function getMasterCopy() public view returns (address) {
        return masterCopy;
    }

    /// @dev Set minter. Only the creator of this contract can call this.
    /// @param newMinter The new address authorized to mint this token
    function setMinter(address newMinter) public onlyCreator {
        minter = newMinter;
    }

    /// @dev change owner/creator of the contract. Only the creator/owner of this contract can call this.
    /// @param newOwner The new address, which should become the owner
    function setNewOwner(address newOwner) public onlyCreator {
        creator = newOwner;
    }

    /// @dev Mints OWL.
    /// @param to Address to which the minted token will be given
    /// @param amount Amount of OWL to be minted
    function mintOWL(address to, uint amount) public {
        require(minter != address(0), "The minter must be initialized");
        require(msg.sender == minter, "Only the minter can mint OWL");
        balances[to] = balances[to].add(amount);
        totalTokens = totalTokens.add(amount);
        emit Minted(to, amount);
        emit Transfer(address(0), to, amount);
    }

    /// @dev Burns OWL.
    /// @param user Address of OWL owner
    /// @param amount Amount of OWL to be burnt
    function burnOWL(address user, uint amount) public {
        allowances[user][msg.sender] = allowances[user][msg.sender].sub(amount);
        balances[user] = balances[user].sub(amount);
        totalTokens = totalTokens.sub(amount);
        emit Burnt(msg.sender, user, amount);
        emit Transfer(user, address(0), amount);
    }

    function getMasterCopyCountdown() public view returns (address, uint) {
        return (masterCopyCountdown.masterCopy, masterCopyCountdown.timeWhenAvailable);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"creator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMasterCopy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"updateMasterCopy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amount","type":"uint256"}],"name":"burnOWL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masterCopy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"mintOWL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_masterCopy","type":"address"}],"name":"startMasterCopyCountdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinter","type":"address"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMasterCopyCountdown","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Burnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

608060405234801561001057600080fd5b50610e27806100206000396000f3fe608060405234801561001057600080fd5b5060043610610149576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100ca578063f52a41f31161008e578063f52a41f314610373578063f5a1f5b41461039f578063f625ee28146103c5578063fca3b5aa146103eb578063ffa4e0c81461041157610149565b806370a08231146102e357806395d89b4114610309578063a619486e14610311578063a9059cbb14610319578063dd62ed3e1461034557610149565b806318160ddd1161011157806318160ddd1461023f57806323b872dd146102595780632cef4dac1461028f578063313ce567146102995780634417f4db146102b757610149565b806302d05d3f1461014e57806304e80e901461017257806306fdde031461017a57806307546172146101f7578063095ea7b3146101ff575b600080fd5b61015661043c565b60408051600160a060020a039092168252519081900360200190f35b61015661044b565b61018261045a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101bc5781810151838201526020016101a4565b50505050905090810190601f1680156101e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610156610491565b61022b6004803603604081101561021557600080fd5b50600160a060020a0381351690602001356104a0565b604080519115158252519081900360200190f35b610247610507565b60408051918252519081900360200190f35b61022b6004803603606081101561026f57600080fd5b50600160a060020a0381358116916020810135909116906040013561050d565b610297610628565b005b6102a1610735565b6040805160ff9092168252519081900360200190f35b610297600480360360408110156102cd57600080fd5b50600160a060020a03813516906020013561073a565b610247600480360360208110156102f957600080fd5b5035600160a060020a0316610851565b61018261086c565b6101566108a3565b61022b6004803603604081101561032f57600080fd5b50600160a060020a0381351690602001356108b2565b6102476004803603604081101561035b57600080fd5b50600160a060020a038135811691602001351661096d565b6102976004803603604081101561038957600080fd5b50600160a060020a038135169060200135610998565b610297600480360360208110156103b557600080fd5b5035600160a060020a0316610b26565b610297600480360360208110156103db57600080fd5b5035600160a060020a0316610ba1565b6102976004803603602081101561040157600080fd5b5035600160a060020a0316610c6f565b610419610cea565b60408051600160a060020a03909316835260208301919091528051918290030190f35b600654600160a060020a031681565b600054600160a060020a031690565b60408051808201909152600981527f4f574c20546f6b656e0000000000000000000000000000000000000000000000602082015281565b600754600160a060020a031681565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035490565b600160a060020a038316600090815260016020526040812054610536908363ffffffff610cfe16565b15806105735750600160a060020a0384166000908152600260209081526040808320338452909152902054610571908363ffffffff610cfe16565b155b806105a45750600160a060020a0383166000908152600160205260409020546105a2908363ffffffff610d0316565b155b156105b157506000610621565b600160a060020a038085166000818152600160208181526040808420805489900390556002825280842033855282528084208054899003905594881680845291815291849020805487019055835186815293519093600080516020610ddc83398151915292908290030190a35060015b9392505050565b600654600160a060020a031633146106745760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b600454600160a060020a031615156106c05760405160e560020a62461bcd028152600401808060200182810382526027815260200180610d706027913960400191505060405180910390fd5b6005544210156107045760405160e560020a62461bcd028152600401808060200182810382526045815260200180610d976045913960600191505060405180910390fd5b6004546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b601281565b600160a060020a038216600090815260026020908152604080832033845290915290205461076e908263ffffffff610d0a16565b600160a060020a0383166000818152600260209081526040808320338452825280832094909455918152600190915220546107af908263ffffffff610d0a16565b600160a060020a0383166000908152600160205260409020556003546107db908263ffffffff610d0a16565b600355604080518281529051600160a060020a0384169133917fe8a89cc6e5096f9d9f43de82c077c1f4cfe707c0e0c2032176c68813b9ae6a5c9181900360200190a3604080518281529051600091600160a060020a03851691600080516020610ddc8339815191529181900360200190a35050565b600160a060020a031660009081526001602052604090205490565b60408051808201909152600381527f4f574c0000000000000000000000000000000000000000000000000000000000602082015281565b600054600160a060020a031681565b336000908152600160205260408120546108d2908363ffffffff610cfe16565b15806109045750600160a060020a038316600090815260016020526040902054610902908363ffffffff610d0316565b155b1561091157506000610501565b33600081815260016020908152604080832080548790039055600160a060020a0387168084529281902080548701905580518681529051929392600080516020610ddc833981519152929181900390910190a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600754600160a060020a031615156109fa576040805160e560020a62461bcd02815260206004820152601e60248201527f546865206d696e746572206d75737420626520696e697469616c697a65640000604482015290519081900360640190fd5b600754600160a060020a03163314610a5c576040805160e560020a62461bcd02815260206004820152601c60248201527f4f6e6c7920746865206d696e7465722063616e206d696e74204f574c00000000604482015290519081900360640190fd5b600160a060020a038216600090815260016020526040902054610a85908263ffffffff610d2716565b600160a060020a038316600090815260016020526040902055600354610ab1908263ffffffff610d2716565b600355604080518281529051600160a060020a038416917f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe919081900360200190a2604080518281529051600160a060020a03841691600091600080516020610ddc8339815191529181900360200190a35050565b600654600160a060020a03163314610b725760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600654600160a060020a03163314610bed5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b600160a060020a0381161515610c375760405160e560020a62461bcd028152600401808060200182810382526027815260200180610d706027913960400191505060405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790554262278d0001600555565b600654600160a060020a03163314610cbb5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454600554600160a060020a0390911691565b111590565b8101101590565b6000610d168383610cfe565b1515610d2157600080fd5b50900390565b6000610d338383610d03565b1515610d3e57600080fd5b50019056fe4f6e6c79207468652063726561746f722063616e20706572666f726d20746865207472616e73616374696f6e546865206d617374657220636f7079206d75737420626520612076616c6964206164647265737349742773206e6f7420706f737369626c6520746f2075706461746520746865206d617374657220636f707920647572696e67207468652077616974696e6720706572696f64ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058201526f6ecb39910ef4b3a53a7326cc8b96898ad6bf64c335e452f08cb475d9f1d0029

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610149576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100ca578063f52a41f31161008e578063f52a41f314610373578063f5a1f5b41461039f578063f625ee28146103c5578063fca3b5aa146103eb578063ffa4e0c81461041157610149565b806370a08231146102e357806395d89b4114610309578063a619486e14610311578063a9059cbb14610319578063dd62ed3e1461034557610149565b806318160ddd1161011157806318160ddd1461023f57806323b872dd146102595780632cef4dac1461028f578063313ce567146102995780634417f4db146102b757610149565b806302d05d3f1461014e57806304e80e901461017257806306fdde031461017a57806307546172146101f7578063095ea7b3146101ff575b600080fd5b61015661043c565b60408051600160a060020a039092168252519081900360200190f35b61015661044b565b61018261045a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101bc5781810151838201526020016101a4565b50505050905090810190601f1680156101e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610156610491565b61022b6004803603604081101561021557600080fd5b50600160a060020a0381351690602001356104a0565b604080519115158252519081900360200190f35b610247610507565b60408051918252519081900360200190f35b61022b6004803603606081101561026f57600080fd5b50600160a060020a0381358116916020810135909116906040013561050d565b610297610628565b005b6102a1610735565b6040805160ff9092168252519081900360200190f35b610297600480360360408110156102cd57600080fd5b50600160a060020a03813516906020013561073a565b610247600480360360208110156102f957600080fd5b5035600160a060020a0316610851565b61018261086c565b6101566108a3565b61022b6004803603604081101561032f57600080fd5b50600160a060020a0381351690602001356108b2565b6102476004803603604081101561035b57600080fd5b50600160a060020a038135811691602001351661096d565b6102976004803603604081101561038957600080fd5b50600160a060020a038135169060200135610998565b610297600480360360208110156103b557600080fd5b5035600160a060020a0316610b26565b610297600480360360208110156103db57600080fd5b5035600160a060020a0316610ba1565b6102976004803603602081101561040157600080fd5b5035600160a060020a0316610c6f565b610419610cea565b60408051600160a060020a03909316835260208301919091528051918290030190f35b600654600160a060020a031681565b600054600160a060020a031690565b60408051808201909152600981527f4f574c20546f6b656e0000000000000000000000000000000000000000000000602082015281565b600754600160a060020a031681565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035490565b600160a060020a038316600090815260016020526040812054610536908363ffffffff610cfe16565b15806105735750600160a060020a0384166000908152600260209081526040808320338452909152902054610571908363ffffffff610cfe16565b155b806105a45750600160a060020a0383166000908152600160205260409020546105a2908363ffffffff610d0316565b155b156105b157506000610621565b600160a060020a038085166000818152600160208181526040808420805489900390556002825280842033855282528084208054899003905594881680845291815291849020805487019055835186815293519093600080516020610ddc83398151915292908290030190a35060015b9392505050565b600654600160a060020a031633146106745760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b600454600160a060020a031615156106c05760405160e560020a62461bcd028152600401808060200182810382526027815260200180610d706027913960400191505060405180910390fd5b6005544210156107045760405160e560020a62461bcd028152600401808060200182810382526045815260200180610d976045913960600191505060405180910390fd5b6004546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b601281565b600160a060020a038216600090815260026020908152604080832033845290915290205461076e908263ffffffff610d0a16565b600160a060020a0383166000818152600260209081526040808320338452825280832094909455918152600190915220546107af908263ffffffff610d0a16565b600160a060020a0383166000908152600160205260409020556003546107db908263ffffffff610d0a16565b600355604080518281529051600160a060020a0384169133917fe8a89cc6e5096f9d9f43de82c077c1f4cfe707c0e0c2032176c68813b9ae6a5c9181900360200190a3604080518281529051600091600160a060020a03851691600080516020610ddc8339815191529181900360200190a35050565b600160a060020a031660009081526001602052604090205490565b60408051808201909152600381527f4f574c0000000000000000000000000000000000000000000000000000000000602082015281565b600054600160a060020a031681565b336000908152600160205260408120546108d2908363ffffffff610cfe16565b15806109045750600160a060020a038316600090815260016020526040902054610902908363ffffffff610d0316565b155b1561091157506000610501565b33600081815260016020908152604080832080548790039055600160a060020a0387168084529281902080548701905580518681529051929392600080516020610ddc833981519152929181900390910190a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600754600160a060020a031615156109fa576040805160e560020a62461bcd02815260206004820152601e60248201527f546865206d696e746572206d75737420626520696e697469616c697a65640000604482015290519081900360640190fd5b600754600160a060020a03163314610a5c576040805160e560020a62461bcd02815260206004820152601c60248201527f4f6e6c7920746865206d696e7465722063616e206d696e74204f574c00000000604482015290519081900360640190fd5b600160a060020a038216600090815260016020526040902054610a85908263ffffffff610d2716565b600160a060020a038316600090815260016020526040902055600354610ab1908263ffffffff610d2716565b600355604080518281529051600160a060020a038416917f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe919081900360200190a2604080518281529051600160a060020a03841691600091600080516020610ddc8339815191529181900360200190a35050565b600654600160a060020a03163314610b725760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600654600160a060020a03163314610bed5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b600160a060020a0381161515610c375760405160e560020a62461bcd028152600401808060200182810382526027815260200180610d706027913960400191505060405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790554262278d0001600555565b600654600160a060020a03163314610cbb5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180610d44602c913960400191505060405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600454600554600160a060020a0390911691565b111590565b8101101590565b6000610d168383610cfe565b1515610d2157600080fd5b50900390565b6000610d338383610d03565b1515610d3e57600080fd5b50019056fe4f6e6c79207468652063726561746f722063616e20706572666f726d20746865207472616e73616374696f6e546865206d617374657220636f7079206d75737420626520612076616c6964206164647265737349742773206e6f7420706f737369626c6520746f2075706461746520746865206d617374657220636f707920647572696e67207468652077616974696e6720706572696f64ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058201526f6ecb39910ef4b3a53a7326cc8b96898ad6bf64c335e452f08cb475d9f1d0029

Swarm Source

bzzr://1526f6ecb39910ef4b3a53a7326cc8b96898ad6bf64c335e452f08cb475d9f1d

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

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.