Contract 0xbbD3C0C794F40c4f993B03F65343aCC6fcfCb2e2 2

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0xc3ef7185c5be4b5cc3095fb9f86184f3ef70b941bb61b611f9c659f3841e605bCommit To Next P...(pending)2021-09-16 0:57:4511 hrs 19 mins ago0x72a33abf2a959e06519004878843ec95dbbcefc7 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xf3b5b706d7fa1d98fa1607660f3cf0d16c6d53ce2eb56740ea67be2dc348e939Commit To Next P...(pending)2021-09-16 0:33:3211 hrs 43 mins ago0xb5ff633bf9f08886b5ef60f626d4eb302605b1ca IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x4ec2da9e28316d55733db6a1e5af1bf894905a9eb956a4fb803f8d533b7dcbbdCommit To Next P...(pending)2021-09-16 0:01:5212 hrs 15 mins ago0x5bbca9c3f7f48e9a6a02378a8181dac0bccba95f IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x27baf650c33c704856eadc6f008a2d8e06b8e8d9422f29b99ccbbeff1fc625edCommit To Next P...(pending)2021-09-05 3:18:0611 days 8 hrs ago0xc2246d5cf289af394728e304e8c06b7e98844fc7 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xef2323df7981a7997af1dde4dbdbe423c5e1c443f170997da6dd5c6bb947bed2Commit To Next P...(pending)2021-09-05 2:49:5411 days 9 hrs ago0xeef2d554276c803c35fa9e0ea1cc27c21b775009 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x6f934390923d3906502c66ebc6e7e9487b2a811a7b6b86b0c9cdd072782e0752Commit To Next P...(pending)2021-09-05 2:41:4511 days 9 hrs ago0x02e36e381166055f1725eca60c8cb3780e68ae1e IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x7bfda51a1556270410006c99b2d274d1f26208486dc0e934fd468495b8b82132Commit To Next P...(pending)2021-09-05 2:35:3611 days 9 hrs ago0x53777f050032e754cd877171b89d353201f1cfdc IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xdfca0b7fc55ba460f620f17d3510af8a9de449a8912854ce6403843aa686277cSet Re Stake(pending)2021-09-05 2:34:5411 days 9 hrs ago0x8fdc8aebca69e7258fd4606ac298b667b94a6895 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xbae1d0101d441910e7408c533672190b66fc7543e0f347cf079c5c07d25b0f5eCommit To Next P...(pending)2021-09-05 2:33:5411 days 9 hrs ago0xd37d3362dd59fd718b95d01a750b817494dcabfa IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x86ceb6df250f928720f91679ad4e6d68e182591fe1be990f81ff899c0812e0c6Commit To Next P...(pending)2021-09-05 2:30:5411 days 9 hrs ago0x8815e5a815d6fd03bb149507cae47a2a931a7877 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xc003dcd6bdc5669ba4617f4be245d78e71d8b143a888fbaccaa1c3ff73a57f5dCommit To Next P...(pending)2021-09-05 2:30:2411 days 9 hrs ago0x95b7fd1a89469b9b9a9e1bfd6f1b1b00990a8813 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0x044d27c5ced0c7fe2c4f9a70779ce36d076cecc51314ab157ea16f321ae7aefaCommit To Next P...(pending)2021-09-05 2:25:5911 days 9 hrs ago0xc1c76fe192c51773e9ac5f0e171f99c1fabd0c69 IN NuCypher: StakingEscrow0 Ether(Pending)(Pending)
0xc96a6aa88ec63dee7909abacd94667cd28d648d86069a6b40f85b7df76aad486Commit To Next P...132365962021-09-16 11:51:4225 mins ago0x677a8e562d9455ab44984fe61fa1e910826bb492 IN  NuCypher: StakingEscrow0 Ether0.00762833442
0x2ed8cdca0e86d95156f6791b844fdef5119b7e40ce153d928370cc47219bb367Commit To Next P...132365732021-09-16 11:47:2629 mins ago0x52263ced041e85c856e0df497ac3653de0f1e9f5 IN  NuCypher: StakingEscrow0 Ether0.00682403442
0x3ed3cf807d5bd2462d8c47f3447498da138b174ea4d0b5af4923d65669d8846dWithdraw132363962021-09-16 11:08:421 hr 8 mins ago0x861d962ce2e432f516db0a709e149b8c38a6c725 IN  NuCypher: StakingEscrow0 Ether0.00658211693745.600527473
0xbd5c67f0b909cfe46297d338a46c7030035cad24b9fb910a5cf6ee03e2479c76Commit To Next P...132361852021-09-16 10:16:452 hrs ago0xb087e07bf29e6bb535351afd21aa60f139345cc1 IN  NuCypher: StakingEscrow0 Ether0.00568669535
0x1b95f4a6c1d98ecb81aae66633baadd826c6a0b730d8d757076173e142e9fb20Commit To Next P...132360212021-09-16 9:39:512 hrs 37 mins ago0xf0c63bbbdb7f7e98e5fea0b02e8029ea332a55ad IN  NuCypher: StakingEscrow0 Ether0.00944460452
0xe38ecedad467da9a14342ec410cca3f735ca7803794690072253ba4e70225077Withdraw132359872021-09-16 9:34:032 hrs 42 mins ago0x2cd8f299c4ab002e486037e0bb43d276a8955696 IN  NuCypher: StakingEscrow0 Ether0.00917841231551.14603837
0x7217ee2633b3da048c1bfae49c44e0819519c9e3b74e03abc188b96cc708ce41Merge Stake132351962021-09-16 6:40:305 hrs 36 mins ago0x6f653c3ab0a9ef866e4ba99ce40340129ce2cc4c IN  NuCypher: StakingEscrow0 Ether0.00304214205362.564619396
0xe2a2c4ee5c6d821ece1bd8015af1248642212a0e83e7e8f6a7c272e273e4666bCommit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0x66a476c74a32d8b099357cc38b0ee64df4761baf IN  NuCypher: StakingEscrow0 Ether0.0037015640
0xd12e7e6160d6d0a60d734d20a3756743b297c3377cd43e6c6b920675a2f16e32Commit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0x2bba53daa2a2a5df82eb6072055b4a7fccc32f9d IN  NuCypher: StakingEscrow0 Ether0.0037015640
0x781d57b1c57b61e03295b9fa9286b228f962f46a1f92970671527f6aca3de262Commit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0xc88a8c4c149429c04b0c0c8e765edadf87ca7742 IN  NuCypher: StakingEscrow0 Ether0.0037015640
0x4bc052e33a3a9e706d8d6c6ec114ef827e563760fe835a5969426a9a71d42ef6Commit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0x443537a604050ea28c6fd1b2703dc355eefad7d2 IN  NuCypher: StakingEscrow0 Ether0.0037015640
0x74545056a41fa8685202b35c6949ad541fad1a3342539875aa772ac19b168fe1Commit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0xc9e745efd491202eba502f40bc2f2a2634617af9 IN  NuCypher: StakingEscrow0 Ether0.0037015640
0xcd72366dfdb6388cc6bf72aec018ef02eba19b657e5a2869c514784d97c0793bCommit To Next P...132351732021-09-16 6:34:045 hrs 42 mins ago0x23cdc834bfe1bc9e9bf1ca126299a3685dcdbd79 IN  NuCypher: StakingEscrow0 Ether0.0037015640
[ Download CSV Export 

OVERVIEW

Smart contract that holds staked NU as well as future inflation emissions.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

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 2 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 1 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"}]

60806040523480156200001157600080fd5b5060405162000fa138038062000fa1833981810160405260208110156200003757600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36002805460ff60a01b1916600160a11b179055620000b56001600160a01b03821662000156602090811b620003c417901c565b620000bf57600080fd5b620000ca8162000193565b620000d681806200027d565b600180546001600160a01b0319166001600160a01b038316179055620000fb6200036e565b6040805133815290516001600160a01b038316916000917f354bd4b6eb65d64e6c79c53fa4f983a5e6bec4824ce4627c71be0b2722f4917e9181900360200190a3506002805460ff60a01b1916600160a01b179055620004d7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906200018b57508115155b949350505050565b60028054600160a01b900460ff1614620001ac57600080fd5b620001b662000459565b6001600160a01b0316620001d282638da5cb5b60e01b62000468565b6001600160a01b031614620001e657600080fd5b6001546001600160a01b03166200020582636a5c1cc960e11b62000468565b6001600160a01b0316146200021957600080fd5b6002546001600160a01b031662000238826309659a2360e31b62000468565b6001600160a01b0316146200024c57600080fd5b600254600160a01b900460ff166200026c8263e38a303b60e01b62000468565b60ff16146200027a57600080fd5b50565b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663b9626d2160e01b17815292518251600094928716939282918083835b60208310620002f35780518252601f199092019160209182019101620002d2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811462000355576040519150601f19603f3d011682016040523d82523d6000602084013e6200035a565b606091505b50509050806200036957600080fd5b505050565b600154604080516001600160a01b03909216602480840182905282518085039091018152604490930182526020830180516001600160e01b031663746e668360e11b17815291518351600094929382918083835b60208310620003e35780518252601f199092019160209182019101620003c2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b50509050806200027a57600080fd5b6000546001600160a01b031690565b6000806200047a848483808062000483565b51949350505050565b604051848152831562000497578260048201525b6001841115620004a8578160248201525b6000808560200260040183895af48015620004c8573d6000833e620004cd565b600082fd5b5095945050505050565b610aba80620004e76000396000f3fe6080604052600436106100c65760003560e01c80638f32d59b1161007f578063d4b8399211610059578063d4b839921461031e578063e38a303b14610333578063e8dccd061461035e578063f2fde38b1461039157610145565b80638f32d59b146102ad5780639afd9d78146102d6578063b9626d21146102eb57610145565b80630900f010146101e15780634555d5c9146102165780634b2cd1181461023d5780635c60da1b1461026e578063715018a6146102835780638da5cb5b1461029857610145565b36610145576001546100e0906001600160a01b03166103c4565b6100e657fe5b6001546040516000916001600160a01b03169082818181855af49150503d806000811461012f576040519150601f19603f3d011682016040523d82523d6000602084013e610134565b606091505b505090508061014257600080fd5b50005b60015461015a906001600160a01b03166103c4565b61016057fe5b6001546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146101c3576040519150601f19603f3d011682016040523d82523d6000602084013e6101c8565b606091505b5050905080156101dc573d6000803e3d6000f35b600080fd5b3480156101ed57600080fd5b506102146004803603602081101561020457600080fd5b50356001600160a01b0316610400565b005b34801561022257600080fd5b5061022b610511565b60408051918252519081900360200190f35b34801561024957600080fd5b50610252610516565b604080516001600160a01b039092168252519081900360200190f35b34801561027a57600080fd5b50610252610525565b34801561028f57600080fd5b50610214610534565b3480156102a457600080fd5b5061025261058f565b3480156102b957600080fd5b506102c261059e565b604080519115158252519081900360200190f35b3480156102e257600080fd5b506102146105af565b3480156102f757600080fd5b506102146004803603602081101561030e57600080fd5b50356001600160a01b03166106c7565b34801561032a57600080fd5b506102526107a2565b34801561033f57600080fd5b506103486107b1565b6040805160ff9092168252519081900360200190f35b34801561036a57600080fd5b506102146004803603602081101561038157600080fd5b50356001600160a01b031661079f565b34801561039d57600080fd5b50610214600480360360208110156103b457600080fd5b50356001600160a01b03166107c1565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906103f857508115155b949350505050565b61040861059e565b61041157600080fd5b6002805460ff60a01b1916600160a11b1790556104366001600160a01b0382166103c4565b61043f57600080fd5b610448816106c7565b61045281826107db565b600154610467906001600160a01b03166103c4565b1561048257600154610482906001600160a01b0316826107db565b60018054600280546001600160a01b038084166001600160a01b0319928316179092559091169083161790556104b66108c7565b6002546040805133815290516001600160a01b038085169316917f354bd4b6eb65d64e6c79c53fa4f983a5e6bec4824ce4627c71be0b2722f4917e919081900360200190a3506002805460ff60a01b1916600160a01b179055565b600290565b6002546001600160a01b031681565b6001546001600160a01b031690565b61053c61059e565b61054557600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6105b761059e565b6105c057600080fd5b6002805460ff60a01b1916600160a11b17908190556105e7906001600160a01b03166103c4565b6105f057600080fd5b6002546001546040805133815290516001600160a01b039384169392909216917f86e04d1de380d22833cb4409f3ee7c6ad818a8d8387a83b6371f5ce018ddc1549181900360200190a360025461064f906001600160a01b03166106c7565b600154610664906001600160a01b03166103c4565b1561068557600254600154610685916001600160a01b0390811691166107db565b60028054600180546001600160a01b03199081166001600160a01b038416179091551690556106b26108c7565b6002805460ff60a01b1916600160a01b179055565b60028054600160a01b900460ff16146106df57600080fd5b6106e761058f565b6001600160a01b031661070182638da5cb5b60e01b6109ad565b6001600160a01b03161461071457600080fd5b6001546001600160a01b031661073182636a5c1cc960e11b6109ad565b6001600160a01b03161461074457600080fd5b6002546001600160a01b0316610761826309659a2360e31b6109ad565b6001600160a01b03161461077457600080fd5b600254600160a01b900460ff166107928263e38a303b60e01b6109ad565b60ff161461079f57600080fd5b50565b6001546001600160a01b031681565b600254600160a01b900460ff1681565b6107c961059e565b6107d257600080fd5b61079f816109c6565b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663b9626d2160e01b17815292518251600094928716939282918083835b6020831061084f5780518252601f199092019160209182019101610830565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146108af576040519150601f19603f3d011682016040523d82523d6000602084013e6108b4565b606091505b50509050806108c257600080fd5b505050565b600154604080516001600160a01b03909216602480840182905282518085039091018152604490930182526020830180516001600160e01b031663746e668360e11b17815291518351600094929382918083835b6020831061093a5780518252601f19909201916020918201910161091b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461099a576040519150601f19603f3d011682016040523d82523d6000602084013e61099f565b606091505b505090508061079f57600080fd5b6000806109bd8484838080610a34565b51949350505050565b6001600160a01b0381166109d957600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518481528315610a47578260048201525b6001841115610a57578160248201525b6000808560200260040183895af48015610a75573d6000833e610a7a565b600082fd5b509594505050505056fea264697066735822122062c1e84b5f1f3effe1c0e4adbbd785ad950c738ea87a7aaef091add4452a9cbd64736f6c6343000700003300000000000000000000000033d28fcb3204b146ea8d5f059ebef8679f992deb

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

00000000000000000000000033d28fcb3204b146ea8d5f059ebef8679f992deb

-----Decoded View---------------
Arg [0] : _target (address): 0x33d28fcb3204b146ea8d5f059ebef8679f992deb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000033d28fcb3204b146ea8d5f059ebef8679f992deb


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
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.