Address io1paat66ue6htgwmyp9kkz9gkg4znzjlvs0sp8c6

Contract Overview

Balance:
0 IOTX

IOTX Value:
$ 0

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
8d9e97b159e553f2f6a8b90638a54a2350e944aa251309deb3be4375e81a6f2b 25507065 2023-08-28 16:15:00 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.510553
1fdef58fbb55aabbc621c62fb97ca536dabbb941a6a764843cc0e8c19b7085cb 25450384 2023-08-25 09:30:45 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
f45808c1eb4d437a0c06ceaac86aeb4b52d5ce62000d27d452dd800a713fc390 25446104 2023-08-25 03:34:05 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
a166ee85f475ff3f7df726634766744e57c25334b63261c053b41252a23e9e70 25441252 2023-08-24 20:49:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
452eeb5cb9bc207e6c6764945b1154b55b1f6995c0a1dd29516126018ce6fd3a 25436859 2023-08-24 14:43:35 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
eb557a26beb537ce5e9963ef56f99adfc06ed684cf2017fd2823d4acd431518a 25428108 2023-08-24 02:34:15 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.27906
96cd7f55fe23c79fbc634a6b2a1b7bf61d55c9f86ee417a7598d8d4decec319c 25420989 2023-08-23 16:41:00 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.27906
2bbec049a4bdf2a0841f544ba8dd1674bc24771fbaa2e9a06f456b403b34426f 25408485 2023-08-22 23:18:50 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.27906
c9440cf5ffe0854d576123cf7a609f62ef4f388a18ff48faaa205b1c23ca72c7 25403541 2023-08-22 16:26:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
bb7bc5367b27653b0ca8f6b2207746f8e660821cad18ff42ea6f3149e58275e2 25390558 2023-08-21 22:16:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
6d7912d086eb23fe1603e866ab13218bb549891e2825be286a8e0ac5ebb32829 25382030 2023-08-21 10:25:50 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
9aa553b0756501c670855c33f80b61dd7e56bc8214a71e2d05747d763a8783a6 25378140 2023-08-21 05:01:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
eb4ac66f835a32c3b38e3411a06d39a4bc683709dffa86b9192d496d28088a1f 25371684 2023-08-20 20:03:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
069f8037c4a602a2a63e9d8beb1b594becb37bcfbf5471deab9548b37304822c 25361556 2023-08-20 05:59:40 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
facc3f17e7222a5a4c2d0618f6b3bd12920635576f9a9317a9882d43bb47202b 25352120 2023-08-19 16:53:20 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
e474d9b56338c37e0ef073ab4f385046120ea8c416318d056ba5ee0de793b2fa 25338184 2023-08-18 21:31:50 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
87ff9d54224f8c1e886cc887b53e521ae1db86008b2623ec21f21deb50c1e811 25334651 2023-08-18 16:37:25 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
dd82637ab517c63c1bbf76f115bc59fd411036fa93fcbd475f279562556e7f88 25325571 2023-08-18 04:00:45 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
af08621b10bc1015675bd93bf2452a9e3848b22ec30396df7b788a17b4c56584 25322036 2023-08-17 23:06:10 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
6a8648eefd8d95ec83531c6a1c6197aadbe009882d2f4901167502540839a2a4 25321260 2023-08-17 22:01:30 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
ff469a0bfd00387d8dee7e826ffdcc83d5c9c56c5305b5c2f73fee92ce7cbc7f 25321232 2023-08-17 21:59:10 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
a784b4771483b0976d0d9bf82b6300e7d3e54be84cd28af977f71d05bb9c6029 25321204 2023-08-17 21:56:50 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
62a1cb0d8b4328f6feb4702ea511ce62303a658d585a6321ca5f4a0fe01c7b7e 25321176 2023-08-17 21:54:30 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
ccacadbe52ef67786e078a74bedd87048163c0390582445c80dc0de55eb4696e 25321147 2023-08-17 21:52:05 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
5c1a4882f3d43cad5725b43a3b1e20c265da38fa6fe02392389b81a263e64cbd 25321119 2023-08-17 21:49:45 +0000 UTC 8 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.282878
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShadowAggregator

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

// File: contracts/src/v0.6/vendor/SafeMathChainlink.sol


pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMathChainlink {
  /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    * - Addition cannot overflow.
    */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    * - Subtraction cannot overflow.
    */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath: subtraction overflow");
    uint256 c = a - b;

    return c;
  }

  /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    * - Multiplication cannot overflow.
    */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    * - The divisor cannot be zero.
    */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, "SafeMath: division by zero");
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    * - The divisor cannot be zero.
    */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath: modulo by zero");
    return a % b;
  }
}

// File: contracts/src/v0.6/interfaces/AggregatorV3Interface.sol


pragma solidity ^0.6.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: contracts/src/v0.6/vendor/Ownable.sol


pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 *
 * This contract has been modified to remove the revokeOwnership function
 */
contract Ownable {
  address private _owner;

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () internal {
    _owner = msg.sender;
    emit OwnershipTransferred(address(0), _owner);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(isOwner(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Returns true if the caller is the current owner.
   */
  function isOwner() public view returns (bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

// File: contracts/src/v0.6/ShadowAggregator.sol


pragma solidity 0.6.6;




/**
 * @title The Prepaid Aggregator contract
 * @notice Handles aggregating data pushed in from off-chain. Oracles' submissions are gathered in
 * rounds, with each round aggregating the submissions for each oracle into a
 * single answer. The latest aggregated answer is exposed as well as historical
 * answers and their updated at timestamp.
 */
contract ShadowAggregator is AggregatorV3Interface, Ownable {
  using SafeMathChainlink for uint256;

  enum Role{Unset, Transmitter, Signer}

  struct Round {
    int256 answer;
    uint256 startedAt;
    uint256 updatedAt;
    uint80 answeredInRound;
  }

  struct Oracle {
    uint16 index;
    Role role;
  }

  AggregatorV3Interface public aggregator;

  uint8 private dcls;
  string private desc;
  address public originAggregator;

  uint256 constant private MAX_ORACLE_COUNT = 31;
  uint80 constant private ROUND_MAX = 2**80-1;

  uint40 internal latestEpochAndRound;
  uint80 public latestRoundId;
  bytes16 public configDigest;
  uint32 public configCount;
  mapping(uint80 => Round) internal rounds;
  mapping(address => Oracle) public oracles;
  address[] private signers;
  address[] private transmitters;

  event SubmissionReceived(
    int256 indexed submission,
    uint80 indexed round,
    address indexed oracle
  );

  constructor(
    address _origin,
    uint8 _decimals,
    string memory _description
  ) public {
    originAggregator = _origin;
    dcls = _decimals;
    desc = _description;
  }

  function decimals() external override view returns (uint8) {
    AggregatorV3Interface aggr = aggregator;
    if (address(aggr) != address(0)) {
      return aggr.decimals();
    }
    return dcls;
  }

  function description() external override view returns (string memory) {
    AggregatorV3Interface aggr = aggregator;
    if (address(aggr) != address(0)) {
      return aggr.description();
    }
    return desc;
  }

  function version() external override view returns (uint256) {
    AggregatorV3Interface aggr = aggregator;
    if (address(aggr) != address(0)) {
      return aggr.version();
    }
    return 4;
  }

  function setConfigCount(uint32 _count) external onlyOwner {
    configCount = _count;
  }

  function setAggregator(AggregatorV3Interface _aggregator) external onlyOwner {
    aggregator = _aggregator;
  }

  /**
   * @notice sets offchain reporting protocol configuration incl. participating oracles
   * @param _signers addresses with which oracles sign the reports
   * @param _transmitters addresses oracles use to transmit the reports
   * @param _threshold number of faulty oracles the system can tolerate
   * @param _encodedConfigVersion version number for offchainEncoding schema
   * @param _encoded encoded off-chain oracle configuration
   */
  function setConfig(
    address[] calldata _signers,
    address[] calldata _transmitters,
    uint8 _threshold,
    uint64 _encodedConfigVersion,
    bytes calldata _encoded
  )
    external
    onlyOwner()
  {
    while (signers.length != 0) { // remove any old signer/transmitter addresses
      uint lastIdx = signers.length - 1;
      address signer = signers[lastIdx];
      address transmitter = transmitters[lastIdx];
      delete oracles[signer];
      delete oracles[transmitter];
      signers.pop();
      transmitters.pop();
    }

    for (uint i = 0; i < _signers.length; i++) { // add new signer/transmitter addresses
      require(
        oracles[_signers[i]].role == Role.Unset,
        "repeated signer address"
      );
      oracles[_signers[i]] = Oracle(uint8(i), Role.Signer);
      require(
        oracles[_transmitters[i]].role == Role.Unset,
        "repeated transmitter address"
      );
      oracles[_transmitters[i]] = Oracle(uint8(i), Role.Transmitter);
      signers.push(_signers[i]);
      transmitters.push(_transmitters[i]);
    }
    configCount += 1;
    configDigest = configDigestFromConfigData(
      originAggregator,
      configCount,
      _signers,
      _transmitters,
      _threshold,
      _encodedConfigVersion,
      _encoded
    );
    latestEpochAndRound = 0;
  }

  function configDigestFromConfigData(
    address _contractAddress,
    uint64 _configCount,
    address[] memory _signers,
    address[] memory _transmitters,
    uint8 _threshold,
    uint64 _encodedConfigVersion,
    bytes memory _encodedConfig
  ) internal pure returns (bytes16) {
    return bytes16(keccak256(abi.encode(_contractAddress, _configCount,
      _signers, _transmitters, _threshold, _encodedConfigVersion, _encodedConfig
    )));
  }

  /**
   * @notice called by oracles when they have witnessed a need to update
   * @param _report is the observations
   * @param _rs is the r of oracles
   * @param _ss is the s of oracles
   * @param _rawVs is the v of oracles
   */
  function submit(
    bytes calldata _report,
    bytes32[] calldata _rs, bytes32[] calldata _ss, bytes32 _rawVs
  )
    external
  {
    require(_rs.length == _ss.length, "signatures out of registration");
    require(_rs.length <= MAX_ORACLE_COUNT, "too many signatures");
    {
      bytes32 h = keccak256(_report);
      bool[MAX_ORACLE_COUNT] memory signed;
      Oracle memory oracle;
      for (uint i = 0; i < _rs.length; i++) {
        address signer = ecrecover(h, uint8(_rawVs[i])+27, _rs[i], _ss[i]);
        oracle = oracles[signer];
        require(oracle.role == Role.Signer, "not an active oracle");
        require(!signed[oracle.index], "non-unique signature");
        signed[oracle.index] = true;
      }
    }
    (bytes32 rawReportContext, bytes32 rawObservers, int192[] memory observations) = abi.decode(_report, (bytes32, bytes32, int192[]));
    require(bytes16(rawReportContext << 88) == configDigest, "config digest mismatch");
    uint40 epochAndRound = uint40(uint256(rawReportContext));
    require(latestEpochAndRound < epochAndRound, "stale report");
    bytes memory observers = new bytes(observations.length);
    {
      bool[MAX_ORACLE_COUNT] memory seen;
      for (uint8 i = 0; i < observations.length; i++) {
        uint8 observerIdx = uint8(rawObservers[i]);
        require(!seen[observerIdx], "duplicate observer index");
        seen[observerIdx] = true;
        observers[i] = rawObservers[i];
      }
    }
    for (uint8 i = 0; i < observations.length - 1; i++) {
      bool inOrder = observations[i] <= observations[i+1];
      require(inOrder, "observations not sorted");
    }
    int192 median = observations[observations.length/2];
    uint80 rid = latestRoundId + 1;
    rounds[rid].answer = median;
    rounds[rid].startedAt = block.timestamp;
    rounds[rid].updatedAt = block.timestamp;
    rounds[rid].answeredInRound = rid;
    latestRoundId = rid;
    latestEpochAndRound = epochAndRound;
  }

  function oracleCount() public view returns (uint8) {
    return uint8(signers.length);
  }

  function getOracles() external view returns (address[] memory) {
    return signers;
  }

  function getRoundData(uint80 _roundId)
    public
    view
    virtual
    override
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    )
  {
    AggregatorV3Interface aggr = aggregator;
    if (address(aggr) != address(0)) {
      return aggr.getRoundData(_roundId);
    }
    Round memory r = rounds[uint64(_roundId)];

    require(r.answeredInRound > 0 && _roundId <= ROUND_MAX, "No data present");

    return (
      _roundId,
      r.answer,
      r.startedAt,
      r.updatedAt,
      r.answeredInRound
    );
  }

  function latestRoundData()
    public
    view
    virtual
    override
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    )
  {
    AggregatorV3Interface aggr = aggregator;
    if (address(aggr) != address(0)) {
      return aggr.latestRoundData();
    }
    return getRoundData(latestRoundId);
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"string","name":"_description","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"submission","type":"int256"},{"indexed":true,"internalType":"uint80","name":"round","type":"uint80"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"SubmissionReceived","type":"event"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configDigest","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"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":"getOracles","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"latestRoundId","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oracles","outputs":[{"internalType":"uint16","name":"index","type":"uint16"},{"internalType":"enum ShadowAggregator.Role","name":"role","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originAggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AggregatorV3Interface","name":"_aggregator","type":"address"}],"name":"setAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_transmitters","type":"address[]"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"uint64","name":"_encodedConfigVersion","type":"uint64"},{"internalType":"bytes","name":"_encoded","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_count","type":"uint32"}],"name":"setConfigCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_report","type":"bytes"},{"internalType":"bytes32[]","name":"_rs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_ss","type":"bytes32[]"},{"internalType":"bytes32","name":"_rawVs","type":"bytes32"}],"name":"submit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

Contract Creation Code

608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f32d59b116100ad578063ac540d4011610071578063ac540d4014610597578063addd5099146105bc578063f2fde38b14610611578063f9120af614610637578063feaf968c1461065d5761012c565b80638f32d59b146103c75780639a6fc8f5146103e35780639e787f0b14610445578063a062063414610553578063a483bd99146105745761012c565b806354fd4d50116100f457806354fd4d50146101f7578063585aa7de14610211578063613d8fcc1461033a5780637284e416146103425780638da5cb5b146103bf5761012c565b806311a8f413146101315780631378256a14610155578063245a7bfc14610179578063313ce5671461018157806340884c521461019f575b600080fd5b610139610665565b604080516001600160501b039092168252519081900360200190f35b61015d610674565b604080516001600160a01b039092168252519081900360200190f35b61015d610683565b610189610692565b6040805160ff9092168252519081900360200190f35b6101a7610728565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101e35781810151838201526020016101cb565b505050509050019250505060405180910390f35b6101ff61078a565b60408051918252519081900360200190f35b610338600480360360a081101561022757600080fd5b810190602081018135600160201b81111561024157600080fd5b82018360208201111561025357600080fd5b803590602001918460208302840111600160201b8311171561027457600080fd5b919390929091602081019035600160201b81111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460208302840111600160201b831117156102c457600080fd5b9193909260ff8335169267ffffffffffffffff602082013516929190606081019060400135600160201b8111156102fa57600080fd5b82018360208201111561030c57600080fd5b803590602001918460018302840111600160201b8311171561032d57600080fd5b5090925090506107e0565b005b610189610d30565b61034a610d36565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038457818101518382015260200161036c565b50505050905090810190601f1680156103b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61015d610f05565b6103cf610f14565b604080519115158252519081900360200190f35b610409600480360360208110156103f957600080fd5b50356001600160501b0316610f25565b604080516001600160501b0396871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6103386004803603608081101561045b57600080fd5b810190602081018135600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b919390929091602081019035600160201b8111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460208302840111600160201b831117156104f857600080fd5b919390929091602081019035600160201b81111561051557600080fd5b82018360208201111561052757600080fd5b803590602001918460208302840111600160201b8311171561054857600080fd5b9193509150356110cc565b61055b611793565b6040805163ffffffff9092168252519081900360200190f35b6103386004803603602081101561058a57600080fd5b503563ffffffff166117a6565b61059f611813565b604080516001600160801b03199092168252519081900360200190f35b6105e2600480360360208110156105d257600080fd5b50356001600160a01b0316611823565b60405161ffff83168152602081018260028111156105fc57fe5b60ff1681526020019250505060405180910390f35b6103386004803603602081101561062757600080fd5b50356001600160a01b0316611844565b6103386004803603602081101561064d57600080fd5b50356001600160a01b0316611897565b610409611900565b6004546001600160501b031681565b6003546001600160a01b031681565b6001546001600160a01b031681565b6001546000906001600160a01b0316801561071557806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b505afa1580156106f4573d6000803e3d6000fd5b505050506040513d602081101561070a57600080fd5b505191506107259050565b5050600154600160a01b900460ff165b90565b6060600780548060200260200160405190810160405280929190818152602001828054801561078057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610762575b5050505050905090565b6001546000906001600160a01b031680156107d857806001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b600491505090565b6107e8610f14565b610827576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b6007541561091657600780546000198101916000918390811061084657fe5b6000918252602082200154600880546001600160a01b039092169350908490811061086d57fe5b60009182526020808320909101546001600160a01b03858116845260069092526040808420805462ffffff19908116909155929091168084529220805490911690556007805491925090806108be57fe5b600082815260209020810160001990810180546001600160a01b031916905501905560088054806108eb57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610827915050565b60005b87811015610bfe576000600660008b8b8581811061093357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205462010000900460ff16600281111561096a57fe5b146109bc576040805162461bcd60e51b815260206004820152601760248201527f7265706561746564207369676e65722061646472657373000000000000000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260026020820152600660008b8b858181106109e357fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815461ffff191661ffff90911617808255918301519091829062ff0000191662010000836002811115610a3757fe5b021790555060009150610a479050565b60066000898985818110610a5757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205462010000900460ff166002811115610a8e57fe5b14610ae0576040805162461bcd60e51b815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015290519081900360640190fd5b6040805180820190915260ff821681526001602082015260066000898985818110610b0757fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815461ffff191661ffff90911617808255918301519091829062ff0000191662010000836002811115610b5b57fe5b02179055509050506007898983818110610b7157fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055506008878783818110610bbb57fe5b835460018181018655600095865260209586902090910180546001600160a01b0319166001600160a01b0396909302949094013594909416179091555001610919565b506004805463ffffffff600160d01b80830482166001018216810263ffffffff60d01b199093169290921792839055600354604080516020808e0282810182019093528d8252610ce7966001600160a01b039094169590930490931692918d918d9182919085019084908082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981528c93508b9250908a908a90819084018382808284376000920191909152506119d492505050565b6004805460809290921c600160501b026fffffffffffffffffffffffffffffffff60501b1990921691909117905550506003805464ffffffffff60a01b19169055505050505050565b60075490565b6001546060906001600160a01b03168015610e7757806001600160a01b0316637284e4166040518163ffffffff1660e01b815260040160006040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dc157600080fd5b8101908080516040519392919084600160201b821115610de057600080fd5b908301906020820185811115610df557600080fd5b8251600160201b811182820188101715610e0e57600080fd5b82525081516020918201929091019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b50604052505050915050610725565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610efa5780601f10610ecf57610100808354040283529160200191610efa565b820191906000526020600020905b815481529060010190602001808311610edd57829003601f168201915b505050505091505090565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60015460009081908190819081906001600160a01b03168015610fe75760408051639a6fc8f560e01b81526001600160501b038916600482015290516001600160a01b03831691639a6fc8f59160248083019260a0929190829003018186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d60a0811015610fbb57600080fd5b508051602082015160408301516060840151608090940151929950909750955090935091506110c39050565b610fef611bf8565b5067ffffffffffffffff87166000908152600560209081526040918290208251608081018452815481526001820154928101929092526002810154928201929092526003909101546001600160501b0316606082018190521580159061105e57506001600160501b0388811611155b6110a1576040805162461bcd60e51b815260206004820152600f60248201526e139bc819185d18481c1c995cd95b9d608a1b604482015290519081900360640190fd5b8781600001518260200151836040015184606001519650965096509650965050505b91939590929450565b838214611120576040805162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e0000604482015290519081900360640190fd5b601f84111561116c576040805162461bcd60e51b8152602060048201526013602482015272746f6f206d616e79207369676e61747572657360681b604482015290519081900360640190fd5b6000878760405180838380828437604051920182900390912094506111959350611c2992505050565b61119d611c48565b60005b878110156113815760006001858784602081106111b957fe5b1a601b018c8c868181106111c957fe5b905060200201358b8b878181106111dc57fe5b9050602002013560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561123a573d6000803e3d6000fd5b505060408051601f198101516001600160a01b03811660009081526006602090815290849020838501909452835461ffff811684529195509193509083019062010000900460ff16600281111561128d57fe5b600281111561129857fe5b90525092506002836020015160028111156112af57fe5b146112f8576040805162461bcd60e51b81526020600482015260146024820152736e6f7420616e20616374697665206f7261636c6560601b604482015290519081900360640190fd5b8251849061ffff16601f811061130a57fe5b602002015115611358576040805162461bcd60e51b81526020600482015260146024820152736e6f6e2d756e69717565207369676e617475726560601b604482015290519081900360640190fd5b600184846000015161ffff16601f811061136e57fe5b91151560209092020152506001016111a0565b5050505060008060608989606081101561139a57600080fd5b813591602081013591810190606081016040820135600160201b8111156113c057600080fd5b8201836020820111156113d257600080fd5b803590602001918460208302840111600160201b831117156113f357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600454979a5095985090965050505050605885901b6001600160801b0319908116600160501b90930460801b169190911490506114a1576040805162461bcd60e51b81526020600482015260166024820152750c6dedcccd2ce40c8d2cecae6e840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b600354839064ffffffffff808316600160a01b90920416106114f9576040805162461bcd60e51b815260206004820152600c60248201526b1cdd185b19481c995c1bdc9d60a21b604482015290519081900360640190fd5b6060825167ffffffffffffffff8111801561151357600080fd5b506040519080825280601f01601f19166020018201604052801561153e576020820181803683370190505b509050611549611c29565b60005b84518160ff16101561162f576000868260ff166020811061156957fe5b1a90508281601f811061157857fe5b6020020151156115cf576040805162461bcd60e51b815260206004820152601860248201527f6475706c6963617465206f6273657276657220696e6465780000000000000000604482015290519081900360640190fd5b6001838260ff16601f81106115e057fe5b91151560209283029190910152879060ff84169081106115fc57fe5b1a60f81b848360ff168151811061160f57fe5b60200101906001600160f81b031916908160001a9053505060010161154c565b50600090505b60018451038160ff1610156116dc576000848260010160ff168151811061165857fe5b602002602001015160170b858360ff168151811061167257fe5b602002602001015160170b13159050806116d3576040805162461bcd60e51b815260206004820152601760248201527f6f62736572766174696f6e73206e6f7420736f72746564000000000000000000604482015290519081900360640190fd5b50600101611635565b5060008360028551816116eb57fe5b04815181106116f657fe5b602090810291909101810151600480546001600160501b03908116600190810190911660008181526005909552604090942060179390930b83554290830181905560028301556003918201805469ffffffffffffffffffff199081168517909155815416909217909155805464ffffffffff909416600160a01b0264ffffffffff60a01b1990941693909317909255505050505050505050505050565b600454600160d01b900463ffffffff1681565b6117ae610f14565b6117ed576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b6004805463ffffffff909216600160d01b0263ffffffff60d01b19909216919091179055565b600454600160501b900460801b81565b60066020526000908152604090205461ffff81169062010000900460ff1682565b61184c610f14565b61188b576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b61189481611b58565b50565b61189f610f14565b6118de576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081908190819081906001600160a01b031680156119ac57806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d60a081101561198057600080fd5b508051602082015160408301516060840151608090940151929950909750955090935091506119cd9050565b6004546119c1906001600160501b0316610f25565b95509550955095509550505b9091929394565b60008787878787878760405160200180886001600160a01b03166001600160a01b031681526020018767ffffffffffffffff1667ffffffffffffffff16815260200180602001806020018660ff1660ff1681526020018567ffffffffffffffff1667ffffffffffffffff16815260200180602001848103845289818151815260200191508051906020019060200280838360005b83811015611a80578181015183820152602001611a68565b50505050905001848103835288818151815260200191508051906020019060200280838360005b83811015611abf578181015183820152602001611aa7565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015611afb578181015183820152602001611ae3565b50505050905090810190601f168015611b285780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6001600160a01b038116611b9d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604051806080016040528060008152602001600081526020016000815260200160006001600160501b031681525090565b604051806103e00160405280601f906020820280368337509192915050565b60408051808201909152600080825260208201529056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ab240f6912afb93813b1c6b17b5a2cd021f7111f45b01f7ecf3447ac4f19fa5664736f6c63430006060033

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