ETH Price: $2,420.50 (+0.63%)
Gas: 2.62 Gwei

Contract

0xB5ecC8ab46e2E20573C2e57C865F7c97f58c2798
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Dapp177274382023-07-19 13:10:35444 days ago1689772235IN
0xB5ecC8ab...7f58c2798
0 ETH0.0009868934.48751186
Remove Dapp177274372023-07-19 13:10:23444 days ago1689772223IN
0xB5ecC8ab...7f58c2798
0 ETH0.0010040335.08646458
Remove Dapp177274362023-07-19 13:10:11444 days ago1689772211IN
0xB5ecC8ab...7f58c2798
0 ETH0.0009904134.6106567
Remove Dapp177274352023-07-19 13:09:59444 days ago1689772199IN
0xB5ecC8ab...7f58c2798
0 ETH0.0009828634.34659656
Remove Dapp177274342023-07-19 13:09:47444 days ago1689772187IN
0xB5ecC8ab...7f58c2798
0 ETH0.00097233.98133013
Remove Dapp177274332023-07-19 13:09:35444 days ago1689772175IN
0xB5ecC8ab...7f58c2798
0 ETH0.0009824834.33348081
Remove Dapp177274322023-07-19 13:09:23444 days ago1689772163IN
0xB5ecC8ab...7f58c2798
0 ETH0.0010110435.33147573
Remove Dapp177274312023-07-19 13:09:11444 days ago1689772151IN
0xB5ecC8ab...7f58c2798
0 ETH0.0010177235.56494396
Remove Dapp177274302023-07-19 13:08:59444 days ago1689772139IN
0xB5ecC8ab...7f58c2798
0 ETH0.0009916234.65285548
Remove Dapp177274292023-07-19 13:08:47444 days ago1689772127IN
0xB5ecC8ab...7f58c2798
0 ETH0.0010032335.0583947
Remove Dapp177274282023-07-19 13:08:35444 days ago1689772115IN
0xB5ecC8ab...7f58c2798
0 ETH0.001009735.2847163
Remove Dapp177274272023-07-19 13:08:23444 days ago1689772103IN
0xB5ecC8ab...7f58c2798
0 ETH0.001028235.94609812
Remove Dapp177274262023-07-19 13:08:11444 days ago1689772091IN
0xB5ecC8ab...7f58c2798
0 ETH0.0010498236.68677488
Remove Dapp177211332023-07-18 15:54:47445 days ago1689695687IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014309250.00451792
Remove Dapp177211322023-07-18 15:54:35445 days ago1689695675IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014556350.86795113
Remove Dapp177211312023-07-18 15:54:23445 days ago1689695663IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014560850.8837009
Remove Dapp177211302023-07-18 15:54:11445 days ago1689695651IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014637551.1514794
Remove Dapp177211292023-07-18 15:53:59445 days ago1689695639IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014652251.20315159
Remove Dapp177211282023-07-18 15:53:47445 days ago1689695627IN
0xB5ecC8ab...7f58c2798
0 ETH0.0013785648.17472431
Remove Dapp177211272023-07-18 15:53:35445 days ago1689695615IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014129449.39668877
Remove Dapp177211262023-07-18 15:53:23445 days ago1689695603IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014285549.92139126
Remove Dapp177211252023-07-18 15:53:11445 days ago1689695591IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014398750.31701201
Remove Dapp177211242023-07-18 15:52:59445 days ago1689695579IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014294949.97546828
Remove Dapp177211232023-07-18 15:52:47445 days ago1689695567IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014097249.26360826
Remove Dapp177211222023-07-18 15:52:35445 days ago1689695555IN
0xB5ecC8ab...7f58c2798
0 ETH0.0014308750.00277453
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DappRegistry

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion
File 1 of 3 : DappRegistry.sol
// Copyright (C) 2021  Argent Labs Ltd. <https://argent.xyz>

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.3;

import "./IAuthoriser.sol";
import "./dapp/IFilter.sol";

contract DappRegistry is IAuthoriser {

    // The timelock period
    uint64 public timelockPeriod;
    // The new timelock period
    uint64 public newTimelockPeriod;
    // Time at which the new timelock becomes effective
    uint64 public timelockPeriodChangeAfter;

    // bit vector of enabled registry ids for each wallet
    mapping (address => bytes32) public enabledRegistryIds; // [wallet] => [bit vector of 256 registry ids]
    // authorised dapps and their filters for each registry id
    mapping (uint8 => mapping (address => bytes32)) public authorisations; // [registryId] => [dapp] => [{filter:160}{validAfter:64}]
    // pending authorised dapps and their filters for each registry id
    mapping (uint8 => mapping (address => bytes32)) public pendingFilterUpdates; // [registryId] => [dapp] => [{filter:160}{validAfter:64}]
    // owners for each registry id
    mapping (uint8 => address) public registryOwners; // [registryId] => [owner]
    
    event RegistryCreated(uint8 registryId, address registryOwner);
    event OwnerChanged(uint8 registryId, address newRegistryOwner);
    event TimelockChangeRequested(uint64 newTimelockPeriod);
    event TimelockChanged(uint64 newTimelockPeriod);
    event FilterUpdated(uint8 indexed registryId, address dapp, address filter, uint256 validAfter);
    event FilterUpdateRequested(uint8 indexed registryId, address dapp, address filter, uint256 validAfter);
    event DappAdded(uint8 indexed registryId, address dapp, address filter, uint256 validAfter);
    event DappRemoved(uint8 indexed registryId, address dapp);
    event ToggledRegistry(address indexed sender, uint8 registryId, bool enabled);

    modifier onlyOwner(uint8 _registryId) {
        validateOwner(_registryId);
        _;
    }
    
    constructor(uint64 _timelockPeriod) {
        // set the timelock period
        timelockPeriod = _timelockPeriod;
        // set the owner of the Argent Registry (registryId = 0)
        registryOwners[0] = msg.sender;

        emit RegistryCreated(0, msg.sender);
        emit TimelockChanged(_timelockPeriod);
    }

    /********* Wallet-centered functions *************/

    /**
    * @notice Returns whether a registry is enabled for a wallet
    * @param _wallet The wallet
    * @param _registryId The registry id
    */
    function isEnabledRegistry(address _wallet, uint8 _registryId) external view returns (bool isEnabled) {
        uint registries = uint(enabledRegistryIds[_wallet]);
        return (((registries >> _registryId) & 1) > 0) /* "is bit set for regId?" */ == (_registryId > 0) /* "not Argent registry?" */;
    }

    /**
    * @notice Returns whether a (_spender, _to, _data) call is authorised for a wallet
    * @param _wallet The wallet
    * @param _spender The spender of the tokens for token approvals, or the target of the transaction otherwise
    * @param _to The target of the transaction
    * @param _data The calldata of the transaction
    */
    function isAuthorised(address _wallet, address _spender, address _to, bytes calldata _data) public view override returns (bool) {
        uint registries = uint(enabledRegistryIds[_wallet]);
        // Check Argent Default Registry first. It is enabled by default, implying that a zero 
        // at position 0 of the `registries` bit vector means that the Argent Registry is enabled)
        for(uint registryId = 0; registryId == 0 || (registries >> registryId) > 0; registryId++) {
            bool isEnabled = (((registries >> registryId) & 1) > 0) /* "is bit set for regId?" */ == (registryId > 0) /* "not Argent registry?" */;
            if(isEnabled) { // if registryId is enabled
                uint auth = uint(authorisations[uint8(registryId)][_spender]); 
                uint validAfter = auth & 0xffffffffffffffff;
                if (0 < validAfter && validAfter <= block.timestamp) { // if the current time is greater than the validity time
                    address filter = address(uint160(auth >> 64));
                    if(filter == address(0) || IFilter(filter).isValid(_wallet, _spender, _to, _data)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
    * @notice Returns whether a collection of (_spender, _to, _data) calls are authorised for a wallet
    * @param _wallet The wallet
    * @param _spenders The spenders of the tokens for token approvals, or the targets of the transaction otherwise
    * @param _to The targets of the transaction
    * @param _data The calldata of the transaction
    */
    function areAuthorised(
        address _wallet,
        address[] calldata _spenders,
        address[] calldata _to,
        bytes[] calldata _data
    )
        external
        view
        override
        returns (bool) 
    {
        for(uint i = 0; i < _spenders.length; i++) {
            if(!isAuthorised(_wallet, _spenders[i], _to[i], _data[i])) {
                return false;
            }
        }
        return true;
    }

    /**
    * @notice Allows a wallet to decide whether _registryId should be part of the list of enabled registries for that wallet
    * @param _registryId The id of the registry to enable/disable
    * @param _enabled Whether the registry should be enabled (true) or disabled (false)
    */
    function toggleRegistry(uint8 _registryId, bool _enabled) external {
        require(registryOwners[_registryId] != address(0), "DR: unknown registry");
        uint registries = uint(enabledRegistryIds[msg.sender]);
        bool current = (((registries >> _registryId) & 1) > 0) /* "is bit set for regId?" */ == (_registryId > 0) /* "not Argent registry?" */;
        if(current != _enabled) {
            enabledRegistryIds[msg.sender] = bytes32(registries ^ (uint(1) << _registryId)); // toggle [_registryId]^th bit
            emit ToggledRegistry(msg.sender, _registryId, _enabled);
        }
    }

    /**************  Management of registry list  *****************/

    /**
    * @notice Create a new registry. Only the owner of the Argent registry (i.e. the registry with id 0 -- hence the use of `onlyOwner(0)`)
    * can create a new registry.
    * @param _registryId The id of the registry to create
    * @param _registryOwner The owner of that new registry
    */
    function createRegistry(uint8 _registryId, address _registryOwner) external onlyOwner(0) {
        require(_registryOwner != address(0), "DR: registry owner is 0");
        require(registryOwners[_registryId] == address(0), "DR: duplicate registry");
        registryOwners[_registryId] = _registryOwner;
        emit RegistryCreated(_registryId, _registryOwner);
    }

    // Note: removeRegistry is not supported because that would allow the owner to replace registries that 
    // have already been enabled by users with a new (potentially maliciously populated) registry 

    /**
    * @notice Lets a registry owner change the owner of the registry.
    * @param _registryId The id of the registry
    * @param _newRegistryOwner The new owner of the registry
    */
    function changeOwner(uint8 _registryId, address _newRegistryOwner) external onlyOwner(_registryId) {
        require(_newRegistryOwner != address(0), "DR: new registry owner is 0");
        registryOwners[_registryId] = _newRegistryOwner;
        emit OwnerChanged(_registryId, _newRegistryOwner);
    }

    /**
    * @notice Request a change of the timelock value. Only the owner of the Argent registry (i.e. the registry with id 0 -- 
    * hence the use of `onlyOwner(0)`) can perform that action. This action can be confirmed after the (old) timelock period.
    * @param _newTimelockPeriod The new timelock period
    */
    function requestTimelockChange(uint64 _newTimelockPeriod) external onlyOwner(0) {
        newTimelockPeriod = _newTimelockPeriod;
        timelockPeriodChangeAfter = uint64(block.timestamp) + timelockPeriod;
        emit TimelockChangeRequested(_newTimelockPeriod);
    }

    /**
    * @notice Confirm a change of the timelock value requested by `requestTimelockChange()`.
    */
    function confirmTimelockChange() external {
        uint64 newPeriod = newTimelockPeriod;
        require(timelockPeriodChangeAfter > 0 && timelockPeriodChangeAfter <= block.timestamp, "DR: can't (yet) change timelock");
        timelockPeriod = newPeriod;
        newTimelockPeriod = 0;
        timelockPeriodChangeAfter = 0;
        emit TimelockChanged(newPeriod);
    }

    /**************  Management of registries' content  *****************/

    /**
    * @notice Returns the (filter, validAfter) tuple recorded for a dapp in a given registry.
    * `filter` is the authorisation filter stored for the dapp (if any) and `validAfter` is the 
    * timestamp after which the filter becomes active.
    * @param _registryId The registry id
    * @param _dapp The dapp
    */
    function getAuthorisation(uint8 _registryId, address _dapp) external view returns (address filter, uint64 validAfter) {
        uint auth = uint(authorisations[_registryId][_dapp]);
        filter = address(uint160(auth >> 64));
        validAfter = uint64(auth & 0xffffffffffffffff);
    }

    /**
    * @notice Add a new dapp to the registry with an optional filter
    * @param _registryId The id of the registry to modify
    * @param _dapp The address of the dapp contract to authorise.
    * @param _filter The address of the filter contract to use, if any.
    */
    function addDapp(uint8 _registryId, address _dapp, address _filter) external onlyOwner(_registryId) {
        require(authorisations[_registryId][_dapp] == bytes32(0), "DR: dapp already added");
        uint validAfter = block.timestamp + timelockPeriod;
        // Store the new authorisation as {filter:160}{validAfter:64}.
        authorisations[_registryId][_dapp] = bytes32((uint(uint160(_filter)) << 64) | validAfter);
        emit DappAdded(_registryId, _dapp, _filter, validAfter);
    }


    /**
    * @notice Deauthorise a dapp in a registry
    * @param _registryId The id of the registry to modify
    * @param _dapp The address of the dapp contract to deauthorise.
    */
    function removeDapp(uint8 _registryId, address _dapp) external onlyOwner(_registryId) {
        require(authorisations[_registryId][_dapp] != bytes32(0), "DR: unknown dapp");
        delete authorisations[_registryId][_dapp];
        delete pendingFilterUpdates[_registryId][_dapp];
        emit DappRemoved(_registryId, _dapp);
    }

    /**
    * @notice Request to change an authorisation filter for a dapp that has previously been authorised. We cannot 
    * immediately override the existing filter and need to store the new filter for a timelock period before being 
    * able to change the filter.
    * @param _registryId The id of the registry to modify
    * @param _dapp The address of the dapp contract to authorise.
    * @param _filter The address of the new filter contract to use.
    */
    function requestFilterUpdate(uint8 _registryId, address _dapp, address _filter) external onlyOwner(_registryId) {
        require(authorisations[_registryId][_dapp] != bytes32(0), "DR: unknown dapp");
        uint validAfter = block.timestamp + timelockPeriod;
        // Store the future authorisation as {filter:160}{validAfter:64}
        pendingFilterUpdates[_registryId][_dapp] = bytes32((uint(uint160(_filter)) << 64) | validAfter);
        emit FilterUpdateRequested(_registryId, _dapp, _filter, validAfter);
    }

    /**
    * @notice Confirm the filter change requested by `requestFilterUpdate`
    * @param _registryId The id of the registry to modify
    * @param _dapp The address of the dapp contract to authorise.
    */
    function confirmFilterUpdate(uint8 _registryId, address _dapp) external {
        uint newAuth = uint(pendingFilterUpdates[_registryId][_dapp]);
        require(newAuth > 0, "DR: no pending filter update");
        uint validAfter = newAuth & 0xffffffffffffffff;
        require(validAfter <= block.timestamp, "DR: too early to confirm auth");
        authorisations[_registryId][_dapp] = bytes32(newAuth);
        emit FilterUpdated(_registryId, _dapp, address(uint160(newAuth >> 64)), validAfter); 
        delete pendingFilterUpdates[_registryId][_dapp];
    }

    /********  Internal Functions ***********/

    function validateOwner(uint8 _registryId) internal view {
        address owner = registryOwners[_registryId];
        require(owner != address(0), "DR: unknown registry");
        require(msg.sender == owner, "DR: sender != registry owner");
    }
}

File 2 of 3 : IAuthoriser.sol
// Copyright (C) 2021  Argent Labs Ltd. <https://argent.xyz>

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.3;

interface IAuthoriser {
    function isAuthorised(address _sender, address _spender, address _to, bytes calldata _data) external view returns (bool);
    function areAuthorised(
        address _spender,
        address[] calldata _spenders,
        address[] calldata _to,
        bytes[] calldata _data
    )
        external
        view
        returns (bool);
}

File 3 of 3 : IFilter.sol
// Copyright (C) 2021  Argent Labs Ltd. <https://argent.xyz>

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.3;

interface IFilter {
    function isValid(address _wallet, address _spender, address _to, bytes calldata _data) external view returns (bool valid);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint64","name":"_timelockPeriod","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"DappAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"}],"name":"DappRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"FilterUpdateRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"FilterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"newRegistryOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"registryOwner","type":"address"}],"name":"RegistryCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"newTimelockPeriod","type":"uint64"}],"name":"TimelockChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"newTimelockPeriod","type":"uint64"}],"name":"TimelockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ToggledRegistry","type":"event"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"},{"internalType":"address","name":"_filter","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address[]","name":"_spenders","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"areAuthorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_newRegistryOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"confirmFilterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmTimelockChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_registryOwner","type":"address"}],"name":"createRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"enabledRegistryIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"getAuthorisation","outputs":[{"internalType":"address","name":"filter","type":"address"},{"internalType":"uint64","name":"validAfter","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"isAuthorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint8","name":"_registryId","type":"uint8"}],"name":"isEnabledRegistry","outputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newTimelockPeriod","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"pendingFilterUpdates","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"registryOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"removeDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"},{"internalType":"address","name":"_filter","type":"address"}],"name":"requestFilterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_newTimelockPeriod","type":"uint64"}],"name":"requestTimelockChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockPeriodChangeAfter","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405161166438038061166483398101604081905261002f91610101565b600080546001600160401b0319166001600160401b038316178155808052600460209081527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054336001600160a01b0319909116811790915560408051938452918301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db31910160405180910390a16040516001600160401b03821681527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a15061012f565b600060208284031215610112578081fd5b81516001600160401b0381168114610128578182fd5b9392505050565b6115268061013e6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636dd2ee2d116100cd5780639451881911610081578063cbe0afaa11610066578063cbe0afaa14610386578063ecd08dba14610399578063fcc6983e146103b95761016c565b80639451881914610360578063b0e8b8a6146103735761016c565b806387f4415f116100b257806387f4415f1461031a5780638aa6e8de146103455780638c6f896a146103585761016c565b80636dd2ee2d146102b957806377098290146102fa5761016c565b8063314c51fe116101245780634021291611610109578063402129161461025557806345d62e08146102685780635cfdc4d0146102a65761016c565b8063314c51fe1461020957806332df05601461021c5761016c565b806319a1fa6f1161015557806319a1fa6f146101bf5780632a42be54146101d25780632ecaf675146101f55761016c565b806305424669146101715780630ee981f214610186575b600080fd5b61018461017f366004611331565b61042d565b005b6000546101a190600160801b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6101846101cd366004611331565b61050b565b6101e56101e03660046111fa565b610679565b60405190151581526020016101b6565b6000546101a19067ffffffffffffffff1681565b610184610217366004611331565b610756565b61024761022a366004611331565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101b6565b610184610263366004611331565b610890565b6101e56102763660046112a1565b6001600160a01b039190911660009081526001602081905260409091205460ff90921691821c1615159015151490565b6101e56102b436600461115d565b610982565b6102e26102c7366004611317565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b61024761030836600461113c565b60016020526000908152604090205481565b610247610328366004611331565b600360209081526000928352604080842090915290825290205481565b61018461035336600461139c565b610af7565b610184610be8565b61018461036e36600461135a565b610ce6565b6101846103813660046112ef565b610e18565b61018461039436600461135a565b610eda565b6000546101a19068010000000000000000900467ffffffffffffffff1681565b6104056103c7366004611331565b60ff90911660009081526002602090815260408083206001600160a01b039094168352929052819020549081901c9167ffffffffffffffff90911690565b604080516001600160a01b03909316835267ffffffffffffffff9091166020830152016101b6565b8161043781611000565b6001600160a01b0382166104925760405162461bcd60e51b815260206004820152601b60248201527f44523a206e6577207265676973747279206f776e65722069732030000000000060448201526064015b60405180910390fd5b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527f37f23baa6a7d1fb1a55c195205c562cf79564602b331961ea8c3a5a2deed99ba91015b60405180910390a1505050565b60ff821660009081526003602090815260408083206001600160a01b03851684529091529020548061057f5760405162461bcd60e51b815260206004820152601c60248201527f44523a206e6f2070656e64696e672066696c74657220757064617465000000006044820152606401610489565b67ffffffffffffffff8116428111156105da5760405162461bcd60e51b815260206004820152601d60248201527f44523a20746f6f206561726c7920746f20636f6e6669726d20617574680000006044820152606401610489565b60ff841660008181526002602090815260408083206001600160a01b0388811680865291845293829020879055815190815286821c9093169183019190915281018390527f8a5ab3077deda9cd003e635672e2b76a9511e7b7e887881e48a1272baa5eae6f9060600160405180910390a2505060ff90911660009081526003602090815260408083206001600160a01b03909416835292905290812055565b6000805b8681101561074557610725898989848181106106a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106be919061113c565b8888858181106106de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106f3919061113c565b87878681811061071357634e487b7160e01b600052603260045260246000fd5b90506020028101906102b49190611425565b61073357600091505061074b565b8061073d816114ae565b91505061067d565b50600190505b979650505050505050565b600061076181611000565b6001600160a01b0382166107b75760405162461bcd60e51b815260206004820152601760248201527f44523a207265676973747279206f776e657220697320300000000000000000006044820152606401610489565b60ff83166000908152600460205260409020546001600160a01b0316156108205760405162461bcd60e51b815260206004820152601660248201527f44523a206475706c6963617465207265676973747279000000000000000000006044820152606401610489565b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db3191016104fe565b8161089a81611000565b60ff831660009081526002602090815260408083206001600160a01b038616845290915290205461090d5760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60ff831660008181526002602090815260408083206001600160a01b03871680855290835281842084905584845260038352818420818552835281842093909355519182527f5585d359d64ad5b95bbb98eb5ea9bae762f70d022015e4887305b1f070d149c4910160405180910390a2505050565b6001600160a01b038516600090815260016020526040812054815b8015806109ab575081811c15155b15610ae757600182821c161515811515148015610ad45760ff821660009081526002602090815260408083206001600160a01b038c16845290915290205467ffffffffffffffff81168015801590610a035750428111155b15610ad157604082901c6001600160a01b0381161580610abb57506040517fe0274e1d0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063e0274e1d90610a6b908f908f908f908f908f906004016113d2565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb91906112d3565b15610acf5760019650505050505050610aee565b505b50505b5080610adf816114ae565b91505061099d565b5060009150505b95945050505050565b60ff82166000908152600460205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336000908152600160208190526040909120549060ff841682811c9091161515901515148215158114610be2573360008181526001602081815260409283902060ff891692831b871890558251918252861515908201527ff5ccd7ad3122597a385a39f9a6337dee41076036734cf1a1de45c2893a0191ac910160405180910390a25b50505050565b60005467ffffffffffffffff680100000000000000008204811691600160801b90041615801590610c2d575060005442600160801b90910467ffffffffffffffff1611155b610c795760405162461bcd60e51b815260206004820152601f60248201527f44523a2063616e2774202879657429206368616e67652074696d656c6f636b006044820152606401610489565b600080547fffffffffffffffff0000000000000000000000000000000000000000000000001667ffffffffffffffff83169081179091556040519081527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a150565b82610cf081611000565b60ff841660009081526002602090815260408083206001600160a01b038716845290915290205415610d645760405162461bcd60e51b815260206004820152601660248201527f44523a206461707020616c7265616479206164646564000000000000000000006044820152606401610489565b60008054610d7c9067ffffffffffffffff164261146a565b60ff861660008181526002602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907f4fb13278643ce6c9ced7cdc7fdb7a726ce56f62bb8e985aa634b2c4288672331906060015b60405180910390a25050505050565b6000610e2381611000565b6000805467ffffffffffffffff80851668010000000000000000026fffffffffffffffff00000000000000001983168117909355610e6692811691161742611482565b600080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b67ffffffffffffffff9384160217905560405190831681527ff4b7860684c929835858edd3e43644f73901d2b6e70bd71c83920fff61539bb79060200160405180910390a15050565b82610ee481611000565b60ff841660009081526002602090815260408083206001600160a01b0387168452909152902054610f575760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60008054610f6f9067ffffffffffffffff164261146a565b60ff861660008181526003602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907fea06a73e654a8bf96d06dfbceea17dbb955d1f3e3d508d724c67c8846fa0d55290606001610e09565b60ff81166000908152600460205260409020546001600160a01b0316806110695760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336001600160a01b038216146110c15760405162461bcd60e51b815260206004820152601c60248201527f44523a2073656e64657220213d207265676973747279206f776e6572000000006044820152606401610489565b5050565b80356001600160a01b03811681146110dc57600080fd5b919050565b60008083601f8401126110f2578182fd5b50813567ffffffffffffffff811115611109578182fd5b6020830191508360208260051b850101111561112457600080fd5b9250929050565b803560ff811681146110dc57600080fd5b60006020828403121561114d578081fd5b611156826110c5565b9392505050565b600080600080600060808688031215611174578081fd5b61117d866110c5565b945061118b602087016110c5565b9350611199604087016110c5565b9250606086013567ffffffffffffffff808211156111b5578283fd5b818801915088601f8301126111c8578283fd5b8135818111156111d6578384fd5b8960208285010111156111e7578384fd5b9699959850939650602001949392505050565b60008060008060008060006080888a031215611214578182fd5b61121d886110c5565b9650602088013567ffffffffffffffff80821115611239578384fd5b6112458b838c016110e1565b909850965060408a013591508082111561125d578384fd5b6112698b838c016110e1565b909650945060608a0135915080821115611281578384fd5b5061128e8a828b016110e1565b989b979a50959850939692959293505050565b600080604083850312156112b3578182fd5b6112bc836110c5565b91506112ca6020840161112b565b90509250929050565b6000602082840312156112e4578081fd5b8151611156816114df565b600060208284031215611300578081fd5b813567ffffffffffffffff81168114611156578182fd5b600060208284031215611328578081fd5b6111568261112b565b60008060408385031215611343578182fd5b61134c8361112b565b91506112ca602084016110c5565b60008060006060848603121561136e578283fd5b6113778461112b565b9250611385602085016110c5565b9150611393604085016110c5565b90509250925092565b600080604083850312156113ae578182fd5b6113b78361112b565b915060208301356113c7816114df565b809150509250929050565b60006001600160a01b038088168352808716602084015280861660408401525060806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b6000808335601e1984360301811261143b578283fd5b83018035915067ffffffffffffffff821115611455578283fd5b60200191503681900382131561112457600080fd5b6000821982111561147d5761147d6114c9565b500190565b600067ffffffffffffffff8083168185168083038211156114a5576114a56114c9565b01949350505050565b60006000198214156114c2576114c26114c9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146114ed57600080fd5b5056fea2646970667358221220edd1177b8fcebe58bbb819769b98378328e6cb14f39ebaf58b34a4d910ea4a5c64736f6c634300080300330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80636dd2ee2d116100cd5780639451881911610081578063cbe0afaa11610066578063cbe0afaa14610386578063ecd08dba14610399578063fcc6983e146103b95761016c565b80639451881914610360578063b0e8b8a6146103735761016c565b806387f4415f116100b257806387f4415f1461031a5780638aa6e8de146103455780638c6f896a146103585761016c565b80636dd2ee2d146102b957806377098290146102fa5761016c565b8063314c51fe116101245780634021291611610109578063402129161461025557806345d62e08146102685780635cfdc4d0146102a65761016c565b8063314c51fe1461020957806332df05601461021c5761016c565b806319a1fa6f1161015557806319a1fa6f146101bf5780632a42be54146101d25780632ecaf675146101f55761016c565b806305424669146101715780630ee981f214610186575b600080fd5b61018461017f366004611331565b61042d565b005b6000546101a190600160801b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6101846101cd366004611331565b61050b565b6101e56101e03660046111fa565b610679565b60405190151581526020016101b6565b6000546101a19067ffffffffffffffff1681565b610184610217366004611331565b610756565b61024761022a366004611331565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101b6565b610184610263366004611331565b610890565b6101e56102763660046112a1565b6001600160a01b039190911660009081526001602081905260409091205460ff90921691821c1615159015151490565b6101e56102b436600461115d565b610982565b6102e26102c7366004611317565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b61024761030836600461113c565b60016020526000908152604090205481565b610247610328366004611331565b600360209081526000928352604080842090915290825290205481565b61018461035336600461139c565b610af7565b610184610be8565b61018461036e36600461135a565b610ce6565b6101846103813660046112ef565b610e18565b61018461039436600461135a565b610eda565b6000546101a19068010000000000000000900467ffffffffffffffff1681565b6104056103c7366004611331565b60ff90911660009081526002602090815260408083206001600160a01b039094168352929052819020549081901c9167ffffffffffffffff90911690565b604080516001600160a01b03909316835267ffffffffffffffff9091166020830152016101b6565b8161043781611000565b6001600160a01b0382166104925760405162461bcd60e51b815260206004820152601b60248201527f44523a206e6577207265676973747279206f776e65722069732030000000000060448201526064015b60405180910390fd5b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527f37f23baa6a7d1fb1a55c195205c562cf79564602b331961ea8c3a5a2deed99ba91015b60405180910390a1505050565b60ff821660009081526003602090815260408083206001600160a01b03851684529091529020548061057f5760405162461bcd60e51b815260206004820152601c60248201527f44523a206e6f2070656e64696e672066696c74657220757064617465000000006044820152606401610489565b67ffffffffffffffff8116428111156105da5760405162461bcd60e51b815260206004820152601d60248201527f44523a20746f6f206561726c7920746f20636f6e6669726d20617574680000006044820152606401610489565b60ff841660008181526002602090815260408083206001600160a01b0388811680865291845293829020879055815190815286821c9093169183019190915281018390527f8a5ab3077deda9cd003e635672e2b76a9511e7b7e887881e48a1272baa5eae6f9060600160405180910390a2505060ff90911660009081526003602090815260408083206001600160a01b03909416835292905290812055565b6000805b8681101561074557610725898989848181106106a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106be919061113c565b8888858181106106de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106f3919061113c565b87878681811061071357634e487b7160e01b600052603260045260246000fd5b90506020028101906102b49190611425565b61073357600091505061074b565b8061073d816114ae565b91505061067d565b50600190505b979650505050505050565b600061076181611000565b6001600160a01b0382166107b75760405162461bcd60e51b815260206004820152601760248201527f44523a207265676973747279206f776e657220697320300000000000000000006044820152606401610489565b60ff83166000908152600460205260409020546001600160a01b0316156108205760405162461bcd60e51b815260206004820152601660248201527f44523a206475706c6963617465207265676973747279000000000000000000006044820152606401610489565b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db3191016104fe565b8161089a81611000565b60ff831660009081526002602090815260408083206001600160a01b038616845290915290205461090d5760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60ff831660008181526002602090815260408083206001600160a01b03871680855290835281842084905584845260038352818420818552835281842093909355519182527f5585d359d64ad5b95bbb98eb5ea9bae762f70d022015e4887305b1f070d149c4910160405180910390a2505050565b6001600160a01b038516600090815260016020526040812054815b8015806109ab575081811c15155b15610ae757600182821c161515811515148015610ad45760ff821660009081526002602090815260408083206001600160a01b038c16845290915290205467ffffffffffffffff81168015801590610a035750428111155b15610ad157604082901c6001600160a01b0381161580610abb57506040517fe0274e1d0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063e0274e1d90610a6b908f908f908f908f908f906004016113d2565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb91906112d3565b15610acf5760019650505050505050610aee565b505b50505b5080610adf816114ae565b91505061099d565b5060009150505b95945050505050565b60ff82166000908152600460205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336000908152600160208190526040909120549060ff841682811c9091161515901515148215158114610be2573360008181526001602081815260409283902060ff891692831b871890558251918252861515908201527ff5ccd7ad3122597a385a39f9a6337dee41076036734cf1a1de45c2893a0191ac910160405180910390a25b50505050565b60005467ffffffffffffffff680100000000000000008204811691600160801b90041615801590610c2d575060005442600160801b90910467ffffffffffffffff1611155b610c795760405162461bcd60e51b815260206004820152601f60248201527f44523a2063616e2774202879657429206368616e67652074696d656c6f636b006044820152606401610489565b600080547fffffffffffffffff0000000000000000000000000000000000000000000000001667ffffffffffffffff83169081179091556040519081527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a150565b82610cf081611000565b60ff841660009081526002602090815260408083206001600160a01b038716845290915290205415610d645760405162461bcd60e51b815260206004820152601660248201527f44523a206461707020616c7265616479206164646564000000000000000000006044820152606401610489565b60008054610d7c9067ffffffffffffffff164261146a565b60ff861660008181526002602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907f4fb13278643ce6c9ced7cdc7fdb7a726ce56f62bb8e985aa634b2c4288672331906060015b60405180910390a25050505050565b6000610e2381611000565b6000805467ffffffffffffffff80851668010000000000000000026fffffffffffffffff00000000000000001983168117909355610e6692811691161742611482565b600080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b67ffffffffffffffff9384160217905560405190831681527ff4b7860684c929835858edd3e43644f73901d2b6e70bd71c83920fff61539bb79060200160405180910390a15050565b82610ee481611000565b60ff841660009081526002602090815260408083206001600160a01b0387168452909152902054610f575760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60008054610f6f9067ffffffffffffffff164261146a565b60ff861660008181526003602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907fea06a73e654a8bf96d06dfbceea17dbb955d1f3e3d508d724c67c8846fa0d55290606001610e09565b60ff81166000908152600460205260409020546001600160a01b0316806110695760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336001600160a01b038216146110c15760405162461bcd60e51b815260206004820152601c60248201527f44523a2073656e64657220213d207265676973747279206f776e6572000000006044820152606401610489565b5050565b80356001600160a01b03811681146110dc57600080fd5b919050565b60008083601f8401126110f2578182fd5b50813567ffffffffffffffff811115611109578182fd5b6020830191508360208260051b850101111561112457600080fd5b9250929050565b803560ff811681146110dc57600080fd5b60006020828403121561114d578081fd5b611156826110c5565b9392505050565b600080600080600060808688031215611174578081fd5b61117d866110c5565b945061118b602087016110c5565b9350611199604087016110c5565b9250606086013567ffffffffffffffff808211156111b5578283fd5b818801915088601f8301126111c8578283fd5b8135818111156111d6578384fd5b8960208285010111156111e7578384fd5b9699959850939650602001949392505050565b60008060008060008060006080888a031215611214578182fd5b61121d886110c5565b9650602088013567ffffffffffffffff80821115611239578384fd5b6112458b838c016110e1565b909850965060408a013591508082111561125d578384fd5b6112698b838c016110e1565b909650945060608a0135915080821115611281578384fd5b5061128e8a828b016110e1565b989b979a50959850939692959293505050565b600080604083850312156112b3578182fd5b6112bc836110c5565b91506112ca6020840161112b565b90509250929050565b6000602082840312156112e4578081fd5b8151611156816114df565b600060208284031215611300578081fd5b813567ffffffffffffffff81168114611156578182fd5b600060208284031215611328578081fd5b6111568261112b565b60008060408385031215611343578182fd5b61134c8361112b565b91506112ca602084016110c5565b60008060006060848603121561136e578283fd5b6113778461112b565b9250611385602085016110c5565b9150611393604085016110c5565b90509250925092565b600080604083850312156113ae578182fd5b6113b78361112b565b915060208301356113c7816114df565b809150509250929050565b60006001600160a01b038088168352808716602084015280861660408401525060806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b6000808335601e1984360301811261143b578283fd5b83018035915067ffffffffffffffff821115611455578283fd5b60200191503681900382131561112457600080fd5b6000821982111561147d5761147d6114c9565b500190565b600067ffffffffffffffff8083168185168083038211156114a5576114a56114c9565b01949350505050565b60006000198214156114c2576114c26114c9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146114ed57600080fd5b5056fea2646970667358221220edd1177b8fcebe58bbb819769b98378328e6cb14f39ebaf58b34a4d910ea4a5c64736f6c63430008030033

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _timelockPeriod (uint64): 0

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


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.