Contract 0xc1303bbbaf172c55848d3cb91606d8e27ff38428 4

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x05005c5b0457f931ab5fe54985ce0e0dbec059802db5093bcb1de90b4fdffb44Update Status166071522022-06-30 12:19:2187 days 20 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x583cd53c2e59c57cb538176f41a69bd87a5786cb647e273894358890c486d13eUpdate Status166071522022-06-30 12:19:2187 days 20 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x20688c04efa37585fb319d5f8a182ac77c4614324312f532214995ed54ae9163Update Status166056142022-06-30 12:00:4187 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xa791f1b7ecee0e138215a8443ce30fb980006165acff441751379e5d23e39afdUpdate Status166056142022-06-30 12:00:4187 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x44e3c720b0475828e8bc824eb9cb508f515eb6d6d85da941f257f373607930f7Update Status166033332022-06-30 11:35:3587 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x0f9f4e10424f3927ae140d13c8a073edd18dd36d1779430da9adb8bd5d5a2fdaUpdate Status166030502022-06-30 11:34:1687 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x68a74d244840e6c85d8f5a058aa458cbe42a3b6d67ce34c9fd0472573464cc2dUpdate Status166003132022-06-30 11:06:1787 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x4e1b333373b28842136834954fe6c1454399f15603a9bbbe1ce1cda47c8b941cUpdate Status166003132022-06-30 11:06:1787 days 21 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xa1df21e3321ab5f54cf7856ba29a68698a14996844856c11dcefcc4f3ddcc3caUpdate Status154593892022-06-23 3:37:0495 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xd6c7cf71e54f3958304db526c3cd73b5572253b23ea851f6814c98200dc2d25dUpdate Status154593892022-06-23 3:37:0495 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x670b0094dcbe0639571e511739babe001f5db34800346871148c5f3018664028Update Status107746322022-04-28 23:13:43150 days 9 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x7e5d68b36c38d363709c1529e900d3a82f5fc3873bab846d2b1ed6a3a35815b9Update Status107744592022-04-28 22:48:41150 days 10 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xfac6f5894a9359822ae466b3d888b956384a6d5eebf8a80742c25c5b48ec903cUpdate Status84575532022-03-24 3:54:41186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xbd575f567883755baf10f5e242d5cbbcfa5e949a0d927c9874ebe6227dda6181Update Status84571022022-03-24 3:46:48186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x192b5cf20e37977e2e038a24a042c0bf96841ac92fa6728bff82279aaa71dc48Update Status84570992022-03-24 3:43:44186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x8fa33a005cf70144b4caab0dcbff276f72f04b39825861ea5134c4f3ce8a4ad7Update Status84570982022-03-24 3:41:05186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xbf387dea430f66e9e258c39a7be59a85b243f6d53b1f6c74d5268d785359dd51Update Status84570862022-03-24 3:27:14186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xb6b8200250b6bd3ce3b7133a2d040cfe937524b658b1680ac0252499f13a55ebUpdate Status84570832022-03-24 3:26:26186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x887e660aeb46f4dea47096225a7515228d1ee292b5f7495aa67c7a233192225aUpdate Status84570772022-03-24 3:19:44186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x95b6df101d739d31083817a0f31240e32e32d51fefe291f103c46a5e8c21370cUpdate Status84570762022-03-24 3:19:13186 days 5 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0x661a21846dec75aa6b378b7e49d9691b798e6abcee1692daa73263b99dc76d4fTransfer Ownersh...76919842022-03-10 12:15:41199 days 20 hrs ago0x71c05a4ea5e9d5b1ac87bf962a043f5265d4bdc8 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0.000157815711 ETH
0x35cff926ba1583b05456ab5cc441d531b671486b2e8e4a1f3da368060d35ab1aUpdate Status75918382022-03-08 18:06:04201 days 14 hrs ago0x42a92c9e5edd99bb923a948252167ea4bbc39bd2 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0 ETH
0xa3303656a22dd9ccc2d8c3985f4707f9f0bc34ef4f8ad79195f86c21d077a563Initialize75901522022-03-08 17:53:59201 days 15 hrs ago0x71c05a4ea5e9d5b1ac87bf962a043f5265d4bdc8 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0.000198981747 ETH
0x6e49339f4f3c14ef5a006c7f2d6339bea8fb810ec86f2948a6c1ca1048ad644cAdd Access75746072022-03-08 15:37:29201 days 17 hrs ago0x71c05a4ea5e9d5b1ac87bf962a043f5265d4bdc8 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0.000187148362 ETH
0x5800fa6ba1ae57cfeb5a620d87fb6ecb5818934e3e447bc19493c3ffbece912dTransfer L1Sende...74019662022-03-04 13:12:17205 days 19 hrs ago0x71c05a4ea5e9d5b1ac87bf962a043f5265d4bdc8 IN  0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH0.000227868647 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0dae05f9557b62e638e30614e225d1e1e97eab06ede232f71c4c67da540bac45267692172022-09-26 8:59:474 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xcaffd4f69c01cc6941d8c13b45a37902ed240c6b7d16a04247c252ef0d72ccdb267672242022-09-26 8:50:4813 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x5d31eedc522c90114212391237e8bdca6b97e154a8a01f7358113339b0c666d7267669992022-09-26 8:49:4514 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x88f004d1bbaee1c51a0d393e9e9f2f20e4d77adaa148d934eba8daefdc9b64c4267665932022-09-26 8:47:4616 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x69db4537cd88ade5f35b079dd759be05a6506dc6ad2612a677084154863bff81267649682022-09-26 8:39:4824 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xa61cf813560b0b04c0da8a397d6267069bc2f329633dd885489aa7334efae0a8267644552022-09-26 8:37:0826 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xc4171f37a1d8d419bd5d5761ba0f08e6302e29c3896bcda4ee97d3a5825ae8a7267611432022-09-26 8:22:1541 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xfe952c6b8b0029a9e190f40ea125249e102fafb21eed0366c0ccf3829e31b2f9267608092022-09-26 8:20:5042 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xe68480b3cf2ce28e262c120fb9e232b05f77d665a95fd44a12c48b53ba9c530c267598482022-09-26 8:16:5446 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xd9fbd796ece887808f8a7eda475979b0cc032c8b3ec3ce9d722132d0c5e988dc267560872022-09-26 8:00:501 hr 2 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x9a2fb7a110d15fc5043f5e1fcac067142c1dacade8b674d843a385edafcc8b98267554462022-09-26 7:57:581 hr 5 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x7959cde37aad1fb6f9f8116e100538a72b8f71517c386231ec344f0c68affb9c267554082022-09-26 7:57:501 hr 5 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xf695b24cf70b3b40951eb921b7e7c6c549ca81dbe8b9e477e754c735053d7c90267549612022-09-26 7:55:521 hr 7 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x6485482750c0f46cf926b481b1826bbb1c0947cae00e0544cbb6d04f20469024267546962022-09-26 7:54:431 hr 9 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x29831973c090aab8684c085e92478f792f0d01fa1a136a3f4c367257effbb3ef267537472022-09-26 7:50:241 hr 13 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x308860e0946afde85f0e7c6a8e4d3fc7930c36c80adc45ca5322dcb397925f82267532732022-09-26 7:48:111 hr 15 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x346ee529d3d557e8b011a7bb18e0c0fdaefb9f76b3256d17dd4d0b6b100e23dd267519702022-09-26 7:42:051 hr 21 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xd68daed4817006296a703b5e39cade5ee1ccb807657a3bfb1bcc6efb2c491989267513442022-09-26 7:38:421 hr 25 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x70e979909c01857e606183203eb210ce997b93bb7cdc95ddfee41cbe4af73489267507942022-09-26 7:35:571 hr 27 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xb409adf1d69b2556563b2738289facddc8823bb28e78c9cae023b7c68adf3473267489762022-09-26 7:27:261 hr 36 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xebd69f5b77fb56563e50116506073d5ed0efe2654ee6ddd44b39a4e25c65cb81267488632022-09-26 7:26:521 hr 36 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xdbc28911d681e456eaf320a9eaf2c2743cfa9a5175c510b5927a0bb6a9e9cf17267485092022-09-26 7:25:091 hr 38 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0xad2f0cecedbc51e627cb0ebddd474e8c1763dfb28c210f8a48ce6948c61de366267484962022-09-26 7:25:071 hr 38 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x845cd0d47cb2ee9f52fc7045e11f5fa6c800ce82413eca2ce07b1971f98c6833267481002022-09-26 7:23:281 hr 40 mins ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
0x54df2b2b28bd5a011e25c48fd7a78b194f9f09205ff26c0c1ab06059624c20f4267438362022-09-26 7:03:282 hrs ago 0xfdb631f5ee196f0ed6faa767959853a9f217697d 0xc1303bbbaf172c55848d3cb91606d8e27ff384280 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArbitrumSequencerUptimeFeed

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 17 : ConfirmedOwner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ConfirmedOwnerWithProposal.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwner is ConfirmedOwnerWithProposal {
  constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}
}

File 2 of 17 : ConfirmedOwnerWithProposal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./interfaces/OwnableInterface.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwnerWithProposal is OwnableInterface {
  address private s_owner;
  address private s_pendingOwner;

  event OwnershipTransferRequested(address indexed from, address indexed to);
  event OwnershipTransferred(address indexed from, address indexed to);

  constructor(address newOwner, address pendingOwner) {
    require(newOwner != address(0), "Cannot set owner to zero");

    s_owner = newOwner;
    if (pendingOwner != address(0)) {
      _transferOwnership(pendingOwner);
    }
  }

  /**
   * @notice Allows an owner to begin transferring ownership to a new address,
   * pending.
   */
  function transferOwnership(address to) public override onlyOwner {
    _transferOwnership(to);
  }

  /**
   * @notice Allows an ownership transfer to be completed by the recipient.
   */
  function acceptOwnership() external override {
    require(msg.sender == s_pendingOwner, "Must be proposed owner");

    address oldOwner = s_owner;
    s_owner = msg.sender;
    s_pendingOwner = address(0);

    emit OwnershipTransferred(oldOwner, msg.sender);
  }

  /**
   * @notice Get the current owner
   */
  function owner() public view override returns (address) {
    return s_owner;
  }

  /**
   * @notice validate, transfer ownership, and emit relevant events
   */
  function _transferOwnership(address to) private {
    require(to != msg.sender, "Cannot transfer to self");

    s_pendingOwner = to;

    emit OwnershipTransferRequested(s_owner, to);
  }

  /**
   * @notice validate access
   */
  function _validateOwnership() internal view {
    require(msg.sender == s_owner, "Only callable by owner");
  }

  /**
   * @notice Reverts if called by anyone other than the contract owner.
   */
  modifier onlyOwner() {
    _validateOwnership();
    _;
  }
}

File 3 of 17 : OwnableInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface OwnableInterface {
  function owner() external returns (address);

  function transferOwnership(address recipient) external;

  function acceptOwnership() external;
}

File 4 of 17 : SimpleWriteAccessController.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ConfirmedOwner.sol";
import "./interfaces/AccessControllerInterface.sol";

/**
 * @title SimpleWriteAccessController
 * @notice Gives access to accounts explicitly added to an access list by the
 * controller's owner.
 * @dev does not make any special permissions for externally, see
 * SimpleReadAccessController for that.
 */
contract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {
  bool public checkEnabled;
  mapping(address => bool) internal accessList;

  event AddedAccess(address user);
  event RemovedAccess(address user);
  event CheckAccessEnabled();
  event CheckAccessDisabled();

  constructor() ConfirmedOwner(msg.sender) {
    checkEnabled = true;
  }

  /**
   * @notice Returns the access of an address
   * @param _user The address to query
   */
  function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {
    return accessList[_user] || !checkEnabled;
  }

  /**
   * @notice Adds an address to the access list
   * @param _user The address to add
   */
  function addAccess(address _user) external onlyOwner {
    if (!accessList[_user]) {
      accessList[_user] = true;

      emit AddedAccess(_user);
    }
  }

  /**
   * @notice Removes an address from the access list
   * @param _user The address to remove
   */
  function removeAccess(address _user) external onlyOwner {
    if (accessList[_user]) {
      accessList[_user] = false;

      emit RemovedAccess(_user);
    }
  }

  /**
   * @notice makes the access check enforced
   */
  function enableAccessCheck() external onlyOwner {
    if (!checkEnabled) {
      checkEnabled = true;

      emit CheckAccessEnabled();
    }
  }

  /**
   * @notice makes the access check unenforced
   */
  function disableAccessCheck() external onlyOwner {
    if (checkEnabled) {
      checkEnabled = false;

      emit CheckAccessDisabled();
    }
  }

  /**
   * @dev reverts if the caller does not have access
   */
  modifier checkAccess() {
    require(hasAccess(msg.sender, msg.data), "No access");
    _;
  }
}

File 5 of 17 : AccessControllerInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AccessControllerInterface {
  function hasAccess(address user, bytes calldata data) external view returns (bool);
}

File 6 of 17 : Flags.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./SimpleReadAccessController.sol";
import "./interfaces/AccessControllerInterface.sol";
import "./interfaces/FlagsInterface.sol";

/**
 * @title The Flags contract
 * @notice Allows flags to signal to any reader on the access control list.
 * The owner can set flags, or designate other addresses to set flags. The
 * owner must turn the flags off, other setters cannot. An expected pattern is
 * to allow addresses to raise flags on themselves, so if you are subscribing to
 * FlagOn events you should filter for addresses you care about.
 */
contract Flags is FlagsInterface, SimpleReadAccessController {
  AccessControllerInterface public raisingAccessController;

  mapping(address => bool) private flags;

  event FlagRaised(address indexed subject);
  event FlagLowered(address indexed subject);
  event RaisingAccessControllerUpdated(address indexed previous, address indexed current);

  /**
   * @param racAddress address for the raising access controller.
   */
  constructor(address racAddress) {
    setRaisingAccessController(racAddress);
  }

  /**
   * @notice read the warning flag status of a contract address.
   * @param subject The contract address being checked for a flag.
   * @return A true value indicates that a flag was raised and a
   * false value indicates that no flag was raised.
   */
  function getFlag(address subject) external view override checkAccess returns (bool) {
    return flags[subject];
  }

  /**
   * @notice read the warning flag status of a contract address.
   * @param subjects An array of addresses being checked for a flag.
   * @return An array of bools where a true value for any flag indicates that
   * a flag was raised and a false value indicates that no flag was raised.
   */
  function getFlags(address[] calldata subjects) external view override checkAccess returns (bool[] memory) {
    bool[] memory responses = new bool[](subjects.length);
    for (uint256 i = 0; i < subjects.length; i++) {
      responses[i] = flags[subjects[i]];
    }
    return responses;
  }

  /**
   * @notice enable the warning flag for an address.
   * Access is controlled by raisingAccessController, except for owner
   * who always has access.
   * @param subject The contract address whose flag is being raised
   */
  function raiseFlag(address subject) external override {
    require(allowedToRaiseFlags(), "Not allowed to raise flags");

    tryToRaiseFlag(subject);
  }

  /**
   * @notice enable the warning flags for multiple addresses.
   * Access is controlled by raisingAccessController, except for owner
   * who always has access.
   * @param subjects List of the contract addresses whose flag is being raised
   */
  function raiseFlags(address[] calldata subjects) external override {
    require(allowedToRaiseFlags(), "Not allowed to raise flags");

    for (uint256 i = 0; i < subjects.length; i++) {
      tryToRaiseFlag(subjects[i]);
    }
  }

  /**
   * @notice allows owner to disable the warning flags for multiple addresses.
   * @param subjects List of the contract addresses whose flag is being lowered
   */
  function lowerFlags(address[] calldata subjects) external override onlyOwner {
    for (uint256 i = 0; i < subjects.length; i++) {
      address subject = subjects[i];

      if (flags[subject]) {
        flags[subject] = false;
        emit FlagLowered(subject);
      }
    }
  }

  /**
   * @notice allows owner to change the access controller for raising flags.
   * @param racAddress new address for the raising access controller.
   */
  function setRaisingAccessController(address racAddress) public override onlyOwner {
    address previous = address(raisingAccessController);

    if (previous != racAddress) {
      raisingAccessController = AccessControllerInterface(racAddress);

      emit RaisingAccessControllerUpdated(previous, racAddress);
    }
  }

  // PRIVATE

  function allowedToRaiseFlags() private view returns (bool) {
    return msg.sender == owner() || raisingAccessController.hasAccess(msg.sender, msg.data);
  }

  function tryToRaiseFlag(address subject) private {
    if (!flags[subject]) {
      flags[subject] = true;
      emit FlagRaised(subject);
    }
  }
}

File 7 of 17 : SimpleReadAccessController.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./SimpleWriteAccessController.sol";

/**
 * @title SimpleReadAccessController
 * @notice Gives access to:
 * - any externally owned account (note that off-chain actors can always read
 * any contract storage regardless of on-chain access control measures, so this
 * does not weaken the access control while improving usability)
 * - accounts explicitly added to an access list
 * @dev SimpleReadAccessController is not suitable for access controlling writes
 * since it grants any externally owned account access! See
 * SimpleWriteAccessController for that.
 */
contract SimpleReadAccessController is SimpleWriteAccessController {
  /**
   * @notice Returns the access of an address
   * @param _user The address to query
   */
  function hasAccess(address _user, bytes memory _calldata) public view virtual override returns (bool) {
    return super.hasAccess(_user, _calldata) || _user == tx.origin;
  }
}

File 8 of 17 : FlagsInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface FlagsInterface {
  function getFlag(address) external view returns (bool);

  function getFlags(address[] calldata) external view returns (bool[] memory);

  function raiseFlag(address) external;

  function raiseFlags(address[] calldata) external;

  function lowerFlags(address[] calldata) external;

  function setRaisingAccessController(address) external;
}

File 9 of 17 : ArbitrumSequencerUptimeFeed.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import {AddressAliasHelper} from "./vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol";
import {ForwarderInterface} from "./interfaces/ForwarderInterface.sol";
import {AggregatorInterface} from "../interfaces/AggregatorInterface.sol";
import {AggregatorV3Interface} from "../interfaces/AggregatorV3Interface.sol";
import {AggregatorV2V3Interface} from "../interfaces/AggregatorV2V3Interface.sol";
import {TypeAndVersionInterface} from "../interfaces/TypeAndVersionInterface.sol";
import {FlagsInterface} from "./interfaces/FlagsInterface.sol";
import {ArbitrumSequencerUptimeFeedInterface} from "./interfaces/ArbitrumSequencerUptimeFeedInterface.sol";
import {SimpleReadAccessController} from "../SimpleReadAccessController.sol";
import {ConfirmedOwner} from "../ConfirmedOwner.sol";

/**
 * @title ArbitrumSequencerUptimeFeed - L2 sequencer uptime status aggregator
 * @notice L2 contract that receives status updates from a specific L1 address,
 *  records a new answer if the status changed, and raises or lowers the flag on the
 *   stored Flags contract.
 */
contract ArbitrumSequencerUptimeFeed is
  AggregatorV2V3Interface,
  ArbitrumSequencerUptimeFeedInterface,
  TypeAndVersionInterface,
  SimpleReadAccessController
{
  /// @dev Round info (for uptime history)
  struct Round {
    bool status;
    uint64 timestamp;
  }

  /// @dev Packed state struct to save sloads
  struct FeedState {
    uint80 latestRoundId;
    bool latestStatus;
    uint64 latestTimestamp;
  }

  /// @notice Contract is not yet initialized
  error Uninitialized();
  /// @notice Contract is already initialized
  error AlreadyInitialized();
  /// @notice Sender is not the L2 messenger
  error InvalidSender();
  /// @notice Replacement for AggregatorV3Interface "No data present"
  error NoDataPresent();

  event Initialized();
  event L1SenderTransferred(address indexed from, address indexed to);
  /// @dev Emitted when an `updateStatus` call is ignored due to unchanged status or stale timestamp
  event UpdateIgnored(bool latestStatus, uint64 latestTimestamp, bool incomingStatus, uint64 incomingTimestamp);

  /// @dev Follows: https://eips.ethereum.org/EIPS/eip-1967
  address public constant FLAG_L2_SEQ_OFFLINE =
    address(bytes20(bytes32(uint256(keccak256("chainlink.flags.arbitrum-seq-offline")) - 1)));

  uint8 public constant override decimals = 0;
  string public constant override description = "L2 Sequencer Uptime Status Feed";
  uint256 public constant override version = 1;

  /// @dev Flags contract to raise/lower flags on, during status transitions
  FlagsInterface public immutable FLAGS;
  /// @dev L1 address
  address private s_l1Sender;
  /// @dev s_latestRoundId == 0 means this contract is uninitialized.
  FeedState private s_feedState = FeedState({latestRoundId: 0, latestStatus: false, latestTimestamp: 0});
  mapping(uint80 => Round) private s_rounds;

  /**
   * @param flagsAddress Address of the Flags contract on L2
   * @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract
   */
  constructor(address flagsAddress, address l1SenderAddress) {
    setL1Sender(l1SenderAddress);

    FLAGS = FlagsInterface(flagsAddress);
  }

  /**
   * @notice Check if a roundId is valid in this current contract state
   * @dev Mainly used for AggregatorV2V3Interface functions
   * @param roundId Round ID to check
   */
  function isValidRound(uint256 roundId) private view returns (bool) {
    return roundId > 0 && roundId <= type(uint80).max && s_feedState.latestRoundId >= roundId;
  }

  /// @notice Check that this contract is initialised, otherwise throw
  function requireInitialized(uint80 latestRoundId) private pure {
    if (latestRoundId == 0) {
      revert Uninitialized();
    }
  }

  /**
   * @notice Initialise the first round. Can't be done in the constructor,
   *    because this contract's address must be permissioned by the the Flags contract
   *    (The Flags contract itself is a SimpleReadAccessController).
   */
  function initialize() external onlyOwner {
    FeedState memory feedState = s_feedState;
    if (feedState.latestRoundId != 0) {
      revert AlreadyInitialized();
    }

    uint64 timestamp = uint64(block.timestamp);
    bool currentStatus = FLAGS.getFlag(FLAG_L2_SEQ_OFFLINE);

    // Initialise roundId == 1 as the first round
    recordRound(1, currentStatus, timestamp);

    emit Initialized();
  }

  /**
   * @notice versions:
   *
   * - ArbitrumSequencerUptimeFeed 1.0.0: initial release
   *
   * @inheritdoc TypeAndVersionInterface
   */
  function typeAndVersion() external pure virtual override returns (string memory) {
    return "ArbitrumSequencerUptimeFeed 1.0.0";
  }

  /// @return L1 sender address
  function l1Sender() public view virtual returns (address) {
    return s_l1Sender;
  }

  /**
   * @notice Set the allowed L1 sender for this contract to a new L1 sender
   * @dev Can be disabled by setting the L1 sender as `address(0)`. Accessible only by owner.
   * @param to new L1 sender that will be allowed to call `updateStatus` on this contract
   */
  function transferL1Sender(address to) external virtual onlyOwner {
    setL1Sender(to);
  }

  /// @notice internal method that stores the L1 sender
  function setL1Sender(address to) private {
    address from = s_l1Sender;
    if (from != to) {
      s_l1Sender = to;
      emit L1SenderTransferred(from, to);
    }
  }

  /**
   * @notice Messages sent by the stored L1 sender will arrive on L2 with this
   *  address as the `msg.sender`
   * @return L2-aliased form of the L1 sender address
   */
  function aliasedL1MessageSender() public view returns (address) {
    return AddressAliasHelper.applyL1ToL2Alias(l1Sender());
  }

  /**
   * @dev Returns an AggregatorV2V3Interface compatible answer from status flag
   *
   * @param status The status flag to convert to an aggregator-compatible answer
   */
  function getStatusAnswer(bool status) private pure returns (int256) {
    return status ? int256(1) : int256(0);
  }

  /**
   * @notice Raise or lower the flag on the stored Flags contract.
   */
  function forwardStatusToFlags(bool status) private {
    if (status) {
      FLAGS.raiseFlag(FLAG_L2_SEQ_OFFLINE);
    } else {
      FLAGS.lowerFlag(FLAG_L2_SEQ_OFFLINE);
    }
  }

  /**
   * @notice Helper function to record a round and set the latest feed state.
   *
   * @param roundId The round ID to record
   * @param status Sequencer status
   * @param timestamp Block timestamp of status update
   */
  function recordRound(
    uint80 roundId,
    bool status,
    uint64 timestamp
  ) private {
    Round memory nextRound = Round(status, timestamp);
    FeedState memory feedState = FeedState(roundId, status, timestamp);

    s_rounds[roundId] = nextRound;
    s_feedState = feedState;

    emit NewRound(roundId, msg.sender, timestamp);
    emit AnswerUpdated(getStatusAnswer(status), roundId, timestamp);
  }

  /**
   * @notice Record a new status and timestamp if it has changed since the last round.
   * @dev This function will revert if not called from `l1Sender` via the L1->L2 messenger.
   *
   * @param status Sequencer status
   * @param timestamp Block timestamp of status update
   */
  function updateStatus(bool status, uint64 timestamp) external override {
    FeedState memory feedState = s_feedState;
    requireInitialized(feedState.latestRoundId);
    if (msg.sender != aliasedL1MessageSender()) {
      revert InvalidSender();
    }

    // Ignore if status did not change or latest recorded timestamp is newer
    if (feedState.latestStatus == status || feedState.latestTimestamp > timestamp) {
      emit UpdateIgnored(feedState.latestStatus, feedState.latestTimestamp, status, timestamp);
      return;
    }

    // Prepare a new round with updated status
    feedState.latestRoundId += 1;
    recordRound(feedState.latestRoundId, status, timestamp);

    forwardStatusToFlags(status);
  }

  /// @inheritdoc AggregatorInterface
  function latestAnswer() external view override checkAccess returns (int256) {
    FeedState memory feedState = s_feedState;
    requireInitialized(feedState.latestRoundId);
    return getStatusAnswer(feedState.latestStatus);
  }

  /// @inheritdoc AggregatorInterface
  function latestTimestamp() external view override checkAccess returns (uint256) {
    FeedState memory feedState = s_feedState;
    requireInitialized(feedState.latestRoundId);
    return feedState.latestTimestamp;
  }

  /// @inheritdoc AggregatorInterface
  function latestRound() external view override checkAccess returns (uint256) {
    FeedState memory feedState = s_feedState;
    requireInitialized(feedState.latestRoundId);
    return feedState.latestRoundId;
  }

  /// @inheritdoc AggregatorInterface
  function getAnswer(uint256 roundId) external view override checkAccess returns (int256) {
    requireInitialized(s_feedState.latestRoundId);
    if (isValidRound(roundId)) {
      return getStatusAnswer(s_rounds[uint80(roundId)].status);
    }

    return 0;
  }

  /// @inheritdoc AggregatorInterface
  function getTimestamp(uint256 roundId) external view override checkAccess returns (uint256) {
    requireInitialized(s_feedState.latestRoundId);
    if (isValidRound(roundId)) {
      return s_rounds[uint80(roundId)].timestamp;
    }

    return 0;
  }

  /// @inheritdoc AggregatorV3Interface
  function getRoundData(uint80 _roundId)
    public
    view
    override
    checkAccess
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    )
  {
    requireInitialized(s_feedState.latestRoundId);

    if (isValidRound(_roundId)) {
      Round memory round = s_rounds[_roundId];
      answer = getStatusAnswer(round.status);
      startedAt = uint256(round.timestamp);
    } else {
      answer = 0;
      startedAt = 0;
    }
    roundId = _roundId;
    updatedAt = startedAt;
    answeredInRound = roundId;
  }

  /// @inheritdoc AggregatorV3Interface
  function latestRoundData()
    external
    view
    override
    checkAccess
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    )
  {
    FeedState memory feedState = s_feedState;
    requireInitialized(feedState.latestRoundId);

    roundId = feedState.latestRoundId;
    answer = getStatusAnswer(feedState.latestStatus);
    startedAt = feedState.latestTimestamp;
    updatedAt = startedAt;
    answeredInRound = roundId;
  }
}

File 10 of 17 : AddressAliasHelper.sol
// SPDX-License-Identifier: Apache-2.0

/*
 * Copyright 2019-2021, Offchain Labs, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// NOTICE: pragma change from original (^0.6.11)
pragma solidity ^0.8.0;

library AddressAliasHelper {
  uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);

  /// @notice Utility function that converts the msg.sender viewed in the L2 to the
  /// address in the L1 that submitted a tx to the inbox
  /// @param l1Address L2 address as viewed in msg.sender
  /// @return l2Address the address in the L1 that triggered the tx to L2
  function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {
    unchecked {
      l2Address = address(uint160(l1Address) + offset);
    }
  }

  /// @notice Utility function that converts the msg.sender viewed in the L2 to the
  /// address in the L1 that submitted a tx to the inbox
  /// @param l2Address L2 address as viewed in msg.sender
  /// @return l1Address the address in the L1 that triggered the tx to L2
  function undoL1ToL2Alias(address l2Address) internal pure returns (address l1Address) {
    unchecked {
      l1Address = address(uint160(l2Address) - offset);
    }
  }
}

File 11 of 17 : ForwarderInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title ForwarderInterface - forwards a call to a target, under some conditions
interface ForwarderInterface {
  /**
   * @notice forward calls the `target` with `data`
   * @param target contract address to be called
   * @param data to send to target contract
   */
  function forward(address target, bytes memory data) external;
}

File 12 of 17 : AggregatorInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorInterface {
  function latestAnswer() external view returns (int256);

  function latestTimestamp() external view returns (uint256);

  function latestRound() external view returns (uint256);

  function getAnswer(uint256 roundId) external view returns (int256);

  function getTimestamp(uint256 roundId) external view returns (uint256);

  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);

  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);
}

File 13 of 17 : AggregatorV3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

File 14 of 17 : AggregatorV2V3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./AggregatorInterface.sol";
import "./AggregatorV3Interface.sol";

interface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface {}

File 15 of 17 : TypeAndVersionInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract TypeAndVersionInterface {
  function typeAndVersion() external pure virtual returns (string memory);
}

File 16 of 17 : FlagsInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

interface FlagsInterface {
  function getFlag(address) external view returns (bool);

  function getFlags(address[] calldata) external view returns (bool[] memory);

  function raiseFlag(address) external;

  function raiseFlags(address[] calldata) external;

  function lowerFlag(address) external;

  function lowerFlags(address[] calldata) external;

  function setRaisingAccessController(address) external;

  function setLoweringAccessController(address) external;
}

File 17 of 17 : ArbitrumSequencerUptimeFeedInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ArbitrumSequencerUptimeFeedInterface {
  function updateStatus(bool status, uint64 timestamp) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "none"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"flagsAddress","type":"address"},{"internalType":"address","name":"l1SenderAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NoDataPresent","type":"error"},{"inputs":[],"name":"Uninitialized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"AddedAccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"CheckAccessDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"CheckAccessEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"L1SenderTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"NewRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"RemovedAccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"latestStatus","type":"bool"},{"indexed":false,"internalType":"uint64","name":"latestTimestamp","type":"uint64"},{"indexed":false,"internalType":"bool","name":"incomingStatus","type":"bool"},{"indexed":false,"internalType":"uint64","name":"incomingTimestamp","type":"uint64"}],"name":"UpdateIgnored","type":"event"},{"inputs":[],"name":"FLAGS","outputs":[{"internalType":"contract FlagsInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_L2_SEQ_OFFLINE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"aliasedL1MessageSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAccessCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAccessCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"hasAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l1Sender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferL1Sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"typeAndVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"updateStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

610100604052600060a081905260c081905260e052600480546001600160981b03191690553480156200003157600080fd5b5060405162001fe538038062001fe5833981016040819052620000549162000249565b3380600081620000ab5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000de57620000de8162000116565b50506001805460ff60a01b1916600160a01b17905550620000ff81620001c2565b5060601b6001600160601b03191660805262000281565b6001600160a01b038116331415620001715760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a2565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200022857600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d1890600090a35b5050565b80516001600160a01b03811681146200024457600080fd5b919050565b600080604083850312156200025d57600080fd5b62000268836200022c565b915062000278602084016200022c565b90509250929050565b60805160601c611d30620002b560003960008181610323015281816109cd015281816117fb01526118d10152611d306000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80638205bf6a116100f9578063b5ab58dc11610097578063dc7f012411610071578063dc7f0124146103e6578063ed8378f51461040b578063f2fde38b1461041e578063feaf968c1461043157600080fd5b8063b5ab58dc146103a2578063b633620c146103b5578063b7558b7a146103c857600080fd5b8063926aa9f6116100d3578063926aa9f6146103165780639728538f1461031e5780639a6fc8f514610345578063a118f2491461038f57600080fd5b80638205bf6a146102dd5780638823da6c146102e55780638da5cb5b146102f857600080fd5b806354fd4d50116101665780637284e416116101405780637284e4161461028957806379ba5097146102c55780638038e4a1146102cd5780638129fc1c146102d557600080fd5b806354fd4d5014610256578063668a0f021461025e5780636b14daf81461026657600080fd5b8063284afc0811610197578063284afc0814610213578063313ce5671461022657806350d25bcd1461024057600080fd5b80630a756983146101be578063181f5a77146101c85780631e8d27dd146101e6575b600080fd5b6101c6610439565b005b6101d06104b8565b6040516101dd9190611bde565b60405180910390f35b6101ee6104d8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dd565b6101c6610221366004611a3b565b610509565b61022e600081565b60405160ff90911681526020016101dd565b61024861051d565b6040519081526020016101dd565b610248600181565b61024861063e565b610279610274366004611a56565b610759565b60405190151581526020016101dd565b6101d06040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b6101c661078c565b6101c6610889565b6101c661091d565b610248610ae3565b6101c66102f3366004611a3b565b610bff565b60005473ffffffffffffffffffffffffffffffffffffffff166101ee565b6101ee610cb8565b6101ee7f000000000000000000000000000000000000000000000000000000000000000081565b610358610353366004611bb2565b610cfa565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101dd565b6101c661039d366004611a3b565b610e5c565b6102486103b0366004611b99565b610f10565b6102486103c3366004611b99565b611016565b60035473ffffffffffffffffffffffffffffffffffffffff166101ee565b6001546102799074010000000000000000000000000000000000000000900460ff1681565b6101c6610419366004611b53565b611113565b6101c661042c366004611a3b565b6112bd565b6103586112ce565b610441611411565b60015474010000000000000000000000000000000000000000900460ff16156104b657600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f53963890600090a15b565b6060604051806060016040528060218152602001611d0360219139905090565b61050360017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c7f565b60601c81565b610511611411565b61051a81611492565b50565b6000610560336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b6105cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff16928201929092529061062b9061152d565b6106388160200151611570565b91505090565b6000610681336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b6106e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff1692820192909252906107479061152d565b5169ffffffffffffffffffff16905090565b60006107658383611586565b80610785575073ffffffffffffffffffffffffffffffffffffffff831632145b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461080d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016105c2565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610891611411565b60015474010000000000000000000000000000000000000000900460ff166104b657600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c348090600090a1565b610925611411565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290156109b3576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663357e47fe610a1d60017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c7f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c600482015260240160206040518083038186803b158015610a6f57600080fd5b505afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190611b36565b9050610ab5600182846115db565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a1505050565b6000610b26336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b610b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290610bec9061152d565b6040015167ffffffffffffffff16905090565b610c07611411565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff161561051a5773ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b6000610cf5610cdc60035473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b6000806000806000610d43336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b610da9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b600454610dc19069ffffffffffffffffffff1661152d565b610dd68669ffffffffffffffffffff166117a7565b15610e455769ffffffffffffffffffff861660009081526005602090815260409182902082518084019093525460ff8116151580845261010090910467ffffffffffffffff1691830191909152610e2c90611570565b9450806020015167ffffffffffffffff16935050610e4e565b60009350600092505b509394919350915081908490565b610e64611411565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff1661051a5773ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610cad565b6000610f53336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b610fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b600454610fd19069ffffffffffffffffffff1661152d565b610fda826117a7565b1561100d5769ffffffffffffffffffff82166000908152600560205260409020546110079060ff16611570565b92915050565b5060005b919050565b6000611059336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b6110bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b6004546110d79069ffffffffffffffffffff1661152d565b6110e0826117a7565b1561100d575069ffffffffffffffffffff16600090815260056020526040902054610100900467ffffffffffffffff1690565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff1692820192909252906111739061152d565b61117b610cb8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111df576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82151581602001511515148061120c57508167ffffffffffffffff16816040015167ffffffffffffffff16115b15611280577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf8160200151826040015185856040516112739493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b6001816000018181516112939190611c51565b69ffffffffffffffffffff1690525080516112af9084846115db565b6112b8836117de565b505050565b6112c5611411565b61051a81611921565b6000806000806000611317336000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061075992505050565b61137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105c2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff1692820192909252906113dd9061152d565b806000015195506113f18160200151611570565b6040909101519596909567ffffffffffffffff1694508493508692509050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105c2565b60035473ffffffffffffffffffffffffffffffffffffffff908116908216811461152957600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d1890600090a35b5050565b69ffffffffffffffffffff811661051a576040517f1c72fad400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008161157e576000611007565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081205460ff168061078557505060015474010000000000000000000000000000000000000000900460ff161592915050565b60408051808201825283151580825267ffffffffffffffff8481166020808501828152865160608101885269ffffffffffffffffffff8b8116808352828501978852828a018681526000828152600587528b90208a51815496518a16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff911515919091167fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009097169690961795909517909455825160048054995195519098166b010000000000000000000000027fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff9515156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909a1691909316179790971792909216919091179093559451908152929390923392917f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38469ffffffffffffffffffff1661176385611570565b60405167ffffffffffffffff861681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a35050505050565b600080821180156117c2575069ffffffffffffffffffff8211155b801561100757505060045469ffffffffffffffffffff16101590565b80156118ba5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d74af26361184b60017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c7f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c6004820152602401600060405180830381600087803b15801561189f57600080fd5b505af11580156118b3573d6000803e3d6000fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663e37a836661184b60017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c7f565b73ffffffffffffffffffffffffffffffffffffffff81163314156119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105c2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b803573ffffffffffffffffffffffffffffffffffffffff8116811461101157600080fd5b600060208284031215611a4d57600080fd5b61078582611a17565b60008060408385031215611a6957600080fd5b611a7283611a17565b9150602083013567ffffffffffffffff80821115611a8f57600080fd5b818501915085601f830112611aa357600080fd5b813581811115611ab557611ab5611cc5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611afb57611afb611cc5565b81604052828152886020848701011115611b1457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215611b4857600080fd5b815161078581611cf4565b60008060408385031215611b6657600080fd5b8235611b7181611cf4565b9150602083013567ffffffffffffffff81168114611b8e57600080fd5b809150509250929050565b600060208284031215611bab57600080fd5b5035919050565b600060208284031215611bc457600080fd5b813569ffffffffffffffffffff8116811461078557600080fd5b600060208083528351808285015260005b81811015611c0b57858101830151858201604001528201611bef565b81811115611c1d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600069ffffffffffffffffffff808316818516808303821115611c7657611c76611c96565b01949350505050565b600082821015611c9157611c91611c96565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461051a57600080fdfe417262697472756d53657175656e636572557074696d654665656420312e302e30a164736f6c6343000806000a0000000000000000000000003c14e07edd0dc67442fa96f1ec6999c57e810a830000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000003c14e07edd0dc67442fa96f1ec6999c57e810a830000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : flagsAddress (address): 0x3c14e07edd0dc67442fa96f1ec6999c57e810a83
Arg [1] : l1SenderAddress (address): 0x0000000000000000000000000000000000000000

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


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.