ETH Price: $2,294.72 (+9.41%)

Contract

0x93cC2B5ABDa1830E9AcaDE3CB76E22D3082BFAe5
 

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
Transfer Ownersh...179329542023-08-17 7:09:35942 days ago1692256175IN
0x93cC2B5A...3082BFAe5
0 ETH0.0005020317.59992334
Delayed Upgrade ...179329182023-08-17 7:02:23942 days ago1692255743IN
0x93cC2B5A...3082BFAe5
0 ETH0.0012033317.28510105

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040179326152023-08-17 6:01:23942 days ago1692252083  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:
DelayedImplementationManager

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright 2017 Loopring Technology Limited.
pragma solidity ^0.7.0;

import "../lib/Ownable.sol";

/**
 * @title DelayedImplementationManager
 * @author Kongliang Zhong - <kongliang@loopring.org>
 */
contract DelayedImplementationManager is Ownable {

    address public currImpl;
    address public nextImpl;
    uint    public nextEffectiveTime;

    event UpgradeScheduled(address nextImpl, uint effectiveTime);
    event UpgradeCancelled(address nextImpl);
    event ImplementationChanged(address newImpl);

    constructor(address initImpl) {
        require(initImpl != address(0), "ZERO_ADDRESS");
        currImpl = initImpl;
    }

    /**
     * @dev Allows the proxy owner to upgrade the current version of the proxy.
     * @param _nextImpl representing the address of the next implementation to be set.
     * @param _daysToDelay representing the amount of days after the next implementation take effect.
     */
    function delayedUpgradeTo(address _nextImpl, uint _daysToDelay) public onlyOwner {
        if (_nextImpl == address(0)) {
            require(nextImpl != address(0) && _daysToDelay == 0, "INVALID_ARGS");
            emit UpgradeCancelled(nextImpl);
            nextImpl = address(0);
        } else {
            require(_daysToDelay >= 1, "INVALID_DAYS");
            uint _nextEffectiveTime = block.timestamp + _daysToDelay * 1 days;
            nextImpl = _nextImpl;
            nextEffectiveTime = _nextEffectiveTime;
            emit UpgradeScheduled(_nextImpl, _nextEffectiveTime);
        }
    }

    /**
     * @dev Allows everyone to replace implementation after effective time.
     */
    function executeUpgrade() public {
        require(nextImpl != address(0) && block.timestamp >= nextEffectiveTime, "NOT_IN_EFFECT");
        currImpl = nextImpl;
        nextImpl = address(0);
        emit ImplementationChanged(currImpl);
    }

}

// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright 2017 Loopring Technology Limited.
pragma solidity ^0.7.0;


/// @title Ownable
/// @author Brecht Devos - <brecht@loopring.org>
/// @dev The Ownable contract has an owner address, and provides basic
///      authorization control functions, this simplifies the implementation of
///      "user permissions".
contract Ownable
{
    address public owner;

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

    /// @dev The Ownable constructor sets the original `owner` of the contract
    ///      to the sender.
    constructor()
    {
        owner = msg.sender;
    }

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner()
    {
        require(msg.sender == owner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to transfer control of the contract to a
    ///      new owner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        virtual
        onlyOwner
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function renounceOwnership()
        public
        onlyOwner
    {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"initImpl","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImpl","type":"address"}],"name":"ImplementationChanged","type":"event"},{"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":false,"internalType":"address","name":"nextImpl","type":"address"}],"name":"UpgradeCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nextImpl","type":"address"},{"indexed":false,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"UpgradeScheduled","type":"event"},{"inputs":[],"name":"currImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nextImpl","type":"address"},{"internalType":"uint256","name":"_daysToDelay","type":"uint256"}],"name":"delayedUpgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextEffectiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516109073803806109078339818101604052602081101561003357600080fd5b5051600080546001600160a01b031916331790556001600160a01b038116610091576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055610847806100c06000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d8578063b11a8c00146100e0578063d4bc334a146100fa578063f2fde38b1461013357610088565b80633d1623d51461008d5780634cce860b146100be578063715018a6146100c65780637e896214146100d0575b600080fd5b610095610166565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610095610182565b6100ce61019e565b005b6100ce610293565b6100956103ad565b6100e86103c9565b60408051918252519081900360200190f35b6100ce6004803603604081101561011057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103cf565b6100ce6004803603602081101561014957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661067c565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461022457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60025473ffffffffffffffffffffffffffffffffffffffff16158015906102bc57506003544210155b61032757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f494e5f45464645435400000000000000000000000000000000000000604482015290519081900360640190fd5b600280546001805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161792839055921690925560408051929091168252517f2989b377844ae55f0ca303ad21490d8519f8cf871ad6b5ba3dbec736bb54c63f916020908290030190a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461045557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166105795760025473ffffffffffffffffffffffffffffffffffffffff1615801590610495575080155b61050057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f494e56414c49445f415247530000000000000000000000000000000000000000604482015290519081900360640190fd5b6002546040805173ffffffffffffffffffffffffffffffffffffffff9092168252517f3198dc80249fcfedbd0d06e1ff49a7695a51b006592328ce0b127cdeab77e9369181900360200190a1600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610678565b60018110156105e957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f494e56414c49445f444159530000000000000000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155620151808202420160038190556040805192835260208301829052805191927fe1009627653eb47f7d0f3b4435749f7984a803c21f84a076cc4dcb0412cf066f929081900390910190a1505b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661078457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905556fea2646970667358221220cb947fab2869d97ad705cc180a11a6186da36135ac4977b41707fc17401e867364736f6c63430007060033000000000000000000000000df7e7f110e76449f217e799692eb8eb11b4f5557

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d8578063b11a8c00146100e0578063d4bc334a146100fa578063f2fde38b1461013357610088565b80633d1623d51461008d5780634cce860b146100be578063715018a6146100c65780637e896214146100d0575b600080fd5b610095610166565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610095610182565b6100ce61019e565b005b6100ce610293565b6100956103ad565b6100e86103c9565b60408051918252519081900360200190f35b6100ce6004803603604081101561011057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103cf565b6100ce6004803603602081101561014957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661067c565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461022457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60025473ffffffffffffffffffffffffffffffffffffffff16158015906102bc57506003544210155b61032757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f494e5f45464645435400000000000000000000000000000000000000604482015290519081900360640190fd5b600280546001805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161792839055921690925560408051929091168252517f2989b377844ae55f0ca303ad21490d8519f8cf871ad6b5ba3dbec736bb54c63f916020908290030190a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461045557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166105795760025473ffffffffffffffffffffffffffffffffffffffff1615801590610495575080155b61050057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f494e56414c49445f415247530000000000000000000000000000000000000000604482015290519081900360640190fd5b6002546040805173ffffffffffffffffffffffffffffffffffffffff9092168252517f3198dc80249fcfedbd0d06e1ff49a7695a51b006592328ce0b127cdeab77e9369181900360200190a1600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610678565b60018110156105e957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f494e56414c49445f444159530000000000000000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155620151808202420160038190556040805192835260208301829052805191927fe1009627653eb47f7d0f3b4435749f7984a803c21f84a076cc4dcb0412cf066f929081900390910190a1505b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661078457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905556fea2646970667358221220cb947fab2869d97ad705cc180a11a6186da36135ac4977b41707fc17401e867364736f6c63430007060033

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

000000000000000000000000df7e7f110e76449f217e799692eb8eb11b4f5557

-----Decoded View---------------
Arg [0] : initImpl (address): 0xdf7E7f110E76449F217e799692eb8EB11B4F5557

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000df7e7f110e76449f217e799692eb8eb11b4f5557


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.