ETH Price: $2,927.23 (+4.78%)
 

Overview

ETH Balance

0.0000085 ETH

Eth Value

$0.02 (@ $2,927.23/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw119028162021-02-21 21:40:351355 days ago1613943635IN
0x67E4A942...2Dfa54D64
0 ETH0.0029412114
Withdraw119027692021-02-21 21:30:361355 days ago1613943036IN
0x67E4A942...2Dfa54D64
0 ETH0.01075500
Withdraw114668372020-12-16 22:18:111422 days ago1608157091IN
0x67E4A942...2Dfa54D64
0 ETH0.0028872270
Set Min Fee Rate114666512020-12-16 21:38:411422 days ago1608154721IN
0x67E4A942...2Dfa54D64
0 ETH0.0024207749.3
Create Policy111173062020-10-24 5:55:181476 days ago1603518918IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0061228323
Create Policy111172532020-10-24 5:43:201476 days ago1603518200IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0034680322
Create Policy110909572020-10-20 4:52:251480 days ago1603169545IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.004303230
Create Policy110909552020-10-20 4:52:141480 days ago1603169534IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0044466431
Create Policy110909482020-10-20 4:50:031480 days ago1603169403IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.004303230
Create Policy110909462020-10-20 4:49:101480 days ago1603169350IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.004303230
Create Policy110909442020-10-20 4:48:551480 days ago1603169335IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0044466431
Create Policy110908252020-10-20 4:24:511480 days ago1603167891IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0077960734.1
Create Policy110908212020-10-20 4:24:031480 days ago1603167843IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0083075734.1
Create Policy110908182020-10-20 4:23:341480 days ago1603167814IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0090781734.1
Create Policy110908162020-10-20 4:23:131480 days ago1603167793IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0085666734.1
Create Policy110908132020-10-20 4:22:371480 days ago1603167757IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0080825134.1
Create Policy110907952020-10-20 4:19:171480 days ago1603167557IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0088208435
Create Policy110907912020-10-20 4:18:341480 days ago1603167514IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0099339835
Create Policy110907542020-10-20 4:12:451480 days ago1603167165IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0047335233
Create Policy110907402020-10-20 4:09:071480 days ago1603166947IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0047335233
Create Policy110907362020-10-20 4:08:241480 days ago1603166904IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0088411633
Create Policy110907282020-10-20 4:06:171480 days ago1603166777IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0088415533
Create Policy110907222020-10-20 4:04:381480 days ago1603166678IN
0x67E4A942...2Dfa54D64
0.0000003 ETH0.0092538633
Withdraw110821042020-10-18 20:30:151481 days ago1603053015IN
0x67E4A942...2Dfa54D64
0 ETH0.0004695618.2
Create Policy110788132020-10-18 8:23:341482 days ago1603009414IN
0x67E4A942...2Dfa54D64
0.0000001 ETH0.0033101421
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
139110012021-12-31 4:33:131043 days ago1640925193
0x67E4A942...2Dfa54D64
0 ETH
139110012021-12-31 4:33:131043 days ago1640925193
0x67E4A942...2Dfa54D64
0 ETH
139105752021-12-31 2:55:471043 days ago1640919347
0x67E4A942...2Dfa54D64
0 ETH
139105752021-12-31 2:55:471043 days ago1640919347
0x67E4A942...2Dfa54D64
0 ETH
139095042021-12-30 22:55:241043 days ago1640904924
0x67E4A942...2Dfa54D64
0 ETH
139095042021-12-30 22:55:241043 days ago1640904924
0x67E4A942...2Dfa54D64
0 ETH
139094192021-12-30 22:38:201043 days ago1640903900
0x67E4A942...2Dfa54D64
0 ETH
139094192021-12-30 22:38:201043 days ago1640903900
0x67E4A942...2Dfa54D64
0 ETH
139091902021-12-30 21:42:501043 days ago1640900570
0x67E4A942...2Dfa54D64
0 ETH
139091902021-12-30 21:42:501043 days ago1640900570
0x67E4A942...2Dfa54D64
0 ETH
139087582021-12-30 20:11:031043 days ago1640895063
0x67E4A942...2Dfa54D64
0 ETH
139087582021-12-30 20:11:031043 days ago1640895063
0x67E4A942...2Dfa54D64
0 ETH
139084342021-12-30 19:00:311043 days ago1640890831
0x67E4A942...2Dfa54D64
0 ETH
139084342021-12-30 19:00:311043 days ago1640890831
0x67E4A942...2Dfa54D64
0 ETH
139075102021-12-30 15:37:441043 days ago1640878664
0x67E4A942...2Dfa54D64
0 ETH
139075102021-12-30 15:37:441043 days ago1640878664
0x67E4A942...2Dfa54D64
0 ETH
139074372021-12-30 15:21:431043 days ago1640877703
0x67E4A942...2Dfa54D64
0 ETH
139074372021-12-30 15:21:431043 days ago1640877703
0x67E4A942...2Dfa54D64
0 ETH
139072592021-12-30 14:38:271043 days ago1640875107
0x67E4A942...2Dfa54D64
0 ETH
139072592021-12-30 14:38:271043 days ago1640875107
0x67E4A942...2Dfa54D64
0 ETH
139070782021-12-30 13:54:401043 days ago1640872480
0x67E4A942...2Dfa54D64
0 ETH
139070782021-12-30 13:54:401043 days ago1640872480
0x67E4A942...2Dfa54D64
0 ETH
139069572021-12-30 13:29:091043 days ago1640870949
0x67E4A942...2Dfa54D64
0 ETH
139069572021-12-30 13:29:091043 days ago1640870949
0x67E4A942...2Dfa54D64
0 ETH
139065092021-12-30 11:51:411043 days ago1640865101
0x67E4A942...2Dfa54D64
0 ETH
View All Internal Transactions
Loading...
Loading

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

Contract Name:
Dispatcher

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: Dispatcher.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.7.0;


import "./Upgradeable.sol";
import "./Address.sol";


/**
* @notice ERC897 - ERC DelegateProxy
*/
interface ERCProxy {
    function proxyType() external pure returns (uint256);
    function implementation() external view returns (address);
}


/**
* @notice Proxying requests to other contracts.
* Client should use ABI of real contract and address of this contract
*/
contract Dispatcher is Upgradeable, ERCProxy {
    using Address for address;

    event Upgraded(address indexed from, address indexed to, address owner);
    event RolledBack(address indexed from, address indexed to, address owner);

    /**
    * @dev Set upgrading status before and after operations
    */
    modifier upgrading()
    {
        isUpgrade = UPGRADE_TRUE;
        _;
        isUpgrade = UPGRADE_FALSE;
    }

    /**
    * @param _target Target contract address
    */
    constructor(address _target) upgrading {
        require(_target.isContract());
        // Checks that target contract inherits Dispatcher state
        verifyState(_target);
        // `verifyState` must work with its contract
        verifyUpgradeableState(_target, _target);
        target = _target;
        finishUpgrade();
        emit Upgraded(address(0), _target, msg.sender);
    }

    //------------------------ERC897------------------------
    /**
     * @notice ERC897, whether it is a forwarding (1) or an upgradeable (2) proxy
     */
    function proxyType() external pure override returns (uint256) {
        return 2;
    }

    /**
     * @notice ERC897, gets the address of the implementation where every call will be delegated
     */
    function implementation() external view override returns (address) {
        return target;
    }
    //------------------------------------------------------------

    /**
    * @notice Verify new contract storage and upgrade target
    * @param _target New target contract address
    */
    function upgrade(address _target) public onlyOwner upgrading {
        require(_target.isContract());
        // Checks that target contract has "correct" (as much as possible) state layout
        verifyState(_target);
        //`verifyState` must work with its contract
        verifyUpgradeableState(_target, _target);
        if (target.isContract()) {
            verifyUpgradeableState(target, _target);
        }
        previousTarget = target;
        target = _target;
        finishUpgrade();
        emit Upgraded(previousTarget, _target, msg.sender);
    }

    /**
    * @notice Rollback to previous target
    * @dev Test storage carefully before upgrade again after rollback
    */
    function rollback() public onlyOwner upgrading {
        require(previousTarget.isContract());
        emit RolledBack(target, previousTarget, msg.sender);
        // should be always true because layout previousTarget -> target was already checked
        // but `verifyState` is not 100% accurate so check again
        verifyState(previousTarget);
        if (target.isContract()) {
            verifyUpgradeableState(previousTarget, target);
        }
        target = previousTarget;
        previousTarget = address(0);
        finishUpgrade();
    }

    /**
    * @dev Call verifyState method for Upgradeable contract
    */
    function verifyUpgradeableState(address _from, address _to) private {
        (bool callSuccess,) = _from.delegatecall(abi.encodeWithSelector(this.verifyState.selector, _to));
        require(callSuccess);
    }

    /**
    * @dev Call finishUpgrade method from the Upgradeable contract
    */
    function finishUpgrade() private {
        (bool callSuccess,) = target.delegatecall(abi.encodeWithSelector(this.finishUpgrade.selector, target));
        require(callSuccess);
    }

    function verifyState(address _testTarget) public override onlyWhileUpgrading {
        //checks equivalence accessing state through new contract and current storage
        require(address(uint160(delegateGet(_testTarget, this.owner.selector))) == owner());
        require(address(uint160(delegateGet(_testTarget, this.target.selector))) == target);
        require(address(uint160(delegateGet(_testTarget, this.previousTarget.selector))) == previousTarget);
        require(uint8(delegateGet(_testTarget, this.isUpgrade.selector)) == isUpgrade);
    }

    /**
    * @dev Override function using empty code because no reason to call this function in Dispatcher
    */
    function finishUpgrade(address) public override {}

    /**
    * @dev Receive function sends empty request to the target contract
    */
    receive() external payable {
        assert(target.isContract());
        // execute receive function from target contract using storage of the dispatcher
        (bool callSuccess,) = target.delegatecall("");
        if (!callSuccess) {
            revert();
        }
    }

    /**
    * @dev Fallback function sends all requests to the target contract
    */
    fallback() external payable {
        assert(target.isContract());
        // execute requested function from target contract using storage of the dispatcher
        (bool callSuccess,) = target.delegatecall(msg.data);
        if (callSuccess) {
            // copy result of the request to the return data
            // we can use the second return value from `delegatecall` (bytes memory)
            // but it will consume a little more gas
            assembly {
                returndatacopy(0x0, 0x0, returndatasize())
                return(0x0, returndatasize())
            }
        } else {
            revert();
        }
    }

}

File 2 of 4: Address.sol
// 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].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

File 3 of 4: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
abstract 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 () {
        _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 4 of 4: Upgradeable.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.7.0;


import "./Ownable.sol";


/**
* @notice Base contract for upgradeable contract
* @dev Inherited contract should implement verifyState(address) method by checking storage variables
* (see verifyState(address) in Dispatcher). Also contract should implement finishUpgrade(address)
* if it is using constructor parameters by coping this parameters to the dispatcher storage
*/
abstract contract Upgradeable is Ownable {

    event StateVerified(address indexed testTarget, address sender);
    event UpgradeFinished(address indexed target, address sender);

    /**
    * @dev Contracts at the target must reserve the same location in storage for this address as in Dispatcher
    * Stored data actually lives in the Dispatcher
    * However the storage layout is specified here in the implementing contracts
    */
    address public target;

    /**
    * @dev Previous contract address (if available). Used for rollback
    */
    address public previousTarget;

    /**
    * @dev Upgrade status. Explicit `uint8` type is used instead of `bool` to save gas by excluding 0 value
    */
    uint8 public isUpgrade;

    /**
    * @dev Guarantees that next slot will be separated from the previous
    */
    uint256 stubSlot;

    /**
    * @dev Constants for `isUpgrade` field
    */
    uint8 constant UPGRADE_FALSE = 1;
    uint8 constant UPGRADE_TRUE = 2;

    /**
    * @dev Checks that function executed while upgrading
    * Recommended to add to `verifyState` and `finishUpgrade` methods
    */
    modifier onlyWhileUpgrading()
    {
        require(isUpgrade == UPGRADE_TRUE);
        _;
    }

    /**
    * @dev Method for verifying storage state.
    * Should check that new target contract returns right storage value
    */
    function verifyState(address _testTarget) public virtual onlyWhileUpgrading {
        emit StateVerified(_testTarget, msg.sender);
    }

    /**
    * @dev Copy values from the new target to the current storage
    * @param _target New target contract address
    */
    function finishUpgrade(address _target) public virtual onlyWhileUpgrading {
        emit UpgradeFinished(_target, msg.sender);
    }

    /**
    * @dev Base method to get data
    * @param _target Target to call
    * @param _selector Method selector
    * @param _numberOfArguments Number of used arguments
    * @param _argument1 First method argument
    * @param _argument2 Second method argument
    * @return memoryAddress Address in memory where the data is located
    */
    function delegateGetData(
        address _target,
        bytes4 _selector,
        uint8 _numberOfArguments,
        bytes32 _argument1,
        bytes32 _argument2
    )
        internal returns (bytes32 memoryAddress)
    {
        assembly {
            memoryAddress := mload(0x40)
            mstore(memoryAddress, _selector)
            if gt(_numberOfArguments, 0) {
                mstore(add(memoryAddress, 0x04), _argument1)
            }
            if gt(_numberOfArguments, 1) {
                mstore(add(memoryAddress, 0x24), _argument2)
            }
            switch delegatecall(gas(), _target, memoryAddress, add(0x04, mul(0x20, _numberOfArguments)), 0, 0)
                case 0 {
                    revert(memoryAddress, 0)
                }
                default {
                    returndatacopy(memoryAddress, 0x0, returndatasize())
                }
        }
    }

    /**
    * @dev Call "getter" without parameters.
    * Result should not exceed 32 bytes
    */
    function delegateGet(address _target, bytes4 _selector)
        internal returns (uint256 result)
    {
        bytes32 memoryAddress = delegateGetData(_target, _selector, 0, 0, 0);
        assembly {
            result := mload(memoryAddress)
        }
    }

    /**
    * @dev Call "getter" with one parameter.
    * Result should not exceed 32 bytes
    */
    function delegateGet(address _target, bytes4 _selector, bytes32 _argument)
        internal returns (uint256 result)
    {
        bytes32 memoryAddress = delegateGetData(_target, _selector, 1, _argument, 0);
        assembly {
            result := mload(memoryAddress)
        }
    }

    /**
    * @dev Call "getter" with two parameters.
    * Result should not exceed 32 bytes
    */
    function delegateGet(
        address _target,
        bytes4 _selector,
        bytes32 _argument1,
        bytes32 _argument2
    )
        internal returns (uint256 result)
    {
        bytes32 memoryAddress = delegateGetData(_target, _selector, 2, _argument1, _argument2);
        assembly {
            result := mload(memoryAddress)
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"RolledBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"testTarget","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"StateVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"UpgradeFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"finishUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUpgrade","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousTarget","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rollback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"target","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_testTarget","type":"address"}],"name":"verifyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106100c65760003560e01c80638f32d59b1161007f578063d4b8399211610059578063d4b839921461031e578063e38a303b14610333578063e8dccd061461035e578063f2fde38b1461039157610145565b80638f32d59b146102ad5780639afd9d78146102d6578063b9626d21146102eb57610145565b80630900f010146101e15780634555d5c9146102165780634b2cd1181461023d5780635c60da1b1461026e578063715018a6146102835780638da5cb5b1461029857610145565b36610145576001546100e0906001600160a01b03166103c4565b6100e657fe5b6001546040516000916001600160a01b03169082818181855af49150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b505090508061014257600080fd5b50005b60015461015a906001600160a01b03166103c4565b61016057fe5b6001546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146101c3576040519150601f19603f3d011682016040523d82523d6000602084013e6101c8565b606091505b5050905080156101dc573d6000803e3d6000f35b600080fd5b3480156101ed57600080fd5b506102146004803603602081101561020457600080fd5b50356001600160a01b0316610400565b005b34801561022257600080fd5b5061022b610511565b60408051918252519081900360200190f35b34801561024957600080fd5b50610252610516565b604080516001600160a01b039092168252519081900360200190f35b34801561027a57600080fd5b50610252610525565b34801561028f57600080fd5b50610214610534565b3480156102a457600080fd5b5061025261058f565b3480156102b957600080fd5b506102c261059e565b604080519115158252519081900360200190f35b3480156102e257600080fd5b506102146105af565b3480156102f757600080fd5b506102146004803603602081101561030e57600080fd5b50356001600160a01b03166106c7565b34801561032a57600080fd5b506102526107a2565b34801561033f57600080fd5b506103486107b1565b6040805160ff9092168252519081900360200190f35b34801561036a57600080fd5b506102146004803603602081101561038157600080fd5b50356001600160a01b031661079f565b34801561039d57600080fd5b50610214600480360360208110156103b457600080fd5b50356001600160a01b03166107c1565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906103f857508115155b949350505050565b61040861059e565b61041157600080fd5b6002805460ff60a01b1916600160a11b1790556104366001600160a01b0382166103c4565b61043f57600080fd5b610448816106c7565b61045281826107db565b600154610467906001600160a01b03166103c4565b1561048257600154610482906001600160a01b0316826107db565b60018054600280546001600160a01b038084166001600160a01b0319928316179092559091169083161790556104b66108c7565b6002546040805133815290516001600160a01b038085169316917f354bd4b6eb65d64e6c79c53fa4f983a5e6bec4824ce4627c71be0b2722f4917e919081900360200190a3506002805460ff60a01b1916600160a01b179055565b600290565b6002546001600160a01b031681565b6001546001600160a01b031690565b61053c61059e565b61054557600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6105b761059e565b6105c057600080fd5b6002805460ff60a01b1916600160a11b17908190556105e7906001600160a01b03166103c4565b6105f057600080fd5b6002546001546040805133815290516001600160a01b039384169392909216917f86e04d1de380d22833cb4409f3ee7c6ad818a8d8387a83b6371f5ce018ddc1549181900360200190a360025461064f906001600160a01b03166106c7565b600154610664906001600160a01b03166103c4565b1561068557600254600154610685916001600160a01b0390811691166107db565b60028054600180546001600160a01b03199081166001600160a01b038416179091551690556106b26108c7565b6002805460ff60a01b1916600160a01b179055565b60028054600160a01b900460ff16146106df57600080fd5b6106e761058f565b6001600160a01b031661070182638da5cb5b60e01b6109ad565b6001600160a01b03161461071457600080fd5b6001546001600160a01b031661073182636a5c1cc960e11b6109ad565b6001600160a01b03161461074457600080fd5b6002546001600160a01b0316610761826309659a2360e31b6109ad565b6001600160a01b03161461077457600080fd5b600254600160a01b900460ff166107928263e38a303b60e01b6109ad565b60ff161461079f57600080fd5b50565b6001546001600160a01b031681565b600254600160a01b900460ff1681565b6107c961059e565b6107d257600080fd5b61079f816109c6565b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663b9626d2160e01b17815292518251600094928716939282918083835b6020831061084f5780518252601f199092019160209182019101610830565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146108af576040519150601f19603f3d011682016040523d82523d6000602084013e6108b4565b606091505b50509050806108c257600080fd5b505050565b600154604080516001600160a01b03909216602480840182905282518085039091018152604490930182526020830180516001600160e01b031663746e668360e11b17815291518351600094929382918083835b6020831061093a5780518252601f19909201916020918201910161091b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461099a576040519150601f19603f3d011682016040523d82523d6000602084013e61099f565b606091505b505090508061079f57600080fd5b6000806109bd8484838080610a34565b51949350505050565b6001600160a01b0381166109d957600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518481528315610a47578260048201525b6001841115610a57578160248201525b6000808560200260040183895af48015610a75573d6000833e610a7a565b600082fd5b509594505050505056fea264697066735822122062c1e84b5f1f3effe1c0e4adbbd785ad950c738ea87a7aaef091add4452a9cbd64736f6c63430007000033

Deployed Bytecode Sourcemap

442:5202:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4677:6;;:19;;-1:-1:-1;;;;;4677:6:1;:17;:19::i;:::-;4670:27;;;;4818:6;;:23;;4797:16;;-1:-1:-1;;;;;4818:6:1;;4797:16;4818:23;4797:16;4818:23;:6;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4796:45;;;4856:11;4851:51;;4883:8;;;4851:51;4633:275;442:5202;;5045:6;;:19;;-1:-1:-1;;;;;5045:6:1;:17;:19::i;:::-;5038:27;;;;5188:6;;:29;;5167:16;;-1:-1:-1;;;;;5188:6:1;;5167:16;;5208:8;;5188:29;5167:16;5208:8;;5167:16;5188:29;;;;;;;-1:-1:-1;5188:29:1;;-1:-1:-1;5188:29:1;;-1:-1:-1;;5188:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5166:51;;;5231:11;5227:408;;;5509:16;5504:3;;5484:42;5555:16;5504:3;5543:29;5466:120;5616:8;;;1991:569;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1991:569:1;-1:-1:-1;;;;;1991:569:1;;:::i;:::-;;1490:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1003:29:3;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1003:29:3;;;;;;;;;;;;;;1696:97:1;;;;;;;;;;;;;:::i;1381:137:2:-;;;;;;;;;;;;;:::i;693:77::-;;;;;;;;;;;;;:::i;1013:90::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2693:556:1;;;;;;;;;;;;;:::i;3817:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3817:553:1;-1:-1:-1;;;;;3817:553:1;;:::i;889:21:3:-;;;;;;;;;;;;;:::i;1162:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4491:50:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4491:50:1;-1:-1:-1;;;;;4491:50:1;;:::i;1689:107:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1689:107:2;-1:-1:-1;;;;;1689:107:2;;:::i;718:610:0:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;1305:15:0;;;1278:42;1270:51;718:610;-1:-1:-1;;;;718:610:0:o;1991:569:1:-;897:9:2;:7;:9::i;:::-;889:18;;;;;;1428:1:3::1;792:24:1::0;;-1:-1:-1;;;;792:24:1::1;-1:-1:-1::0;;;792:24:1::1;::::0;;2070:20:::2;-1:-1:-1::0;;;;;2070:18:1;::::2;;:20::i;:::-;2062:29;;;::::0;::::2;;2189:20;2201:7;2189:11;:20::i;:::-;2271:40;2294:7;2303;2271:22;:40::i;:::-;2325:6;::::0;:19:::2;::::0;-1:-1:-1;;;;;2325:6:1::2;:17;:19::i;:::-;2321:89;;;2383:6;::::0;2360:39:::2;::::0;-1:-1:-1;;;;;2383:6:1::2;2391:7:::0;2360:22:::2;:39::i;:::-;2436:6;::::0;;2419:14:::2;:23:::0;;-1:-1:-1;;;;;2436:6:1;;::::2;-1:-1:-1::0;;;;;;2419:23:1;;::::2;;::::0;;;2452:16;;::::2;::::0;;::::2;;::::0;;2478:15:::2;:13;:15::i;:::-;2517:14;::::0;2508:45:::2;::::0;;2542:10:::2;2508:45:::0;;;;-1:-1:-1;;;;;2508:45:1;;::::2;::::0;2517:14:::2;::::0;2508:45:::2;::::0;;;;;::::2;::::0;;::::2;-1:-1:-1::0;837:9:1::1;:25:::0;;-1:-1:-1;;;;837:25:1::1;-1:-1:-1::0;;;837:25:1::1;::::0;;1991:569::o;1490:87::-;1569:1;1490:87;:::o;1003:29:3:-;;;-1:-1:-1;;;;;1003:29:3;;:::o;1696:97:1:-;1780:6;;-1:-1:-1;;;;;1780:6:1;1696:97;:::o;1381:137:2:-;897:9;:7;:9::i;:::-;889:18;;;;;;1479:1:::1;1463:6:::0;;1442:40:::1;::::0;-1:-1:-1;;;;;1463:6:2;;::::1;::::0;1442:40:::1;::::0;1479:1;;1442:40:::1;1509:1;1492:19:::0;;-1:-1:-1;;;;;;1492:19:2::1;::::0;;1381:137::o;693:77::-;731:7;757:6;-1:-1:-1;;;;;757:6:2;693:77;:::o;1013:90::-;1053:4;1090:6;-1:-1:-1;;;;;1090:6:2;1076:10;:20;;1013:90::o;2693:556:1:-;897:9:2;:7;:9::i;:::-;889:18;;;;;;1428:1:3::1;792:24:1::0;;-1:-1:-1;;;;792:24:1::1;-1:-1:-1::0;;;792:24:1::1;::::0;;;;2758:27:::2;::::0;-1:-1:-1;;;;;2758:14:1::2;:25;:27::i;:::-;2750:36;;;::::0;::::2;;2820:14;::::0;;2812:6;2801:46:::2;::::0;;2836:10:::2;2801:46:::0;;;;-1:-1:-1;;;;;2820:14:1;;::::2;::::0;2812:6;;;::::2;::::0;2801:46:::2;::::0;;;;::::2;::::0;;::::2;3027:14;::::0;3015:27:::2;::::0;-1:-1:-1;;;;;3027:14:1::2;3015:11;:27::i;:::-;3056:6;::::0;:19:::2;::::0;-1:-1:-1;;;;;3056:6:1::2;:17;:19::i;:::-;3052:96;;;3114:14;::::0;;3130:6;3091:46:::2;::::0;-1:-1:-1;;;;;3114:14:1;;::::2;::::0;3130:6:::2;3091:22;:46::i;:::-;3166:14;::::0;;;3157:23;;-1:-1:-1;;;;;;3157:23:1;;::::2;-1:-1:-1::0;;;;;3166:14:1;::::2;3157:23;::::0;;;3190:27:::2;::::0;;3227:15:::2;:13;:15::i;:::-;837:9:::1;:25:::0;;-1:-1:-1;;;;837:25:1::1;-1:-1:-1::0;;;837:25:1::1;::::0;;2693:556::o;3817:553::-;1428:1:3;1630:9;;-1:-1:-1;;;1630:9:3;;:25;:9;:25;1622:34;;;;;;4065:7:1::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;3998:74:1::1;4014:45;4026:11:::0;-1:-1:-1;;;4014:11:1::1;:45::i;:::-;-1:-1:-1::0;;;;;3998:74:1::1;;3990:83;;;::::0;::::1;;4159:6;::::0;-1:-1:-1;;;;;4159:6:1::1;4107:46;4119:11:::0;-1:-1:-1;;;4107:11:1::1;:46::i;:::-;-1:-1:-1::0;;;;;4091:74:1::1;;4083:83;;;::::0;::::1;;4260:14;::::0;-1:-1:-1;;;;;4260:14:1::1;4200:54;4212:11:::0;-1:-1:-1;;;4200:11:1::1;:54::i;:::-;-1:-1:-1::0;;;;;4184:90:1::1;;4176:99;;;::::0;::::1;;4353:9;::::0;-1:-1:-1;;;4353:9:1;::::1;;;4299:49;4311:11:::0;-1:-1:-1;;;4299:11:1::1;:49::i;:::-;4293:69;;;4285:78;;;::::0;::::1;;3817:553:::0;:::o;889:21:3:-;;;-1:-1:-1;;;;;889:21:3;;:::o;1162:22::-;;;-1:-1:-1;;;1162:22:3;;;;;:::o;1689:107:2:-;897:9;:7;:9::i;:::-;889:18;;;;;;1761:28:::1;1780:8;1761:18;:28::i;3330:211:1:-:0;3449:54;;;-1:-1:-1;;;;;3449:54:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3449:54:1;-1:-1:-1;;;3449:54:1;;;3430:74;;;;3409:16;;3430:18;;;;3449:54;3430:74;;;;3449:54;3430:74;;;;;;;;;;-1:-1:-1;;3430:74:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:96;;;3522:11;3514:20;;;;;;3330:211;;;:::o;3629:182::-;3694:6;;3714:59;;;-1:-1:-1;;;;;3694:6:1;;;3714:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:59:1;-1:-1:-1;;;3714:59:1;;;3694:80;;;;3673:16;;3694:6;;:80;;;;3714:59;3694:80;;;;;;;;;;-1:-1:-1;;3694:80:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3672:102;;;3792:11;3784:20;;;;;3576:259:3;3658:14;;3712:44;3728:7;3737:9;3658:14;;;3712:15;:44::i;:::-;3799:20;;3775:54;-1:-1:-1;;;;3775:54:3:o;1940:183:2:-;-1:-1:-1;;;;;2013:22:2;;2005:31;;;;;;2072:6;;;2051:38;;-1:-1:-1;;;;;2051:38:2;;;;2072:6;;;2051:38;;;2099:6;:17;;-1:-1:-1;;;;;;2099:17:2;-1:-1:-1;;;;;2099:17:2;;;;;;;;;;1940:183::o;2571:899:3:-;2852:4;2846:11;2870:32;;;2918:25;;2915:2;;2995:10;2988:4;2973:13;2969:24;2962:44;2915:2;3059:1;3039:18;3036:25;3033:2;;;3113:10;3106:4;3091:13;3087:24;3080:44;3033:2;3247:1;3244;3222:18;3216:4;3212:29;3206:4;3202:40;3187:13;3178:7;3171:5;3158:91;3266:71;;;;3419:16;3414:3;3399:13;3384:52;3151:303;;3266:71;3317:1;3302:13;3295:24;3151:303;;2815:649;;;;;;;:::o

Swarm Source

ipfs://62c1e84b5f1f3effe1c0e4adbbd785ad950c738ea87a7aaef091add4452a9cbd

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.