Address io1c2tw06ft8n5yaxl40q9y0merrc22g5rd2mgq0l

Contract Overview

Balance:
0 IOTX

IOTX Value:
$ 0

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
b8ebae7a6b698c9f762801c9c0ad06f4d2536af2b8db504c882d919850acb2ca 29884989 2024-05-08 08:07:20 +0000 UTC 19 hours ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
eb33cadf3e570c6b8fbbef9c7aee929319b645a20e6c70da6923ac3106edb2bf 29867712 2024-05-07 08:06:35 +0000 UTC 2 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
abb8be2cc8ec1edcaab52d613e4d89e31838b85227bc01f189e061e9ec36abfd 29850429 2024-05-06 08:06:15 +0000 UTC 3 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
b7149e61903d138ba2d18baa8f9f2ca571bb37b88117147e9dc13b29770da2f8 29833137 2024-05-05 08:05:10 +0000 UTC 4 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
2f18f8a3da8e9d414e70b97655a9538bfae92d5b334b9fff5c651bb573cc25bf 29815868 2024-05-04 08:06:05 +0000 UTC 5 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
f2c23e72cefda1d643dba8438478eef47847fb4eeb87c6f60409aa86ae91e7a4 29798591 2024-05-03 08:06:15 +0000 UTC 6 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
356c719b693c29f99babd721e38ceaad9ba74e9a92fe23738802bddbcd5e297b 29781347 2024-05-02 08:07:20 +0000 UTC 7 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
2e2e87a0298774cbcb94331559d681988bc5aed1a9cd45175dc39eeb1c6497ac 29764064 2024-05-01 08:07:00 +0000 UTC 8 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
c7d46e1046ce93a25a884a6bb3586bffdee740c98f376d04d91c5d5d8ee184d1 29746773 2024-04-30 08:06:05 +0000 UTC 9 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
b56250e9604ec9f446b05c163b8386c194c5ac1af32da5923754a52c7883d511 29729514 2024-04-29 08:07:40 +0000 UTC 10 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
60dd267f9fa77a6344b78c515781904c038692005d2ee3de171d82bd6ab67126 29712249 2024-04-28 08:08:50 +0000 UTC 11 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
32deb87f81f18976b4aae9c2b8cca19481c672e472715fcb8ab741a6443a1405 29712221 2024-04-28 08:06:30 +0000 UTC 11 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
9692ab98efb0bd8e2f84c06d86b02411b4c105d2579e42f04ae9f867fd48ee86 29694949 2024-04-27 08:07:05 +0000 UTC 12 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
0c1dba0a30544a2e28eb158c9e33951e27ebc4fe5d39190ff976ee29edba84ef 29677667 2024-04-26 08:06:50 +0000 UTC 13 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
4c2f864cbbb5e90d7a1c62927d4ef646feb00869e4a2bea17277e3205ac78ffc 29660377 2024-04-25 08:06:00 +0000 UTC 14 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
edb6c67278ae77fab482978aa5c04d9b69d718b779d8f56364d7bd78bdc22c4d 29643182 2024-04-24 08:13:00 +0000 UTC 15 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
6f9b91b49d2f2b0c387540bb6c1fd6425ef98477377484db3e87f2ab5dd067cd 29643154 2024-04-24 08:10:40 +0000 UTC 15 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
336257dd36e94be204290f5d1bfa568f3cffe14372cd460429573d5575fa6092 29643124 2024-04-24 08:08:10 +0000 UTC 15 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
362302aa0cb9fd8c961de06be3601c131e675d199af8cdd3f9a4faae63e58ebc 29625814 2024-04-23 08:05:40 +0000 UTC 16 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
521f54a12d930a2a8b9d59fd43fa6f2da33561cb5f3c797f0cf7de26ca3c06e8 29608548 2024-04-22 08:06:50 +0000 UTC 17 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
e0761485f2a4413faf95ae76b12b40e9e13ce25e6bf6c5363a51db84fa99375b 29591255 2024-04-21 08:05:45 +0000 UTC 18 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
0d013ce2695639005280b7348ef144d430021d2855c883dd9390026c57153032 29573985 2024-04-20 08:06:25 +0000 UTC 19 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
5f70cc5716e9062cf2ec79434a8079e2c7c6a31963e4995d3ac3e722833c253e 29556723 2024-04-19 08:07:55 +0000 UTC 20 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
217ec0d9988264af363dac2b2af38c6318851e749201629e816c958e69926e0d 29539417 2024-04-18 08:05:35 +0000 UTC 21 days ago io1mwnd69rsxt8f8pzdgs7p58zhlqh2w68gh05607  IN    Contract: ShadowAggregator 0 IOTX 0.565756
6829e8e8afa29d6e00623a85484a27272658aa51b99e92c34ea6a5d2b8d7d1b1 29522147 2024-04-17 08:06:20 +0000 UTC 22 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.