Address io1pgvgdzgvqce7xf6xh3gzrc7pa7kjh4nzaerf0a

Contract Overview

Balance:
0 IOTX

IOTX Value:
$ 0

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
20e5089e1517e26bb38f5dc104658039c613b8a507ebf43041f248f0672f21bd 23926505 2023-05-29 04:26:05 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.021128
5bef241571661bfb373504f6b644f92a20b6c949f2907e8e2d1d8fcf9f299e31 23713014 2023-05-16 19:52:20 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.770365
1f81c17f905ed992c2bbd763d3fa3f7a239577ea8d8a3387574bf77839290f5d 23625310 2023-05-11 18:02:20 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
71b67046ece0ec40e2451938a549bca1849d5a416ae15532039345f8c0211160 23624928 2023-05-11 17:30:10 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
f7f706b42c2db4f6b68b795b8e1cf962dbca4e99ac33c00a9c3b16fda6d4b059 23624872 2023-05-11 17:25:30 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.394845
06fc56a99ce706b7c675b793c4d0b99e68dabde88b73f6541a715a7ef02e264a 23624596 2023-05-11 17:02:30 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
08ef926244eb01cc8a306768d6f7499d680e64d5a92b5d2eaa3acb3e8a539bf6 23623852 2023-05-11 16:00:25 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
1a01687371686e6c02b78ee518ba4710c76388deade591b16a85675468f1cf4f 23623272 2023-05-11 15:12:05 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
559a64d40ccece58e75e9666be39c5f02b1623a100cc9c6e19e14faaa3b86c4e 23623134 2023-05-11 15:00:35 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
9e1e60b018879da18f17dfde4b744ddb183e5e94ee4b00c0e3db2ac368b26458 23623051 2023-05-11 14:53:40 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
6f19ed99cfa6a6f5cd110931019645df6bb7a5fd48f10c07c2ca2bcfc9535b27 23622637 2023-05-11 14:19:10 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.394845
48e9f8e64521cda561f90ba72f705db57d1b9818d9903c2a4eeef8c9af4070ba 23622526 2023-05-11 14:09:55 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.394845
d3e5ba4adfaa37eb8a8b0b8620282050b581bbd94bd5f551e6ed15e612ef6f51 23622416 2023-05-11 14:00:45 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
66ad1b33c0c6b07435e2d576d28d6070ac1931624986755cc41ab68c7b392830 23622360 2023-05-11 13:56:05 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.394845
a8d60d2eacb9f5ca877886dd6870868a424e17f985bebce2dbb6d18b153215f8 23621699 2023-05-11 13:00:55 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
783a1d59e786a566cef88f03128ef942f184c673be3adb54481ca837111c9d59 23621561 2023-05-11 12:49:25 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
2a7ac1ab70c2fb583ffabb551d3af28dfdf5287f040be25f935ed747f7a1c564 23621147 2023-05-11 12:14:55 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
6dcea74062a57df9f07a644720dc7d2521a6696acb8a5826756abebae44c08da 23620981 2023-05-11 12:01:05 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
747d039c7df220f69aeefa68d57458ae0b2a8c6f3dc25a3a81538c3ead83ae95 23620262 2023-05-11 11:01:10 +0000 UTC 11 months ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
a0e22a337f31f34a443fca1e575a058abf6a960ea4f11c69d5fa4e9005d1a11b 23619545 2023-05-11 10:01:25 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
0d6432393017be539c73ad371afacd3d3fb69a4cebb09afc706129c355484be4 23618828 2023-05-11 09:01:40 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
a27bdbe35dc5a5bd74d93686c44a432d9908f0cd25e6b2c481604fa4a370a37a 23618194 2023-05-11 08:08:50 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
f2bd5be8c5e36485eabcf2d5eb73247cd56b1a5e0eab0052c0d1aa226be56390 23618166 2023-05-11 08:06:30 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
bb481938fc2d70cdb1ca4655ed145b10cb807c177f2cb6e5d6104346dc3d6d98 23618110 2023-05-11 08:01:50 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
2142585a024508329e28dd0110c3b0ab387e9156c524c70949b3c5d37052fa3d 23617365 2023-05-11 06:59:45 +0000 UTC one year ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.402482
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.