Address io1qu0ezp4fj4l9xzjtfqnfuwryp6a0cre5xdcu2z

Contract Overview

Balance:
0 IOTX

IOTX Value:
$ 0

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
127fe7dc6ba79e178234fe7eca5b711c30ce8974722cd793c43ba2ff2f04c224 29651792 2024-04-24 20:10:30 +0000 UTC 17 hours ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
d1d0310b8c6548b46137327924199fc5a8151455b058f835a46b9cbf135871cb 29634529 2024-04-23 20:11:55 +0000 UTC 2 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
37dfa8e49a6babdb301c6ab1be26604a20740b250f5455e0e9b079412483783c 29617229 2024-04-22 20:10:15 +0000 UTC 3 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
f8de66a4c4676d32f2bbb96c869f6c942b8a223c67257a500b667cb0492586b6 29599949 2024-04-21 20:10:15 +0000 UTC 4 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.55812
b7bd60dc19549e0503c17ed9a41947c6e313beeb855c08edffdf6ead0e3a62bf 29582642 2024-04-20 20:07:55 +0000 UTC 5 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 1.031708
9505d98394eacce21cd14a6916412ae7ee7d07a6924a7f764654aac1fa390e40 29565367 2024-04-19 20:08:15 +0000 UTC 6 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
d1022ca320ab722be7fb608431a5a4a33e2b495d0714b56c08d98496856c27cc 29548081 2024-04-18 20:07:45 +0000 UTC 7 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
d49cd6359e462e1edb91e6d28a3957d1ce64d2ddd88f28fb34996d60fd160b6c 29530810 2024-04-17 20:08:20 +0000 UTC 8 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
5285d4a3dc0036d7c9ff6211f1c2bdea611c10128d9896f696d32fbb4075736e 29513526 2024-04-16 20:07:55 +0000 UTC 9 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
213fd3a203dc929f0f5009dc743f1fa6eb668273235d9955e1cce89c14506368 29496226 2024-04-15 20:06:05 +0000 UTC 10 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
5c12f92eba37414458deee42a2290c029a53710d7b0e28a02ea1901c4f185b62 29478963 2024-04-14 20:07:25 +0000 UTC 11 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
b5e37506644f6e81d8b3bdcb6b7bac7dcd83f7ba40a993293a1782bfacc901a7 29461712 2024-04-13 20:05:30 +0000 UTC 12 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 1.031090
966498cab09d791c567844376095045d3dea08bd6b0712560ea26aecb7446ede 29444640 2024-04-12 20:22:50 +0000 UTC 13 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.55812
c12863e22e2a21e52bd94e7946349d7e172857755ee7b7f0cdb7c7bedb580ecc 29442726 2024-04-12 17:43:20 +0000 UTC 13 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.55812
d6e449bfdb72ad0c7c26fd296bfbda82fb539b1bee6c8adce1e6275200802044 29438965 2024-04-12 12:29:55 +0000 UTC 13 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
5433432519816bbbd294907ba85981b177b1baebd51d2bb0affdac711872b069 29421668 2024-04-11 12:28:30 +0000 UTC 14 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
4c9d0bfb92723738ff03cc77800baf4661219b26489fa7b7a66db2754d86dbd7 29404387 2024-04-10 12:28:25 +0000 UTC 15 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.55812
c6b96eb101fdf66c9dd127464f28899a08e2200f47cbd6d9e2f0a70b45eeb8b0 29387115 2024-04-09 12:29:05 +0000 UTC 16 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
94f629cf61d2a32eeec6ea519cdd31e61520dace1e07d86aa32ae48c41436cee 29369896 2024-04-08 12:29:05 +0000 UTC 17 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
5c6df8bd06aa1c6ab1ef84515da55e4b72a852e921b9fe97f3509b89cc5c8f64 29352631 2024-04-07 12:27:50 +0000 UTC 18 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
38632d94530a4927e5bbb628617b20a4f69d86e2b82317c6b29ebe52aa89f888 29335376 2024-04-06 12:27:10 +0000 UTC 19 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.55812
942e027196124563cacab98dd76381c8f31c39ecbee70f07999c0757240b1e0f 29318080 2024-04-05 12:25:50 +0000 UTC 20 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
3f44733371621e6847a86e0dbd69dcdd8de155519320b0a7556fb85540761667 29300811 2024-04-04 12:26:25 +0000 UTC 21 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
9f7e80ac3196fcdb67ebb49b1c2c7a1124360343c3ef45ae18e6ccbe74d27b6a 29283540 2024-04-03 12:27:10 +0000 UTC 22 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
02d2cf58e2f521ca27af39a697f44185aec33f6869cbc0f465ba0d71897e9f40 29266356 2024-04-02 12:26:10 +0000 UTC 23 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
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.