Scroll Sepolia Testnet

Contract

0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d

Overview

ETH Balance

Scroll Sepolia LogoScroll Sepolia LogoScroll Sepolia Logo0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Support68509562024-10-03 13:35:402 days ago1727962540IN
0x0Dcc1965...5f56EA37d
0 ETH0.000348033.66808969
Support67579502024-09-26 15:01:089 days ago1727362868IN
0x0Dcc1965...5f56EA37d
0 ETH0.000260341.75200971
Rely67578502024-09-26 14:54:169 days ago1727362456IN
0x0Dcc1965...5f56EA37d
0 ETH0.000412544.32494308
Support49901272024-06-27 8:47:22100 days ago1719478042IN
0x0Dcc1965...5f56EA37d
0 ETH0.000681468
Rely33364342024-03-19 12:27:29200 days ago1710851249IN
0x0Dcc1965...5f56EA37d
0 ETH0.03757659500
Self Kiss29476222024-02-07 18:02:14241 days ago1707328934IN
0x0Dcc1965...5f56EA37d
0 ETH0.000744988.41787325
Self Kiss29475802024-02-07 17:50:09241 days ago1707328209IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754548.41787325
Self Kiss29475792024-02-07 17:50:00241 days ago1707328200IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754548.41787325
Self Kiss29475782024-02-07 17:49:51241 days ago1707328191IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754548.41787325
Self Kiss29475772024-02-07 17:49:42241 days ago1707328182IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754548.41787325
Self Kiss29475762024-02-07 17:49:33241 days ago1707328173IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754548.41787325
Self Kiss29475742024-02-07 17:49:24241 days ago1707328164IN
0x0Dcc1965...5f56EA37d
0 ETH0.000756628.41787325
Self Kiss29475732024-02-07 17:49:15241 days ago1707328155IN
0x0Dcc1965...5f56EA37d
0 ETH0.000756628.41787325
Self Kiss29475722024-02-07 17:49:09241 days ago1707328149IN
0x0Dcc1965...5f56EA37d
0 ETH0.000756728.41787325
Self Kiss29475712024-02-07 17:49:00241 days ago1707328140IN
0x0Dcc1965...5f56EA37d
0 ETH0.000756728.41787325
Self Kiss29475692024-02-07 17:48:50241 days ago1707328130IN
0x0Dcc1965...5f56EA37d
0 ETH0.000756728.41787325
Self Kiss29475672024-02-07 17:48:41241 days ago1707328121IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475662024-02-07 17:48:32241 days ago1707328112IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754148.41787325
Self Kiss29475642024-02-07 17:48:26241 days ago1707328106IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475632024-02-07 17:48:17241 days ago1707328097IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475622024-02-07 17:48:08241 days ago1707328088IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754048.41787325
Self Kiss29475602024-02-07 17:47:59241 days ago1707328079IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475592024-02-07 17:47:50241 days ago1707328070IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475582024-02-07 17:47:40241 days ago1707328060IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754238.41787325
Self Kiss29475572024-02-07 17:47:34241 days ago1707328054IN
0x0Dcc1965...5f56EA37d
0 ETH0.000754148.41787325
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
68509562024-10-03 13:35:402 days ago1727962540
0x0Dcc1965...5f56EA37d
0 ETH
67579502024-09-26 15:01:089 days ago1727362868
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54709512024-07-14 2:27:1383 days ago1720924033
0x0Dcc1965...5f56EA37d
0 ETH
54606192024-07-13 17:50:3484 days ago1720893034
0x0Dcc1965...5f56EA37d
0 ETH
54606192024-07-13 17:50:3484 days ago1720893034
0x0Dcc1965...5f56EA37d
0 ETH
54606192024-07-13 17:50:3484 days ago1720893034
0x0Dcc1965...5f56EA37d
0 ETH
54606192024-07-13 17:50:3484 days ago1720893034
0x0Dcc1965...5f56EA37d
0 ETH
54605982024-07-13 17:49:3184 days ago1720892971
0x0Dcc1965...5f56EA37d
0 ETH
54605982024-07-13 17:49:3184 days ago1720892971
0x0Dcc1965...5f56EA37d
0 ETH
54605982024-07-13 17:49:3184 days ago1720892971
0x0Dcc1965...5f56EA37d
0 ETH
54605982024-07-13 17:49:3184 days ago1720892971
0x0Dcc1965...5f56EA37d
0 ETH
54601902024-07-13 17:29:0784 days ago1720891747
0x0Dcc1965...5f56EA37d
0 ETH
54601902024-07-13 17:29:0784 days ago1720891747
0x0Dcc1965...5f56EA37d
0 ETH
54601902024-07-13 17:29:0784 days ago1720891747
0x0Dcc1965...5f56EA37d
0 ETH
54601902024-07-13 17:29:0784 days ago1720891747
0x0Dcc1965...5f56EA37d
0 ETH
49901272024-06-27 8:47:22100 days ago1719478042
0x0Dcc1965...5f56EA37d
0 ETH
29476222024-02-07 18:02:14241 days ago1707328934
0x0Dcc1965...5f56EA37d
0 ETH
29475802024-02-07 17:50:09241 days ago1707328209
0x0Dcc1965...5f56EA37d
0 ETH
29475792024-02-07 17:50:00241 days ago1707328200
0x0Dcc1965...5f56EA37d
0 ETH
29475782024-02-07 17:49:51241 days ago1707328191
0x0Dcc1965...5f56EA37d
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SelfKisser_1

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
london EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : SelfKisser.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

import {IAuth} from "chronicle-std/auth/IAuth.sol";
import {Auth} from "chronicle-std/auth/Auth.sol";

import {IToll} from "chronicle-std/toll/IToll.sol";

import {ISelfKisser} from "./ISelfKisser.sol";

contract SelfKisser is ISelfKisser, Auth {
    /// @dev Mapping storing whether address is supported oracle.
    mapping(address => uint) internal _oracles;

    /// @dev List of addresses possibly being supported oracles.
    /// @dev May contain duplicates.
    /// @dev May contain addresses not being supported oracles anymore.
    address[] internal _oraclesTouched;

    /// @dev Whether SelfKisser is dead.
    uint internal _dead;

    modifier live() {
        if (_dead == 1) {
            revert Dead();
        }
        _;
    }

    modifier supported(address oracle) {
        if (_oracles[oracle] == 0) {
            revert OracleNotSupported(oracle);
        }
        _;
    }

    constructor(address initialAuthed) Auth(initialAuthed) {}

    // -- User Functionality --

    /// @inheritdoc ISelfKisser
    function selfKiss(address oracle) external {
        selfKiss(oracle, msg.sender);
    }

    /// @inheritdoc ISelfKisser
    function selfKiss(address oracle, address who)
        public
        live
        supported(oracle)
    {
        IToll(oracle).kiss(who);
        emit SelfKissed(msg.sender, oracle, who);
    }

    // -- View Functionality --

    /// @inheritdoc ISelfKisser
    function oracles(address oracle) external view returns (bool) {
        return _oracles[oracle] == 1;
    }

    /// @inheritdoc ISelfKisser
    function oracles() external view returns (address[] memory) {
        // Initiate array with upper limit length.
        address[] memory oraclesList = new address[](_oraclesTouched.length);

        // Iterate through all possible support oracle.
        uint ctr;
        for (uint i; i < oraclesList.length; i++) {
            // Add address only if still auth'ed.
            if (_oracles[_oraclesTouched[i]] == 1) {
                oraclesList[ctr++] = _oraclesTouched[i];
            }
        }

        // Set length of array to number of oracles actually included.
        assembly ("memory-safe") {
            mstore(oraclesList, ctr)
        }

        return oraclesList;
    }

    /// @inheritdoc ISelfKisser
    function dead() external view returns (bool) {
        return _dead == 1;
    }

    // -- Auth'ed Functionality --

    /// @inheritdoc ISelfKisser
    function support(address oracle) external live auth {
        if (_oracles[oracle] == 1) return;

        require(IAuth(oracle).authed(address(this)));

        _oracles[oracle] = 1;
        _oraclesTouched.push(oracle);
        emit OracleSupported(msg.sender, oracle);
    }

    /// @inheritdoc ISelfKisser
    function unsupport(address oracle) external live auth {
        if (_oracles[oracle] == 0) return;

        _oracles[oracle] = 0;
        emit OracleUnsupported(msg.sender, oracle);
    }

    /// @inheritdoc ISelfKisser
    function kill() external auth {
        if (_dead == 1) return;

        _dead = 1;
        emit Killed(msg.sender);
    }
}

/**
 * @dev Contract overwrite to deploy contract instances with specific naming.
 *
 *      For more info, see docs/Deployment.md.
 */
contract SelfKisser_1 is SelfKisser {
    // @todo        ^^^^^^^ Adjust name of SelfKisser instance.
    constructor(address initialAuthed) SelfKisser(initialAuthed) {}
}

File 2 of 5 : IAuth.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IAuth {
    /// @notice Thrown by protected function if caller not auth'ed.
    /// @param caller The caller's address.
    error NotAuthorized(address caller);

    /// @notice Emitted when auth granted to address.
    /// @param caller The caller's address.
    /// @param who The address auth got granted to.
    event AuthGranted(address indexed caller, address indexed who);

    /// @notice Emitted when auth renounced from address.
    /// @param caller The caller's address.
    /// @param who The address auth got renounced from.
    event AuthRenounced(address indexed caller, address indexed who);

    /// @notice Grants address `who` auth.
    /// @dev Only callable by auth'ed address.
    /// @param who The address to grant auth.
    function rely(address who) external;

    /// @notice Renounces address `who`'s auth.
    /// @dev Only callable by auth'ed address.
    /// @param who The address to renounce auth.
    function deny(address who) external;

    /// @notice Returns whether address `who` is auth'ed.
    /// @param who The address to check.
    /// @return True if `who` is auth'ed, false otherwise.
    function authed(address who) external view returns (bool);

    /// @notice Returns full list of addresses granted auth.
    /// @dev May contain duplicates.
    /// @return List of addresses granted auth.
    function authed() external view returns (address[] memory);

    /// @notice Returns whether address `who` is auth'ed.
    /// @custom:deprecated Use `authed(address)(bool)` instead.
    /// @param who The address to check.
    /// @return 1 if `who` is auth'ed, 0 otherwise.
    function wards(address who) external view returns (uint);
}

File 3 of 5 : Auth.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

import {IAuth} from "./IAuth.sol";

/**
 * @title Auth Module
 *
 * @dev The `Auth` contract module provides a basic access control mechanism,
 *      where a set of addresses are granted access to protected functions.
 *      These addresses are said to be _auth'ed_.
 *
 *      Initially, the address given as constructor argument is the only address
 *      auth'ed. Through the `rely(address)` and `deny(address)` functions,
 *      auth'ed callers are able to grant/renounce auth to/from addresses.
 *
 *      This module is used through inheritance. It will make available the
 *      modifier `auth`, which can be applied to functions to restrict their
 *      use to only auth'ed callers.
 */
abstract contract Auth is IAuth {
    /// @dev Mapping storing whether address is auth'ed.
    /// @custom:invariant Image of mapping is {0, 1}.
    ///                     ∀x ∊ Address: _wards[x] ∊ {0, 1}
    /// @custom:invariant Only address given as constructor argument is authenticated after deployment.
    ///                     deploy(initialAuthed) → (∀x ∊ Address: _wards[x] == 1 → x == initialAuthed)
    /// @custom:invariant Only functions `rely` and `deny` may mutate the mapping's state.
    ///                     ∀x ∊ Address: preTx(_wards[x]) != postTx(_wards[x])
    ///                                     → (msg.sig == "rely" ∨ msg.sig == "deny")
    /// @custom:invariant Mapping's state may only be mutated by authenticated caller.
    ///                     ∀x ∊ Address: preTx(_wards[x]) != postTx(_wards[x]) → _wards[msg.sender] = 1
    mapping(address => uint) private _wards;

    /// @dev List of addresses possibly being auth'ed.
    /// @dev May contain duplicates.
    /// @dev May contain addresses not being auth'ed anymore.
    /// @custom:invariant Every address being auth'ed once is element of the list.
    ///                     ∀x ∊ Address: authed(x) -> x ∊ _wardsTouched
    address[] private _wardsTouched;

    /// @dev Ensures caller is auth'ed.
    modifier auth() {
        assembly ("memory-safe") {
            // Compute slot of _wards[msg.sender].
            mstore(0x00, caller())
            mstore(0x20, _wards.slot)
            let slot := keccak256(0x00, 0x40)

            // Revert if caller not auth'ed.
            let isAuthed := sload(slot)
            if iszero(isAuthed) {
                // Store selector of `NotAuthorized(address)`.
                mstore(0x00, 0x4a0bfec1)
                // Store msg.sender.
                mstore(0x20, caller())
                // Revert with (offset, size).
                revert(0x1c, 0x24)
            }
        }
        _;
    }

    constructor(address initialAuthed) {
        _wards[initialAuthed] = 1;
        _wardsTouched.push(initialAuthed);

        // Note to use address(0) as caller to indicate address was auth'ed
        // during deployment.
        emit AuthGranted(address(0), initialAuthed);
    }

    /// @inheritdoc IAuth
    function rely(address who) external auth {
        if (_wards[who] == 1) return;

        _wards[who] = 1;
        _wardsTouched.push(who);
        emit AuthGranted(msg.sender, who);
    }

    /// @inheritdoc IAuth
    function deny(address who) external auth {
        if (_wards[who] == 0) return;

        _wards[who] = 0;
        emit AuthRenounced(msg.sender, who);
    }

    /// @inheritdoc IAuth
    function authed(address who) public view returns (bool) {
        return _wards[who] == 1;
    }

    /// @inheritdoc IAuth
    /// @custom:invariant Only contains auth'ed addresses.
    ///                     ∀x ∊ authed(): _wards[x] == 1
    /// @custom:invariant Contains all auth'ed addresses.
    ///                     ∀x ∊ Address: _wards[x] == 1 → x ∊ authed()
    function authed() public view returns (address[] memory) {
        // Initiate array with upper limit length.
        address[] memory wardsList = new address[](_wardsTouched.length);

        // Iterate through all possible auth'ed addresses.
        uint ctr;
        for (uint i; i < wardsList.length; i++) {
            // Add address only if still auth'ed.
            if (_wards[_wardsTouched[i]] == 1) {
                wardsList[ctr++] = _wardsTouched[i];
            }
        }

        // Set length of array to number of auth'ed addresses actually included.
        assembly ("memory-safe") {
            mstore(wardsList, ctr)
        }

        return wardsList;
    }

    /// @inheritdoc IAuth
    function wards(address who) public view returns (uint) {
        return _wards[who];
    }
}

File 4 of 5 : IToll.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface IToll {
    /// @notice Thrown by protected function if caller not tolled.
    /// @param caller The caller's address.
    error NotTolled(address caller);

    /// @notice Emitted when toll granted to address.
    /// @param caller The caller's address.
    /// @param who The address toll got granted to.
    event TollGranted(address indexed caller, address indexed who);

    /// @notice Emitted when toll renounced from address.
    /// @param caller The caller's address.
    /// @param who The address toll got renounced from.
    event TollRenounced(address indexed caller, address indexed who);

    /// @notice Grants address `who` toll.
    /// @dev Only callable by auth'ed address.
    /// @param who The address to grant toll.
    function kiss(address who) external;

    /// @notice Renounces address `who`'s toll.
    /// @dev Only callable by auth'ed address.
    /// @param who The address to renounce toll.
    function diss(address who) external;

    /// @notice Returns whether address `who` is tolled.
    /// @param who The address to check.
    /// @return True if `who` is tolled, false otherwise.
    function tolled(address who) external view returns (bool);

    /// @notice Returns full list of addresses tolled.
    /// @dev May contain duplicates.
    /// @return List of addresses tolled.
    function tolled() external view returns (address[] memory);

    /// @notice Returns whether address `who` is tolled.
    /// @custom:deprecated Use `tolled(address)(bool)` instead.
    /// @param who The address to check.
    /// @return 1 if `who` is tolled, 0 otherwise.
    function bud(address who) external view returns (uint);
}

File 5 of 5 : ISelfKisser.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

interface ISelfKisser {
    /// @notice Thrown if SelfKisser dead.
    error Dead();

    /// @notice Thrown if oracle not supported.
    /// @param oracle The oracle not supported.
    error OracleNotSupported(address oracle);

    /// @notice Emitted when SelfKisser killed.
    /// @param caller The caller's address.
    event Killed(address indexed caller);

    /// @notice Emitted when support for oracle added.
    /// @param caller The caller's address.
    /// @param oracle The oracle that support got added.
    event OracleSupported(address indexed caller, address indexed oracle);

    /// @notice Emitted when support for oracle removed.
    /// @param caller The caller's address.
    /// @param oracle The oracle that support got removed.
    event OracleUnsupported(address indexed caller, address indexed oracle);

    /// @notice Emitted when new address kissed on an oracle.
    /// @param caller The caller's address.
    /// @param oracle The oracle on which address `who` got kissed on.
    /// @param who The address that got kissed on oracle `oracle`.
    event SelfKissed(
        address indexed caller, address indexed oracle, address indexed who
    );

    // -- User Functionality --

    /// @notice Kisses caller on oracle `oracle`.
    ///
    /// @dev Reverts if oracle `oracle` not supported.
    /// @dev Reverts if SelfKisser dead.
    ///
    /// @param oracle The oracle to kiss the caller on.
    function selfKiss(address oracle) external;

    /// @notice Kisses address `who` on oracle `oracle`.
    ///
    /// @dev Reverts if oracle `oracle` not supported.
    /// @dev Reverts if SelfKisser dead.
    ///
    /// @param oracle The oracle to kiss address `who` on.
    /// @param who The address to kiss on oracle `oracle`.
    function selfKiss(address oracle, address who) external;

    // -- View Functionality --

    /// @notice Returns whether oracle `oracle` is supported.
    /// @param oracle The oracle to check whether its supported.
    /// @return True if oracle supported, false otherwise.
    function oracles(address oracle) external view returns (bool);

    /// @notice Returns the list of supported oracles.
    ///
    /// @dev May contain duplicates.
    ///
    /// @return List of supported oracles.
    function oracles() external view returns (address[] memory);

    /// @notice Returns whether SelfKisser is dead.
    /// @return True if SelfKisser dead, false otherwise.
    function dead() external view returns (bool);

    // -- Auth'ed Functionality --

    /// @notice Adds support for oracle `oracle`.
    /// @dev Only callable by auth'ed address.
    ///
    /// @dev Reverts if SelfKisser not auth'ed on oracle `oracle`.
    /// @dev Reverts if SelfKisser dead.
    ///
    /// @param oracle The oracle to add support for.
    function support(address oracle) external;

    /// @notice Removes support for oracle `oracle`.
    /// @dev Only callable by auth'ed address.
    ///
    /// @dev Reverts if SelfKisser dead.
    ///
    /// @param oracle The oracle to remove support for.
    function unsupport(address oracle) external;

    /// @notice Kills the contract.
    /// @dev Only callable by auth'ed address.
    function kill() external;
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "chronicle-std/=lib/chronicle-std/src/",
    "@script/chronicle-std/=lib/chronicle-std/script/",
    "lib/chronicle-std:src/=lib/chronicle-std/src/",
    "lib/chronicle-std:ds-test/=lib/chronicle-std/lib/forge-std/lib/ds-test/src/",
    "lib/chronicle-std:forge-std/=lib/chronicle-std/lib/forge-std/src/",
    "greenhouse/=lib/greenhouse/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": true,
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialAuthed","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Dead","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NotAuthorized","type":"error"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"OracleNotSupported","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"}],"name":"AuthGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"}],"name":"AuthRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"Killed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"OracleSupported","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"OracleUnsupported","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"}],"name":"SelfKissed","type":"event"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authed","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracles","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"oracles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"address","name":"who","type":"address"}],"name":"selfKiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"selfKiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"support","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"}],"name":"unsupport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60803461011757601f610dc138819003918201601f19168301916001600160401b0383118484101761011c5780849260209460405283398101031261011757516001600160a01b03811690819003610117576000908082528160205260016040832055600154680100000000000000008110156101035760018101806001558110156100ef57600183527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191682179055604051917fe31c10b0adbedd0c6e5d024286c6eeead7761e65a67608dcf0b67604c0da7e2f8184a3610c8e90816101338239f35b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b83526041600452602483fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604081815260048036101561001557600080fd5b600092833560e01c9081630fce3415146106ac57508063224242ca146105eb5780632857373a1461053a57806336cf7c87146105165780633fc9d621146104d857806341c0e1b51461049d578063622920e71461035857806365fae35e146103245780639c52a7f1146102f0578063addd5099146102a9578063bf353dbb14610266578063c529a6791461012e5763e660cc08146100b257600080fd5b3461012a57602060031936011261012a576100cb6106f0565b90600181541461010357503383528260205281832054156100f2576100ef90610a89565b51f35b634a0bfec18352336020526024601cfd5b82517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b50903461012a57602060031936011261012a576101496106f0565b600183541461023f5773ffffffffffffffffffffffffffffffffffffffff169182845260026020528184205415610211578390833b1561020d578251907ff29c29c40000000000000000000000000000000000000000000000000000000082523390820152818160248183885af18015610203576101ef575b505051903390337f3b6e7e6ff858d016edf22112c8596ecf8f0a55591a3b84c35b993e0de85a0c848585a4f35b6101f89061092e565b61012a5782386101c2565b83513d84823e3d90fd5b5080fd5b8260249251917f780e2f9b000000000000000000000000000000000000000000000000000000008352820152fd5b50517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b50503461020d57602060031936011261020d578060209273ffffffffffffffffffffffffffffffffffffffff61029a6106f0565b16815280845220549051908152f35b50503461020d57602060031936011261020d5760018160209373ffffffffffffffffffffffffffffffffffffffff6102df6106f0565b168152600285522054149051908152f35b50503461020d57602060031936011261020d5761030b6106f0565b3383528260205281832054156100f2576100ef906108d2565b50503461020d57602060031936011261020d5761033f6106f0565b3383528260205281832054156100f2576100ef90610806565b50903461012a578060031936011261012a576103726106f0565b906024359173ffffffffffffffffffffffffffffffffffffffff908184168094036104995760018554146104715716928385526002602052818520541561044357833b1561043f57828251917ff29c29c4000000000000000000000000000000000000000000000000000000008352820152848160248183885af1801561043557610422575b505191337f3b6e7e6ff858d016edf22112c8596ecf8f0a55591a3b84c35b993e0de85a0c848585a4f35b61042e9094919461092e565b92386103f8565b82513d87823e3d90fd5b8480fd5b8360249251917f780e2f9b000000000000000000000000000000000000000000000000000000008352820152fd5b8483517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b8580fd5b50503461020d578160031936011261020d573382528160205280822054156104c7576100ef610c1d565b634a0bfec18252336020526024601cfd5b503461012a57602060031936011261012a576104f26106f0565b90600181541461010357503383528260205281832054156100f2576100ef90610bbf565b50913461053757806003193601126105375750600160209254149051908152f35b80fd5b828434610537578060031936011261053757600361055881546109ca565b9082835b83518110156105d757806105726105a8926107cf565b905473ffffffffffffffffffffffffffffffffffffffff91861b1c811687526002602052878720546001146105ad575b50610a19565b61055c565b6105b6826107cf565b905490861b1c166105d06105c985610a19565b9487610a75565b52876105a2565b8184528551806105e78682610718565b0390f35b82843461053757806003193601126105375760019161060a83546109ca565b918080855b610627575b50506105e7935082525191829182610718565b84518110156106a757906106768261063f8894610769565b73ffffffffffffffffffffffffffffffffffffffff809254600392831b1c1685528460205285888620541461067d575b5050610a19565b909161060f565b61068683610769565b9054911b1c1661069f61069887610a19565b9689610a75565b52888061066f565b610614565b8490843461012a57602060031936011261012a5760019060209373ffffffffffffffffffffffffffffffffffffffff6106e36106f0565b1681528085522054148152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361071357565b600080fd5b6020908160408183019282815285518094520193019160005b82811061073f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101610731565b6001548110156107a05760016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6003548110156107a05760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b73ffffffffffffffffffffffffffffffffffffffff809116906000908282528160205260016040832054146108cd5760016040832055600154680100000000000000008110156108a057610861816001869301600155610769565b909283549160031b90811b9283911b169119161790557fe31c10b0adbedd0c6e5d024286c6eeead7761e65a67608dcf0b67604c0da7e2f3391604051a3565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b505050565b73ffffffffffffffffffffffffffffffffffffffff1660008181528060205260408120541561092a578060408120557f58466e5837b54e559819c9ba8a5d7c77c97c985d1aabf4bdc5f41069fa5d65a03391604051a3565b5050565b67ffffffffffffffff811161094257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094257604052565b67ffffffffffffffff81116109425760051b60200190565b906109d4826109b2565b6109e16040519182610971565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610a0f82946109b2565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80518210156107a05760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff809116906000908282526020600281526001604084205414610bb9576040517f0fce34150000000000000000000000000000000000000000000000000000000081523060048201528181602481885afa908115610bae578491610b74575b501561012a576002908484525260016040832055600354680100000000000000008110156108a057610b358160018693016003556107cf565b909283549160031b90811b9283911b169119161790557ff9a6af7aa3879f5a9964b1481b22056157ddbb8925898017746cfbeed83e441a3391604051a3565b90508181813d8311610ba7575b610b8b8183610971565b81010312610ba357518015158103610ba35738610afc565b8380fd5b503d610b81565b6040513d86823e3d90fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff1680600052600260205260406000205415610c1a5760006040812055337fbb48b0c0bb76b83499fed9cde51f300f35b5a5d5e0576acc2a3ebf1481dcf22a6000604051a3565b50565b600160045414610c56576001600455337f4b0bc4f25f8d0b92d2e12b686ba96cd75e4e69325e6cf7b1f3119d14eaf2cbdf6000604051a2565b56fea2646970667358221220211972534154f6714e338b12ee30c3cbc797b2f8daed83baca6dd096af2f4eb764736f6c6343000810003300000000000000000000000039abd7819e5632fa06d2ecbba45dca5c90687ee3

Deployed Bytecode

0x6080604081815260048036101561001557600080fd5b600092833560e01c9081630fce3415146106ac57508063224242ca146105eb5780632857373a1461053a57806336cf7c87146105165780633fc9d621146104d857806341c0e1b51461049d578063622920e71461035857806365fae35e146103245780639c52a7f1146102f0578063addd5099146102a9578063bf353dbb14610266578063c529a6791461012e5763e660cc08146100b257600080fd5b3461012a57602060031936011261012a576100cb6106f0565b90600181541461010357503383528260205281832054156100f2576100ef90610a89565b51f35b634a0bfec18352336020526024601cfd5b82517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b50903461012a57602060031936011261012a576101496106f0565b600183541461023f5773ffffffffffffffffffffffffffffffffffffffff169182845260026020528184205415610211578390833b1561020d578251907ff29c29c40000000000000000000000000000000000000000000000000000000082523390820152818160248183885af18015610203576101ef575b505051903390337f3b6e7e6ff858d016edf22112c8596ecf8f0a55591a3b84c35b993e0de85a0c848585a4f35b6101f89061092e565b61012a5782386101c2565b83513d84823e3d90fd5b5080fd5b8260249251917f780e2f9b000000000000000000000000000000000000000000000000000000008352820152fd5b50517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b50503461020d57602060031936011261020d578060209273ffffffffffffffffffffffffffffffffffffffff61029a6106f0565b16815280845220549051908152f35b50503461020d57602060031936011261020d5760018160209373ffffffffffffffffffffffffffffffffffffffff6102df6106f0565b168152600285522054149051908152f35b50503461020d57602060031936011261020d5761030b6106f0565b3383528260205281832054156100f2576100ef906108d2565b50503461020d57602060031936011261020d5761033f6106f0565b3383528260205281832054156100f2576100ef90610806565b50903461012a578060031936011261012a576103726106f0565b906024359173ffffffffffffffffffffffffffffffffffffffff908184168094036104995760018554146104715716928385526002602052818520541561044357833b1561043f57828251917ff29c29c4000000000000000000000000000000000000000000000000000000008352820152848160248183885af1801561043557610422575b505191337f3b6e7e6ff858d016edf22112c8596ecf8f0a55591a3b84c35b993e0de85a0c848585a4f35b61042e9094919461092e565b92386103f8565b82513d87823e3d90fd5b8480fd5b8360249251917f780e2f9b000000000000000000000000000000000000000000000000000000008352820152fd5b8483517f82c4767b000000000000000000000000000000000000000000000000000000008152fd5b8580fd5b50503461020d578160031936011261020d573382528160205280822054156104c7576100ef610c1d565b634a0bfec18252336020526024601cfd5b503461012a57602060031936011261012a576104f26106f0565b90600181541461010357503383528260205281832054156100f2576100ef90610bbf565b50913461053757806003193601126105375750600160209254149051908152f35b80fd5b828434610537578060031936011261053757600361055881546109ca565b9082835b83518110156105d757806105726105a8926107cf565b905473ffffffffffffffffffffffffffffffffffffffff91861b1c811687526002602052878720546001146105ad575b50610a19565b61055c565b6105b6826107cf565b905490861b1c166105d06105c985610a19565b9487610a75565b52876105a2565b8184528551806105e78682610718565b0390f35b82843461053757806003193601126105375760019161060a83546109ca565b918080855b610627575b50506105e7935082525191829182610718565b84518110156106a757906106768261063f8894610769565b73ffffffffffffffffffffffffffffffffffffffff809254600392831b1c1685528460205285888620541461067d575b5050610a19565b909161060f565b61068683610769565b9054911b1c1661069f61069887610a19565b9689610a75565b52888061066f565b610614565b8490843461012a57602060031936011261012a5760019060209373ffffffffffffffffffffffffffffffffffffffff6106e36106f0565b1681528085522054148152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361071357565b600080fd5b6020908160408183019282815285518094520193019160005b82811061073f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101610731565b6001548110156107a05760016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6003548110156107a05760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b73ffffffffffffffffffffffffffffffffffffffff809116906000908282528160205260016040832054146108cd5760016040832055600154680100000000000000008110156108a057610861816001869301600155610769565b909283549160031b90811b9283911b169119161790557fe31c10b0adbedd0c6e5d024286c6eeead7761e65a67608dcf0b67604c0da7e2f3391604051a3565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b505050565b73ffffffffffffffffffffffffffffffffffffffff1660008181528060205260408120541561092a578060408120557f58466e5837b54e559819c9ba8a5d7c77c97c985d1aabf4bdc5f41069fa5d65a03391604051a3565b5050565b67ffffffffffffffff811161094257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094257604052565b67ffffffffffffffff81116109425760051b60200190565b906109d4826109b2565b6109e16040519182610971565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610a0f82946109b2565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a465760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80518210156107a05760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff809116906000908282526020600281526001604084205414610bb9576040517f0fce34150000000000000000000000000000000000000000000000000000000081523060048201528181602481885afa908115610bae578491610b74575b501561012a576002908484525260016040832055600354680100000000000000008110156108a057610b358160018693016003556107cf565b909283549160031b90811b9283911b169119161790557ff9a6af7aa3879f5a9964b1481b22056157ddbb8925898017746cfbeed83e441a3391604051a3565b90508181813d8311610ba7575b610b8b8183610971565b81010312610ba357518015158103610ba35738610afc565b8380fd5b503d610b81565b6040513d86823e3d90fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff1680600052600260205260406000205415610c1a5760006040812055337fbb48b0c0bb76b83499fed9cde51f300f35b5a5d5e0576acc2a3ebf1481dcf22a6000604051a3565b50565b600160045414610c56576001600455337f4b0bc4f25f8d0b92d2e12b686ba96cd75e4e69325e6cf7b1f3119d14eaf2cbdf6000604051a2565b56fea2646970667358221220211972534154f6714e338b12ee30c3cbc797b2f8daed83baca6dd096af2f4eb764736f6c63430008100033

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

00000000000000000000000039abd7819e5632fa06d2ecbba45dca5c90687ee3

-----Decoded View---------------
Arg [0] : initialAuthed (address): 0x39aBD7819E5632Fa06D2ECBba45Dca5c90687EE3

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


Block Transaction Gas Used Reward
view all blocks sequenced

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
[ 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.