Scroll Sepolia Testnet

Contract

0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d
Source Code Source Code

Overview

ETH Balance

Scroll Sepolia LogoScroll Sepolia LogoScroll Sepolia Logo0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Self Kiss115523682025-08-14 8:23:14163 days ago1755159794IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011070.0156801
Self Kiss115520372025-08-14 8:00:34163 days ago1755158434IN
0x0Dcc1965...5f56EA37d
0 ETH0.000006230.0156801
Self Kiss115520282025-08-14 8:00:00163 days ago1755158400IN
0x0Dcc1965...5f56EA37d
0 ETH0.000015730.0156801
Self Kiss115520042025-08-14 7:58:34163 days ago1755158314IN
0x0Dcc1965...5f56EA37d
0 ETH0.000015810.0156801
Support77961212025-01-08 14:03:30381 days ago1736345010IN
0x0Dcc1965...5f56EA37d
0 ETH0.000007820.04238126
Support77959482025-01-08 13:44:00381 days ago1736343840IN
0x0Dcc1965...5f56EA37d
0 ETH0.000009130.04338658
Support77951972025-01-08 12:06:54381 days ago1736338014IN
0x0Dcc1965...5f56EA37d
0 ETH0.000007540.04218568
Support77945672025-01-08 10:42:50381 days ago1736332970IN
0x0Dcc1965...5f56EA37d
0 ETH0.000009290.04340296
Support75398082024-12-13 15:00:50407 days ago1734102050IN
0x0Dcc1965...5f56EA37d
0 ETH0.000009020.04331977
Support75391402024-12-13 13:11:00407 days ago1734095460IN
0x0Dcc1965...5f56EA37d
0 ETH0.000016790.04861239
Support75297472024-12-12 12:02:00408 days ago1734004920IN
0x0Dcc1965...5f56EA37d
0 ETH0.000004260.03990648
Support72867482024-11-14 16:56:42436 days ago1731603402IN
0x0Dcc1965...5f56EA37d
0 ETH0.0032048538.72158301
Support72867202024-11-14 16:54:05436 days ago1731603245IN
0x0Dcc1965...5f56EA37d
0 ETH0.0032049538.72162454
Support72776872024-11-13 15:09:24437 days ago1731510564IN
0x0Dcc1965...5f56EA37d
0 ETH0.003204938.72180613
Support72768052024-11-13 12:51:42437 days ago1731502302IN
0x0Dcc1965...5f56EA37d
0 ETH0.0032048438.72183254
Unsupport72154362024-11-06 10:05:42444 days ago1730887542IN
0x0Dcc1965...5f56EA37d
0 ETH0.000006950.13533026
Support72112092024-11-05 23:00:02444 days ago1730847602IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011790.13556494
Support72108372024-11-05 21:51:52444 days ago1730843512IN
0x0Dcc1965...5f56EA37d
0 ETH0.00001520.13700023
Support72090312024-11-05 16:41:12445 days ago1730824872IN
0x0Dcc1965...5f56EA37d
0 ETH0.000013210.13760633
Support72087442024-11-05 15:52:42445 days ago1730821962IN
0x0Dcc1965...5f56EA37d
0 ETH0.000014620.13843478
Support71463682024-10-30 10:38:17451 days ago1730284697IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011970.13780571
Support71463652024-10-30 10:37:57451 days ago1730284677IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011960.13779508
Support71463632024-10-30 10:37:40451 days ago1730284660IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011950.13778878
Support71463622024-10-30 10:37:37451 days ago1730284657IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011950.13778878
Support71463592024-10-30 10:37:20451 days ago1730284640IN
0x0Dcc1965...5f56EA37d
0 ETH0.000011940.13778342
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To Amount
89236182025-04-04 13:44:34295 days ago1743774274
0x0Dcc1965...5f56EA37d
0 ETH
77961212025-01-08 14:03:30381 days ago1736345010
0x0Dcc1965...5f56EA37d
0 ETH
77959482025-01-08 13:44:00381 days ago1736343840
0x0Dcc1965...5f56EA37d
0 ETH
77951972025-01-08 12:06:54381 days ago1736338014
0x0Dcc1965...5f56EA37d
0 ETH
77945672025-01-08 10:42:50381 days ago1736332970
0x0Dcc1965...5f56EA37d
0 ETH
75398082024-12-13 15:00:50407 days ago1734102050
0x0Dcc1965...5f56EA37d
0 ETH
75391402024-12-13 13:11:00407 days ago1734095460
0x0Dcc1965...5f56EA37d
0 ETH
75297472024-12-12 12:02:00408 days ago1734004920
0x0Dcc1965...5f56EA37d
0 ETH
73068742024-11-16 23:14:27433 days ago1731798867
0x0Dcc1965...5f56EA37d
0 ETH
73068742024-11-16 23:14:27433 days ago1731798867
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73014022024-11-16 7:55:25434 days ago1731743725
0x0Dcc1965...5f56EA37d
0 ETH
73002202024-11-16 4:52:32434 days ago1731732752
0x0Dcc1965...5f56EA37d
0 ETH
73002202024-11-16 4:52:32434 days ago1731732752
0x0Dcc1965...5f56EA37d
0 ETH
72867482024-11-14 16:56:42436 days ago1731603402
0x0Dcc1965...5f56EA37d
0 ETH
72867202024-11-14 16:54:05436 days ago1731603245
0x0Dcc1965...5f56EA37d
0 ETH
72776872024-11-13 15:09:24437 days ago1731510564
0x0Dcc1965...5f56EA37d
0 ETH
72768052024-11-13 12:51:42437 days ago1731502302
0x0Dcc1965...5f56EA37d
0 ETH
72112092024-11-05 23:00:02444 days ago1730847602
0x0Dcc1965...5f56EA37d
0 ETH
72108372024-11-05 21:51:52444 days ago1730843512
0x0Dcc1965...5f56EA37d
0 ETH
72090312024-11-05 16:41:12445 days ago1730824872
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)

// 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) {}
}

// 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);
}

// 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];
    }
}

// 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);
}

// 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

API
[{"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
0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d
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.