ETH Price: $2,118.03 (+2.03%)

Contract

0xdEA6ea4ee509368EEe917d4e7b5747fBbd4ED8bD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy User Wall...198677982024-05-14 10:57:59670 days ago1715684279IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.000839427.55290447
Deploy User Wall...186364772023-11-23 19:20:11842 days ago1700767211IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0041030436.9180978
Deploy User Wall...184003772023-10-21 18:08:59875 days ago1697911739IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0020763218.68221057
Deploy User Wall...181489962023-09-16 13:27:47910 days ago1694870867IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.001074699.66978693
Deploy User Wall...178435812023-08-04 19:03:59953 days ago1691175839IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0023826121.43814648
Deploy User Wall...170527422023-04-15 13:36:231064 days ago1681565783IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0029187126.26181568
Deploy User Wall...169189052023-03-27 13:06:351083 days ago1679922395IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0025902723.30748081
Deploy User Wall...167332582023-03-01 10:44:231110 days ago1677667463IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.003271829.43994987
Deploy User Wall...165980662023-02-10 11:29:591129 days ago1676028599IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0021020218.91415815
Deploy User Wall...164910182023-01-26 12:33:591143 days ago1674736439IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.001664114.97373816
Deploy User Wall...164338402023-01-18 12:58:111151 days ago1674046691IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0021521819.36549467
Deploy User Wall...163523742023-01-07 3:59:111163 days ago1673063951IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0015124713.60933956
Deploy User Wall...162341812022-12-21 16:10:351179 days ago1671639035IN
0xdEA6ea4e...Bbd4ED8bD
0 ETH0.0047334142.5916143

Latest 14 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x602d6000198677982024-05-14 10:57:59670 days ago1715684279
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000186364772023-11-23 19:20:11842 days ago1700767211
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000184003772023-10-21 18:08:59875 days ago1697911739
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000181489962023-09-16 13:27:47910 days ago1694870867
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000178435812023-08-04 19:03:59953 days ago1691175839
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000170527422023-04-15 13:36:231064 days ago1681565783
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000169189052023-03-27 13:06:351083 days ago1679922395
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000167332582023-03-01 10:44:231110 days ago1677667463
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000165980662023-02-10 11:29:591129 days ago1676028599
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000164910182023-01-26 12:33:591143 days ago1674736439
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000164338402023-01-18 12:58:111151 days ago1674046691
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000163523742023-01-07 3:59:111163 days ago1673063951
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x602d6000162341812022-12-21 16:10:351179 days ago1671639035
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
0x60806040162270442022-12-20 16:16:471180 days ago1671553007
0xdEA6ea4e...Bbd4ED8bD
 Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
UserWalletFactory

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;

import '@openzeppelin/contracts/utils/Address.sol';
import './UserWallet.sol';
import './MinimalProxyFactory.sol';

contract UserWalletFactory is MinimalProxyFactory {
    using Address for address;
    address public immutable userWalletPrototype;

    constructor() {
        userWalletPrototype = address(new UserWallet());
    }

    function getBytecodeHash() public view returns(bytes32) {
        return keccak256(_deployBytecode(userWalletPrototype));
    }

    function getUserWallet(address _user) public view returns(IUserWallet) {
        address _predictedAddress = address(uint(keccak256(abi.encodePacked(
            hex'ff',
            address(this),
            bytes32(uint(_user)),
            keccak256(_deployBytecode(userWalletPrototype))
        ))));
        if (_predictedAddress.isContract()) {
            return IUserWallet(_predictedAddress);
        }
        return IUserWallet(0);
    }

    function deployUserWallet(address _w2w, address _referrer) external payable {
        deployUserWalletFor(_w2w, msg.sender, _referrer);
    }

    function deployUserWalletFor(address _w2w, address _owner, address _referrer) public payable {
        UserWallet _userWallet = UserWallet(
            _deploy(userWalletPrototype, bytes32(uint(_owner)))
        );
        _userWallet.init{value: msg.value}(_w2w, _owner, _referrer);
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import './Constants.sol';
import './IUserWallet.sol';
import './ParamsLib.sol';
import './SafeERC20.sol';

contract UserWallet is IUserWallet, Constants {
    using SafeERC20 for IERC20;
    using ParamsLib for *;

    mapping (bytes32 => bytes32) public override params;

    event ParamUpdated(bytes32 _key, bytes32 _value);

    modifier onlyW2wOrOwner () {
        require(msg.sender == params[W2W].toAddress() || msg.sender == owner(), 'Only W2W or owner');
        _;
    }

    modifier onlyOwner () {
        require(msg.sender == owner(), 'Only owner');
        _;
    }

    function init(address _w2w, address _owner, address _referrer) external payable {
        require(owner() == address(0), 'Already initialized');
        params[OWNER] = _owner.toBytes32();
        params[W2W] = _w2w.toBytes32();
        if (_referrer != address(0)) {
            params[REFERRER] = _referrer.toBytes32();
        }
    }

    function demandETH(address payable _recepient, uint _amount) external override onlyW2wOrOwner() {
        _recepient.transfer(_amount);
    }

    function demandERC20(IERC20 _token, address _recepient, uint _amount) external override onlyW2wOrOwner() {
        uint _thisBalance = _token.balanceOf(address(this));
        if (_thisBalance < _amount) {
            _token.safeTransferFrom(owner(), address(this), (_amount - _thisBalance), '');
        }
        _token.safeTransfer(_recepient, _amount, '');
    }

    function demandAll(IERC20[] calldata _tokens, address payable _recepient) external override onlyW2wOrOwner() {
        for (uint _i = 0; _i < _tokens.length; _i++) {
            IERC20 _token = _tokens[_i];
            if (_token == ETH) {
                _recepient.transfer(address(this).balance);
            } else {
                _token.safeTransfer(_recepient, _token.balanceOf(address(this)), '');
            }
        }
    }

    function demand(address payable _target, uint _value, bytes memory _data) 
    external override onlyW2wOrOwner() returns(bool, bytes memory) {
        return _target.call{value: _value}(_data);
    }

    function owner() public view override returns(address payable) {
        return params[OWNER].toAddress();
    }

    function changeParam(bytes32 _key, bytes32 _value) public onlyOwner() {
        require(_key != REFERRER, 'Cannot update referrer');
        params[_key] = _value;
        emit ParamUpdated(_key, _value);
    }
    
    function changeOwner(address _newOwner) public {
        changeParam(OWNER, _newOwner.toBytes32());
    }

    receive() payable external {}
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';

/**
 * @notice Based on @openzeppelin SafeERC20.
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    function safeTransfer(IERC20 token, address to, uint256 value, bytes memory errPrefix) internal {
        require(_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)),
            string(abi.encodePacked(errPrefix, 'ERC20 transfer failed')));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value, bytes memory errPrefix) internal {
        require(_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)),
            string(abi.encodePacked(errPrefix, 'ERC20 transferFrom failed')));
    }

    function safeApprove(IERC20 token, address spender, uint256 value, bytes memory errPrefix) internal {
        if (_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value))) {
            return;
        }
        require(_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0))
            && _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)),
            string(abi.encodePacked(errPrefix, 'ERC20 approve failed')));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private returns(bool) {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        if (!success) {
            return false;
        }

        if (returndata.length >= 32) { // Return data is optional
            return abi.decode(returndata, (bool));
        }

        // In a wierd case when return data is 1-31 bytes long - return false.
        return returndata.length == 0;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

library ParamsLib {
    function toBytes32(address _self) internal pure returns(bytes32) {
        return bytes32(uint(_self));
    }

    function toAddress(bytes32 _self) internal pure returns(address payable) {
        return address(uint(_self));
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;

contract MinimalProxyFactory {
    function _deployBytecode(address _prototype) internal pure returns(bytes memory) {
        return abi.encodePacked(
            hex'602d600081600a8239f3363d3d373d3d3d363d73',
            _prototype,
            hex'5af43d82803e903d91602b57fd5bf3'
        );
    }

    function _deploy(address _prototype, bytes32 _salt) internal returns(address payable _result) {
        bytes memory _bytecode = _deployBytecode(_prototype);
        assembly {
            _result := create2(0, add(_bytecode, 32), mload(_bytecode), _salt)
        }
        return _result;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';

interface IUserWallet {
    function params(bytes32 _key) external view returns(bytes32);
    function owner() external view returns(address payable);
    function demandETH(address payable _recepient, uint _amount) external;
    function demandERC20(IERC20 _token, address _recepient, uint _amount) external;
    function demandAll(IERC20[] calldata _tokens, address payable _recepient) external;
    function demand(address payable _target, uint _value, bytes memory _data) 
        external returns(bool, bytes memory);
}

File 9 of 9 : Constants.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';


contract Constants {
    IERC20 constant ETH = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    bytes32 constant W2W = 'W2W';
    bytes32 constant OWNER = 'OWNER';
    bytes32 constant REFERRER = 'REFERRER';
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_w2w","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deployUserWallet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_w2w","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deployUserWalletFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBytecodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserWallet","outputs":[{"internalType":"contract IUserWallet","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userWalletPrototype","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405234801561001057600080fd5b5060405161001d9061004f565b604051809103906000f080158015610039573d6000803e3d6000fd5b5060601b6001600160601b03191660805261005c565b611538806105fa83390190565b60805160601c61057261008860003980610105528061014752806101da528061029452506105726000f3fe60806040526004361061005a5760003560e01c80639ad54793116100435780639ad547931461009f578063af0760db146100bf578063d732d169146100d25761005a565b806311949f4d1461005f57806397a5c71514610074575b600080fd5b61007261006d36600461038f565b6100f4565b005b34801561008057600080fd5b50610089610103565b60405161009691906104e2565b60405180910390f35b3480156100ab57600080fd5b506100896100ba36600461036e565b610127565b6100726100cd3660046103c1565b6101d3565b3480156100de57600080fd5b506100e761028d565b6040516100969190610533565b6100ff8233836101d3565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000803073ffffffffffffffffffffffffffffffffffffffff841661016b7f00000000000000000000000000000000000000000000000000000000000000006102c4565b805160209182012060405161018294939201610403565b6040516020818303038152906040528051906020012060001c90506101bc8173ffffffffffffffffffffffffffffffffffffffff166102ed565b156101c85790506101ce565b60009150505b919050565b60006102157f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8516610329565b90508073ffffffffffffffffffffffffffffffffffffffff1663184b9559348686866040518563ffffffff1660e01b815260040161025593929190610503565b6000604051808303818588803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b505050505050505050565b60006102b87f00000000000000000000000000000000000000000000000000000000000000006102c4565b80519060200120905090565b6060816040516020016102d79190610466565b6040516020818303038152906040529050919050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032157508115155b949350505050565b60006060610336846102c4565b9050828151602083016000f5949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101ce57600080fd5b60006020828403121561037f578081fd5b6103888261034a565b9392505050565b600080604083850312156103a1578081fd5b6103aa8361034a565b91506103b86020840161034a565b90509250929050565b6000806000606084860312156103d5578081fd5b6103de8461034a565b92506103ec6020850161034a565b91506103fa6040850161034a565b90509250925092565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b7f602d600081600a8239f3363d3d373d3d3d363d73000000000000000000000000815260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260370190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b9081526020019056fea264697066735822122054ae3c91a0d36b7f2b113d8066febeb785583f6e2ae81ae2749136aa312918be64736f6c63430007040033608060405234801561001057600080fd5b50611518806100206000396000f3fe60806040526004361061009a5760003560e01c80638a436d501161006957806395d7bd661161004e57806395d7bd6614610394578063a6f9dae1146103da578063dc6ab5271461041a576100a1565b80638a436d50146103065780638da5cb5b14610356576100a1565b8063184b9559146100a657806319ecc185146100ed578063731278fe146101805780637bd635a0146101b0576100a1565b366100a157005b600080fd5b6100eb600480360360608110156100bc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160409091013516610456565b005b3480156100f957600080fd5b506100eb6004803603604081101561011057600080fd5b81019060208101813564010000000081111561012b57600080fd5b82018360208201111561013d57600080fd5b8035906020019184602083028401116401000000008311171561015f57600080fd5b91935091503573ffffffffffffffffffffffffffffffffffffffff16610642565b34801561018c57600080fd5b506100eb600480360360408110156101a357600080fd5b5080359060200135610908565b3480156101bc57600080fd5b50610285600480360360608110156101d357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561021057600080fd5b82018360208201111561022257600080fd5b8035906020019184600183028401116401000000008311171561024457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a87945050505050565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102ca5781810151838201526020016102b2565b50505050905090810190601f1680156102f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561031257600080fd5b506100eb6004803603606081101561032957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c90565b34801561036257600080fd5b5061036b610ecb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103a057600080fd5b506100eb600480360360408110156103b757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f26565b3480156103e657600080fd5b506100eb600480360360208110156103fd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611093565b34801561042657600080fd5b506104446004803603602081101561043d57600080fd5b50356110de565b60408051918252519081900360200190f35b6000610460610ecb565b73ffffffffffffffffffffffffffffffffffffffff16146104e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6105018273ffffffffffffffffffffffffffffffffffffffff166110f0565b7f4f574e455200000000000000000000000000000000000000000000000000000060009081526020527f936c48e82d51e2c3095d5ee7c520190336411695eb369c14511299e9b812b60f5561056b73ffffffffffffffffffffffffffffffffffffffff84166110f0565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d10705573ffffffffffffffffffffffffffffffffffffffff81161561063d576105f18173ffffffffffffffffffffffffffffffffffffffff166110f0565b7f524546455252455200000000000000000000000000000000000000000000000060009081526020527ff94cae4f3b613c4bdec912f1a53aee32f2e9f71b5510c864324fdc0d091fff3f555b505050565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d10705461069690611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061070157506106d2610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61076c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60005b8281101561090257600084848381811061078557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108345760405173ffffffffffffffffffffffffffffffffffffffff8416904780156108fc02916000818181858888f1935050505015801561082e573d6000803e3d6000fd5b506108f9565b6108f9838273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b505160408051602081019091526000815273ffffffffffffffffffffffffffffffffffffffff851692919061110c565b5060010161076f565b50505050565b610910610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f6e6c79206f776e657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f5245464552524552000000000000000000000000000000000000000000000000821415610a3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f742075706461746520726566657272657200000000000000000000604482015290519081900360640190fd5b60008281526020818152604091829020839055815184815290810183905281517fa60588e3d0bf3eaba732e6f2729103998bc63e6b5658b4d8a33c0f3ec4fbfc17929181900390910190a15050565b7f5732570000000000000000000000000000000000000000000000000000000000600090815260208190527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054606090610ae090611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b4b5750610b1c610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b8473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b60208310610c1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610bdf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5091509150935093915050565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054610ce490611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d4f5750610d20610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610dba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2357600080fd5b505afa158015610e37573d6000803e3d6000fd5b505050506040513d6020811015610e4d57600080fd5b5051905081811015610e9757610e97610e64610ecb565b60408051602081019091526000815273ffffffffffffffffffffffffffffffffffffffff87169190309085870390611215565b6040805160208101909152600081526109029073ffffffffffffffffffffffffffffffffffffffff8616908590859061110c565b7f4f574e4552000000000000000000000000000000000000000000000000000000600090815260208190527f936c48e82d51e2c3095d5ee7c520190336411695eb369c14511299e9b812b60f54610f2190611109565b905090565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054610f7a90611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fe55750610fb6610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61105057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f1935050505015801561063d573d6000803e3d6000fd5b6110db7f4f574e45520000000000000000000000000000000000000000000000000000006110d68373ffffffffffffffffffffffffffffffffffffffff166110f0565b610908565b50565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b6111ad8463a9059cbb60e01b858560405160240161112b92919061143f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611296565b816040516020016111be919061138c565b6040516020818303038152906040529061120e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112059190611465565b60405180910390fd5b5050505050565b611236856323b872dd60e01b86868660405160240161112b9392919061140e565b8160405160200161124791906113cd565b6040516020818303038152906040529061128e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112059190611465565b505050505050565b60008060608473ffffffffffffffffffffffffffffffffffffffff16846040516112c09190611370565b6000604051808303816000865af19150503d80600081146112fd576040519150601f19603f3d011682016040523d82523d6000602084013e611302565b606091505b50915091508161131757600092505050611343565b602081511061133d57808060200190518101906113349190611349565b92505050611343565b51159150505b92915050565b60006020828403121561135a578081fd5b81518015158114611369578182fd5b9392505050565b600082516113828184602087016114b6565b9190910192915050565b6000825161139e8184602087016114b6565b7f4552433230207472616e73666572206661696c65640000000000000000000000920191825250601501919050565b600082516113df8184602087016114b6565b7f4552433230207472616e7366657246726f6d206661696c656400000000000000920191825250601901919050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60006020825282518060208401526114848160408501602087016114b6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60005b838110156114d15781810151838201526020016114b9565b83811115610902575050600091015256fea26469706673582212207f0b16f4a35b14fff5acd73be4940976308216fc10d7b886a67b80d4526bc92264736f6c63430007040033

Deployed Bytecode

0x60806040526004361061005a5760003560e01c80639ad54793116100435780639ad547931461009f578063af0760db146100bf578063d732d169146100d25761005a565b806311949f4d1461005f57806397a5c71514610074575b600080fd5b61007261006d36600461038f565b6100f4565b005b34801561008057600080fd5b50610089610103565b60405161009691906104e2565b60405180910390f35b3480156100ab57600080fd5b506100896100ba36600461036e565b610127565b6100726100cd3660046103c1565b6101d3565b3480156100de57600080fd5b506100e761028d565b6040516100969190610533565b6100ff8233836101d3565b5050565b7f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf081565b6000803073ffffffffffffffffffffffffffffffffffffffff841661016b7f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf06102c4565b805160209182012060405161018294939201610403565b6040516020818303038152906040528051906020012060001c90506101bc8173ffffffffffffffffffffffffffffffffffffffff166102ed565b156101c85790506101ce565b60009150505b919050565b60006102157f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf073ffffffffffffffffffffffffffffffffffffffff8516610329565b90508073ffffffffffffffffffffffffffffffffffffffff1663184b9559348686866040518563ffffffff1660e01b815260040161025593929190610503565b6000604051808303818588803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b505050505050505050565b60006102b87f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf06102c4565b80519060200120905090565b6060816040516020016102d79190610466565b6040516020818303038152906040529050919050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032157508115155b949350505050565b60006060610336846102c4565b9050828151602083016000f5949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101ce57600080fd5b60006020828403121561037f578081fd5b6103888261034a565b9392505050565b600080604083850312156103a1578081fd5b6103aa8361034a565b91506103b86020840161034a565b90509250929050565b6000806000606084860312156103d5578081fd5b6103de8461034a565b92506103ec6020850161034a565b91506103fa6040850161034a565b90509250925092565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b7f602d600081600a8239f3363d3d373d3d3d363d73000000000000000000000000815260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260370190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b9081526020019056fea264697066735822122054ae3c91a0d36b7f2b113d8066febeb785583f6e2ae81ae2749136aa312918be64736f6c63430007040033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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