Contract Overview
Latest 25 from a total of 20837 transactions
Contract Name:
NaiveAggregator
Compiler Version
v0.6.6+commit.6c089d02
// 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/NaiveAggregator.sol pragma solidity 0.6.6; contract NaiveAggregator is AggregatorV3Interface, Ownable { using SafeMathChainlink for uint256; struct Round { int256 answer; uint256 startedAt; uint256 updatedAt; uint80 answeredInRound; } event OperatorSet(address indexed operator, uint256 expireHeight); AggregatorV3Interface public aggregator; mapping(address => uint256) public operators; uint8 private dcls; string private desc; uint256 constant private MAX_ORACLE_COUNT = 31; uint80 constant private ROUND_MAX = 2**80-1; uint80 public latestRoundId; uint64 public latestRoundTimestamp; mapping(uint80 => Round) internal rounds; constructor( uint8 _decimals, string memory _description ) public { 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 setOperator(address _operator, uint256 _expireHeight) external onlyOwner { operators[_operator] = _expireHeight; emit OperatorSet(_operator, _expireHeight); } function setAggregator(AggregatorV3Interface _aggregator) external onlyOwner { aggregator = _aggregator; } /** * @notice called by oracles when they have witnessed a need to update * @param _answer is the answer */ function submit(int256 _answer, uint64 _timestamp) external { require(operators[msg.sender] > block.number, "no permission"); require(_timestamp < block.timestamp && _timestamp > latestRoundTimestamp, "stale answer"); uint80 rid = latestRoundId + 1; rounds[rid].answer = _answer; rounds[rid].startedAt = block.timestamp; rounds[rid].updatedAt = block.timestamp; rounds[rid].answeredInRound = rid; latestRoundId = rid; latestRoundTimestamp = _timestamp; } 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); } }
[{"inputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"string","name":"_description","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"expireHeight","type":"uint256"}],"name":"OperatorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"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":[{"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":"latestRoundTimestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operators","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AggregatorV3Interface","name":"_aggregator","type":"address"}],"name":"setAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"uint256","name":"_expireHeight","type":"uint256"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_answer","type":"int256"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"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
608060405234801561001057600080fd5b50600436106100f55760003560e01c80637afaf03311610097578063a93f21c411610066578063a93f21c4146102f6578063f2fde38b14610323578063f9120af614610349578063feaf968c1461036f576100f5565b80637afaf0331461024b5780638da5cb5b146102705780638f32d59b146102785780639a6fc8f514610294576100f5565b8063313ce567116100d3578063313ce5671461017a57806354fd4d50146101985780637284e416146101a0578063777541361461021d576100f5565b806311a8f413146100fa57806313e7c9d81461011e578063245a7bfc14610156575b600080fd5b610102610377565b604080516001600160501b039092168252519081900360200190f35b6101446004803603602081101561013457600080fd5b50356001600160a01b0316610386565b60408051918252519081900360200190f35b61015e610398565b604080516001600160a01b039092168252519081900360200190f35b6101826103a7565b6040805160ff9092168252519081900360200190f35b610144610436565b6101a861048c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e25781810151838201526020016101ca565b50505050905090810190601f16801561020f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102496004803603604081101561023357600080fd5b506001600160a01b038135169060200135610660565b005b61025361070d565b6040805167ffffffffffffffff9092168252519081900360200190f35b61015e610724565b610280610733565b604080519115158252519081900360200190f35b6102ba600480360360208110156102aa57600080fd5b50356001600160501b0316610744565b604080516001600160501b0396871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6102496004803603604081101561030c57600080fd5b508035906020013567ffffffffffffffff166108eb565b6102496004803603602081101561033957600080fd5b50356001600160a01b0316610a2d565b6102496004803603602081101561035f57600080fd5b50356001600160a01b0316610a92565b6102ba610b0d565b6005546001600160501b031681565b60026020526000908152604090205481565b6001546001600160a01b031681565b6001546000906001600160a01b0316801561042a57806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f557600080fd5b505afa158015610409573d6000803e3d6000fd5b505050506040513d602081101561041f57600080fd5b505191506104339050565b505060035460ff165b90565b6001546000906001600160a01b0316801561048457806001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f557600080fd5b600491505090565b6001546060906001600160a01b031680156105cf57806001600160a01b0316637284e4166040518163ffffffff1660e01b815260040160006040518083038186803b1580156104da57600080fd5b505afa1580156104ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561051757600080fd5b810190808051604051939291908464010000000082111561053757600080fd5b90830190602082018581111561054c57600080fd5b825164010000000081118282018810171561056657600080fd5b82525081516020918201929091019080838360005b8381101561059357818101518382015260200161057b565b50505050905090810190601f1680156105c05780820380516001836020036101000a031916815260200191505b50604052505050915050610433565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106555780601f1061062a57610100808354040283529160200191610655565b820191906000526020600020905b81548152906001019060200180831161063857829003601f168201915b505050505091505090565b610668610733565b6106b9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020849055815184815291517f504a149e57ef37c8a8e97616b5ea72e3b18a9f066fda25307204b5d00ac6c6289281900390910190a25050565b600554600160501b900467ffffffffffffffff1681565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60015460009081908190819081906001600160a01b031680156108065760408051639a6fc8f560e01b81526001600160501b038916600482015290516001600160a01b03831691639a6fc8f59160248083019260a0929190829003018186803b1580156107b057600080fd5b505afa1580156107c4573d6000803e3d6000fd5b505050506040513d60a08110156107da57600080fd5b508051602082015160408301516060840151608090940151929950909750955090935091506108e29050565b61080e610c81565b5067ffffffffffffffff87166000908152600660209081526040918290208251608081018452815481526001820154928101929092526002810154928201929092526003909101546001600160501b0316606082018190521580159061087d57506001600160501b0388811611155b6108c0576040805162461bcd60e51b815260206004820152600f60248201526e139bc819185d18481c1c995cd95b9d608a1b604482015290519081900360640190fd5b8781600001518260200151836040015184606001519650965096509650965050505b91939590929450565b33600090815260026020526040902054431061093e576040805162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b604482015290519081900360640190fd5b428167ffffffffffffffff1610801561096d575060055467ffffffffffffffff600160501b9091048116908216115b6109ad576040805162461bcd60e51b815260206004820152600c60248201526b39ba30b6329030b739bbb2b960a11b604482015290519081900360640190fd5b6005805460016001600160501b03918216810190911660008181526006602052604090209485554291850182905560028501919091556003909301805469ffffffffffffffffffff19908116851790915581541690921767ffffffffffffffff60501b1916600160501b67ffffffffffffffff9290921691909102179055565b610a35610733565b610a86576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610a8f81610be1565b50565b610a9a610733565b610aeb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081908190819081906001600160a01b03168015610bb957806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610b6357600080fd5b505afa158015610b77573d6000803e3d6000fd5b505050506040513d60a0811015610b8d57600080fd5b50805160208201516040830151606084015160809094015192995090975095509093509150610bda9050565b600554610bce906001600160501b0316610744565b95509550955095509550505b9091929394565b6001600160a01b038116610c265760405162461bcd60e51b8152600401808060200182810382526026815260200180610cb36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604051806080016040528060008152602001600081526020016000815260200160006001600160501b03168152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220ce8693ebb32d2fc5094b9fe84d24316ee908f8c676b04997f5de2f8b052d946064736f6c63430006060033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for
interesting conversations.