Contract 0xe8218cACb0a5421BC6409e498d9f8CC8869945ea 1

 
 
Txn Hash
Method
Block
From
To
Value
0xf8206e9d24988c1bbb5b6d3569bcbeda2e92d8b940aadfca16f061b845b7d2ecSubmit Value156045252022-09-24 16:50:233 hrs 38 mins ago0x3adf36c25041d08085f6a49609fabf12f8543171 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00356308 12
0xc952b55862789d51cf99632c31e2824075a242a15daf401df314e19c8f0ed9b1Submit Value156044452022-09-24 16:34:233 hrs 54 mins ago0x8d11f30e8a7e38f37c0f559572506c8dda1e5992 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00326616 11
0xa8c992559aa21efa893c2814f5e048aad42d89ef0defbb0acaddc1c9ca3acf97Submit Value156040322022-09-24 15:11:355 hrs 17 mins ago0x993ea94b5b282047060cac458af00a870ebfe606 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00356308 12
0x215625d933d1d179a82b1354cd7361e4e0102fae40a498edb50a6734c4a52d14Submit Value156039912022-09-24 15:03:235 hrs 25 mins ago0xd319791f1963f25dc0a9ed2a7467d26597a31dd4 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.0050477 17
0xc16f4405c89f154764947dbb2eed24887c5e086cb9652183d466ad64fc283442Submit Value156038982022-09-24 14:44:355 hrs 44 mins ago0x3b8b8f69f5965cb62aae7b4a4a6495cb8a1d7745 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267242 9
0xd19a14ae8c06384db598e15cf355d96330834e44537a00fc47efcab2131adc62Submit Value156028262022-09-24 11:09:359 hrs 19 mins ago0x11ca1f476144fe2a6bf220b0625663c852e9c107 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00277009 12
0xa4d7bc966da67c5c9afd4fd5ef29bf22c710e61907e068304930a1efb2d6d80bSubmit Value156027332022-09-24 10:50:599 hrs 37 mins ago0xbf6482b722551a8c090c9997369e23ccccaee387 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267242 9
0x0a8a61e7ab5f329c91bae876df2d3664d91c0e2996dae1818f3f2b2cd2ed1234Submit Value156025822022-09-24 10:20:4710 hrs 7 mins ago0x2b3d72dc730ac809daee2c1c9d222b6cf704cb9b IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0xada072987cad3ee457f0275a562ce9088adfaa81a7448b885a5793c6bc29ca52Submit Value156025152022-09-24 10:07:1110 hrs 21 mins agoENS Name cryptoscholar.eth IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.0050477 17
0x70fd2f4fe85efc2290d7ab76f7530eb48996f96b6b95c8d2481757ccc08a8240Submit Value156024732022-09-24 9:58:4710 hrs 29 mins ago0xe6488539f46f9e1e84a7b811c5bc405d00fb0382 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0x9e816c9f2af5db22a538b03b4a5220a4918b2ee341aa7ee50cf4e8e0427cbd89Submit Value156024492022-09-24 9:53:4710 hrs 34 mins ago0x31aadc79e6650d22ff5e0982526dd0d6375f0128 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0xc2cb75377e9e565156bb0e84ccf027b9508b5932bd4b01be1931356b24209f82Submit Value156023462022-09-24 9:32:5910 hrs 55 mins ago0x56aa5ebae6c7bdc5abe92f7a01b87fe8f9775597 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0x56fc01d05e241dcc9e6d52d3f9223d133574390d60caacb86536f2190d8e5626Submit Value156014492022-09-24 6:33:1113 hrs 55 mins ago0x3c224874bcec4083b0aa73f42dc6f9564516fa99 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0xb93a76c9f62aae635624a36686aad3d1051f6f45f0f983b952ed6065ec47cc00Submit Value156014182022-09-24 6:26:4714 hrs 1 min ago0x1180fd0799023da7c6d94361e6f5006072941992 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00207756 9
0x0b1a679ec05b350c48cdcfd799f855b1bf113d9c93a075484aa9c9ff33b64d46Submit Value156013802022-09-24 6:19:1114 hrs 9 mins ago0x14d8005f5e1fc794e342f6dabbd1bc7c0b241720 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00326616 11
0xdcfd687a769a0ff5b3594191b468496649bcc3b9de38a5966ef2e9a1afae2c38Submit Value156011212022-09-24 5:26:4715 hrs 1 min ago0x4b6dd053b4bf5729510835d9e9ae7b97b6a63fc1 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00253925 11
0xeb824545241e2ddfd9b43ee75ed90533e9acea416b96a0e5bc6787ad10051bbcSubmit Value156010432022-09-24 5:11:1115 hrs 17 mins ago0x910907d5b5b4a42cd4e0552de72cd154ffe75736 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00326616 11
0x499b29bc75253df4b1f04a55f267a0af3fb41181babf6d622961cc7797d3a59dSubmit Value156009232022-09-24 4:47:1115 hrs 41 mins ago0x950c40afceced6911609d4f6ae81a48749681452 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00326616 11
0x9c1e95eb4bdeb577d18528f8c7e1df232236c472a897ad312d4262d46b194e56Submit Value156008912022-09-24 4:40:4715 hrs 47 mins ago0x8248b09c79cdb24e5f89f5db4dbdfe856a346cf6 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0x92c077490f8f78f259ca8541d81fc027254e01615d5aeef321f0bdcbd3d8f063Submit Value156008262022-09-24 4:27:4716 hrs ago0xac234eecbfd0deb490ea31f9e3707a28bcd9d315 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0xa28d165fc4396b4f65f3f6a5e76ec6ea008275c4570a5499141e63f7aef2a8d1Submit Value156007362022-09-24 4:09:4716 hrs 18 mins ago0x3adf36c25041d08085f6a49609fabf12f8543171 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00326616 11
0x26ccf405164338893b9aceb6c2c15838b1fb6a1d29908ccd57e8072d1756c921Submit Value156005372022-09-24 3:29:5916 hrs 58 mins ago0x40c86159ac753ce321e49aa1c2e06c250b296c57 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00356308 12
0x1118477df54a8eb8473f92d8385f781270944eb4dac991d297a79da8290ba7e1Submit Value156004012022-09-24 3:02:3517 hrs 26 mins ago0x993ea94b5b282047060cac458af00a870ebfe606 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00356308 12
0x837df60b053a534458c34c63040b17e1b2369ce4ddde622a60815147e20f1e61Submit Value156003642022-09-24 2:55:1117 hrs 33 mins ago0x8d11f30e8a7e38f37c0f559572506c8dda1e5992 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00267231 9
0x771f48490019da253349bf216781640b2cee5b026cc63ee0800e4ee414f1a167Submit Value156002932022-09-24 2:40:5917 hrs 47 mins ago0x3b8b8f69f5965cb62aae7b4a4a6495cb8a1d7745 IN  0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether0.00356308 12
[ Download CSV Export 
AdvancedLatest 25 internal transaction
Parent Txn Hash Block From To Value
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0x23fb33725757b2c1c239313da55fcaaea0fe957e0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0x67002944ba87ef3b79ed4197b2fb6b010bc3cc67e977255a48b7701be9b639e0156055782022-09-24 20:23:115 mins ago 0x23fb33725757b2c1c239313da55fcaaea0fe957e0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xfb3aff0fa282fc0d8e500ba76fdf73683cecea940xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0xafc962207664e50d75c53709538ffa11945f5c811fa6c8c2763ab7204d015b7c156055422022-09-24 20:15:5912 mins ago 0xfb3aff0fa282fc0d8e500ba76fdf73683cecea940xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xb1eefe87af4cbf01327605902b27ed2aed3672ac0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0x322697e0d9a57bc6eff40682c0decfbd61d5d8f84426eacb0d477a053ce96c2d156054982022-09-24 20:07:1121 mins ago 0xb1eefe87af4cbf01327605902b27ed2aed3672ac0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0 Ether
0x48dffa78e60df4c6a2f9c249b6facf28092aece3d444f6a076780c3a0c8de0dc156054582022-09-24 19:59:1129 mins ago 0xe8218cacb0a5421bc6409e498d9f8cc8869945ea0x88df592f8eb5d7bd38bfef7deb0fbc02cf3778a00 Ether
[ Export Not Available for Advanced mode ]  
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Oracle

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion
File 1 of 4 : Oracle.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.3;

import "./interfaces/IController.sol";
import "./TellorVars.sol";

/**
 @author Tellor Inc.
 @title Oracle
 @dev This is the Oracle contract which defines the functionality for the Tellor
 * oracle, where reporters submit values on chain and users can retrieve values.
*/
contract Oracle is TellorVars {
    // Storage
    uint256 public reportingLock = 12 hours; // amount of time before a reporter is able to submit a value again
    uint256 public timeBasedReward = 5e17; // time based reward for a reporter for successfully submitting a value
    uint256 public timeOfLastNewValue = block.timestamp; // time of the last new submitted value, originally set to the block timestamp
    uint256 public tipsInContract; // amount of tips within the contract
    mapping(bytes32 => Report) private reports; // mapping of query IDs to a report
    mapping(bytes32 => uint256) public tips; // mapping of query IDs to the amount of TRB they are tipped
    mapping(address => uint256) private reporterLastTimestamp; // mapping of reporter addresses to the timestamp of their last reported value
    mapping(address => uint256) private reportsSubmittedByAddress; // mapping of reporter addresses to the number of reports they've submitted
    mapping(address => uint256) private tipsByUser; // mapping of a user to the amount of tips they've paid

    // Structs
    struct Report {
        uint256[] timestamps; // array of all newValueTimestamps reported
        mapping(uint256 => uint256) timestampIndex; // mapping of timestamps to respective indices
        mapping(uint256 => uint256) timestampToBlockNum; // mapping of timestamp to block number
        mapping(uint256 => bytes) valueByTimestamp; // mapping of timestamps to values
        mapping(uint256 => address) reporterByTimestamp; // mapping of timestamps to reporters
    }

    // Events
    event ReportingLockChanged(uint256 _newReportingLock);
    event NewReport(
        bytes32 _queryId,
        uint256 _time,
        bytes _value,
        uint256 _reward,
        uint256 _nonce,
        bytes _queryData,
        address _reporter
    );
    event TimeBasedRewardsChanged(uint256 _newTimeBasedReward);
    event TipAdded(
        address indexed _user,
        bytes32 indexed _queryId,
        uint256 _tip,
        uint256 _totalTip,
        bytes _queryData
    );

    /**
     * @dev Changes reporting lock for reporters.
     * Note: this function is only callable by the Governance contract.
     * @param _newReportingLock is the new reporting lock.
     */
    function changeReportingLock(uint256 _newReportingLock) external {
        require(
            msg.sender ==
                IController(TELLOR_ADDRESS).addresses(_GOVERNANCE_CONTRACT),
            "Only governance contract can change reporting lock."
        );
        require(_newReportingLock < 8640000, "Invalid _newReportingLock value");
        reportingLock = _newReportingLock;
        emit ReportingLockChanged(_newReportingLock);
    }

    /**
     * @dev Changes time based reward for reporters.
     * Note: this function is only callable by the Governance contract.
     * @param _newTimeBasedReward is the new time based reward.
     */
    function changeTimeBasedReward(uint256 _newTimeBasedReward) external {
        require(
            msg.sender ==
                IController(TELLOR_ADDRESS).addresses(_GOVERNANCE_CONTRACT),
            "Only governance contract can change time based reward."
        );
        timeBasedReward = _newTimeBasedReward;
        emit TimeBasedRewardsChanged(_newTimeBasedReward);
    }

    /**
     * @dev Removes a value from the oracle.
     * Note: this function is only callable by the Governance contract.
     * @param _queryId is ID of the specific data feed
     * @param _timestamp is the timestamp of the data value to remove
     */
    function removeValue(bytes32 _queryId, uint256 _timestamp) external {
        require(
            msg.sender ==
                IController(TELLOR_ADDRESS).addresses(_GOVERNANCE_CONTRACT) ||
                msg.sender ==
                IController(TELLOR_ADDRESS).addresses(_ORACLE_CONTRACT),
            "caller must be the governance contract or the oracle contract"
        );
        Report storage rep = reports[_queryId];
        uint256 _index = rep.timestampIndex[_timestamp];
        // Shift all timestamps back to reflect deletion of value
        for (uint256 i = _index; i < rep.timestamps.length - 1; i++) {
            rep.timestamps[i] = rep.timestamps[i + 1];
            rep.timestampIndex[rep.timestamps[i]] -= 1;
        }
        // Delete and reset timestamp and value
        delete rep.timestamps[rep.timestamps.length - 1];
        rep.timestamps.pop();
        rep.valueByTimestamp[_timestamp] = "";
        rep.timestampIndex[_timestamp] = 0;
    }

    /**
     * @dev Allows a reporter to submit a value to the oracle
     * @param _queryId is ID of the specific data feed. Equals keccak256(_queryData) for non-legacy IDs
     * @param _value is the value the user submits to the oracle
     * @param _nonce is the current value count for the query id
     * @param _queryData is the data used to fulfill the data query
     */
    function submitValue(
        bytes32 _queryId,
        bytes calldata _value,
        uint256 _nonce,
        bytes memory _queryData
    ) external {
        Report storage rep = reports[_queryId];
        require(
            _nonce == rep.timestamps.length,
            "nonce must match timestamp index"
        );
        // Require reporter to abide by given reporting lock
        require(
            block.timestamp - reporterLastTimestamp[msg.sender] > reportingLock,
            "still in reporter time lock, please wait!"
        );
        require(
            address(this) ==
                IController(TELLOR_ADDRESS).addresses(_ORACLE_CONTRACT),
            "can only submit to current oracle contract"
        );
        require(
            _queryId == keccak256(_queryData) || uint256(_queryId) <= 100,
            "id must be hash of bytes data"
        );
        reporterLastTimestamp[msg.sender] = block.timestamp;
        IController _tellor = IController(TELLOR_ADDRESS);
        // Checks that reporter is not already staking TRB
        (uint256 _status, ) = _tellor.getStakerInfo(msg.sender);
        require(_status == 1, "Reporter status is not staker");
        // Check is in case the stake amount increases
        require(
            _tellor.balanceOf(msg.sender) >= _tellor.uints(_STAKE_AMOUNT),
            "balance must be greater than stake amount"
        );
        // Checks for no double reporting of timestamps
        require(
            rep.reporterByTimestamp[block.timestamp] == address(0),
            "timestamp already reported for"
        );
        // Update number of timestamps, value for given timestamp, and reporter for timestamp
        rep.timestampIndex[block.timestamp] = rep.timestamps.length;
        rep.timestamps.push(block.timestamp);
        rep.timestampToBlockNum[block.timestamp] = block.number;
        rep.valueByTimestamp[block.timestamp] = _value;
        rep.reporterByTimestamp[block.timestamp] = msg.sender;
        // Send tips + timeBasedReward to reporter of value, and reset tips for ID
        (uint256 _tip, uint256 _reward) = getCurrentReward(_queryId);
        tipsInContract -= _tip;
        if (_reward + _tip > 0) {
            _tellor.transfer(msg.sender, _reward + _tip);
        }
        tips[_queryId] = 0;
        // Update last oracle value and number of values submitted by a reporter
        timeOfLastNewValue = block.timestamp;
        reportsSubmittedByAddress[msg.sender]++;
        emit NewReport(
            _queryId,
            block.timestamp,
            _value,
            _tip + _reward,
            _nonce,
            _queryData,
            msg.sender
        );
    }

    /**
     * @dev Adds tips to incentivize reporters to submit values for specific data IDs.
     * @param _queryId is ID of the specific data feed
     * @param _tip is the amount to tip the given data ID
     * @param _queryData is required for IDs greater than 100, informs reporters how to fulfill request. See github.com/tellor-io/dataSpecs
     */
    function tipQuery(
        bytes32 _queryId,
        uint256 _tip,
        bytes memory _queryData
    ) external {
        // Require tip to be greater than 1 and be paid
        require(_tip > 1, "Tip should be greater than 1");
        require(
            IController(TELLOR_ADDRESS).approveAndTransferFrom(
                msg.sender,
                address(this),
                _tip
            ),
            "tip must be paid"
        );
        require(
            _queryId == keccak256(_queryData) ||
                uint256(_queryId) <= 100 ||
                msg.sender ==
                IController(TELLOR_ADDRESS).addresses(_GOVERNANCE_CONTRACT),
            "id must be hash of bytes data"
        );
        // Burn half the tip
        _tip = _tip / 2;
        IController(TELLOR_ADDRESS).burn(_tip);
        // Update total tip amount for user, data ID, and in total contract
        tips[_queryId] += _tip;
        tipsByUser[msg.sender] += _tip;
        tipsInContract += _tip;
        emit TipAdded(msg.sender, _queryId, _tip, tips[_queryId], _queryData);
    }

    //Getters
    /**
     * @dev Returns the block number at a given timestamp
     * @param _queryId is ID of the specific data feed
     * @param _timestamp is the timestamp to find the corresponding block number for
     * @return uint256 block number of the timestamp for the given data ID
     */
    function getBlockNumberByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (uint256)
    {
        return reports[_queryId].timestampToBlockNum[_timestamp];
    }

    /**
     * @dev Calculates the current reward for a reporter given tips
     * and time based reward
     * @param _queryId is ID of the specific data feed
     * @return uint256 tips on given queryId
     * @return uint256 time based reward
     */
    function getCurrentReward(bytes32 _queryId)
        public
        view
        returns (uint256, uint256)
    {
        IController _tellor = IController(TELLOR_ADDRESS);
        uint256 _timeDiff = block.timestamp - timeOfLastNewValue;
        uint256 _reward = (_timeDiff * timeBasedReward) / 300; //.5 TRB per 5 minutes (should we make this upgradeable)
        if (_tellor.balanceOf(address(this)) < _reward + tipsInContract) {
            _reward = _tellor.balanceOf(address(this)) - tipsInContract;
        }
        return (tips[_queryId], _reward);
    }

    /**
     * @dev Returns the current value of a data feed given a specific ID
     * @param _queryId is the ID of the specific data feed
     * @return bytes memory of the current value of data
     */
    function getCurrentValue(bytes32 _queryId)
        external
        view
        returns (bytes memory)
    {
        return
            reports[_queryId].valueByTimestamp[
                reports[_queryId].timestamps[
                    reports[_queryId].timestamps.length - 1
                ]
            ];
    }

    /**
     * @dev Returns the reporting lock time, the amount of time a reporter must wait to submit again
     * @return uint256 reporting lock time
     */
    function getReportingLock() external view returns (uint256) {
        return reportingLock;
    }

    /**
     * @dev Returns the address of the reporter who submitted a value for a data ID at a specific time
     * @param _queryId is ID of the specific data feed
     * @param _timestamp is the timestamp to find a corresponding reporter for
     * @return address of the reporter who reported the value for the data ID at the given timestamp
     */
    function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (address)
    {
        return reports[_queryId].reporterByTimestamp[_timestamp];
    }

    /**
     * @dev Returns the timestamp of the reporter's last submission
     * @param _reporter is address of the reporter
     * @return uint256 timestamp of the reporter's last submission
     */
    function getReporterLastTimestamp(address _reporter)
        external
        view
        returns (uint256)
    {
        return reporterLastTimestamp[_reporter];
    }

    /**
     * @dev Returns the number of values submitted by a specific reporter address
     * @param _reporter is the address of a reporter
     * @return uint256 of the number of values submitted by the given reporter
     */
    function getReportsSubmittedByAddress(address _reporter)
        external
        view
        returns (uint256)
    {
        return reportsSubmittedByAddress[_reporter];
    }

    /**
     * @dev Returns the timestamp of a reported value given a data ID and timestamp index
     * @param _queryId is ID of the specific data feed
     * @param _index is the index of the timestamp
     * @return uint256 timestamp of the given queryId and index
     */
    function getReportTimestampByIndex(bytes32 _queryId, uint256 _index)
        external
        view
        returns (uint256)
    {
        return reports[_queryId].timestamps[_index];
    }

    /**
     * @dev Returns the time based reward for submitting a value
     * @return uint256 of time based reward
     */
    function getTimeBasedReward() external view returns (uint256) {
        return timeBasedReward;
    }

    /**
     * @dev Returns the number of timestamps/reports for a specific data ID
     * @param _queryId is ID of the specific data feed
     * @return uint256 of the number of timestamps/reports for the given data ID
     */
    function getTimestampCountById(bytes32 _queryId)
        external
        view
        returns (uint256)
    {
        return reports[_queryId].timestamps.length;
    }

    /**
     * @dev Returns the timestamp for the last value of any ID from the oracle
     * @return uint256 of timestamp of the last oracle value
     */
    function getTimeOfLastNewValue() external view returns (uint256) {
        return timeOfLastNewValue;
    }

    /**
     * @dev Returns the index of a reporter timestamp in the timestamp array for a specific data ID
     * @param _queryId is ID of the specific data feed
     * @param _timestamp is the timestamp to find in the timestamps array
     * @return uint256 of the index of the reporter timestamp in the array for specific ID
     */
    function getTimestampIndexByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (uint256)
    {
        return reports[_queryId].timestampIndex[_timestamp];
    }

    /**
     * @dev Returns the amount of tips available for a specific query ID
     * @param _queryId is ID of the specific data feed
     * @return uint256 of the amount of tips added for the specific ID
     */
    function getTipsById(bytes32 _queryId) external view returns (uint256) {
        return tips[_queryId];
    }

    /**
     * @dev Returns the amount of tips made by a user
     * @param _user is the address of the user
     * @return uint256 of the amount of tips made by the user
     */
    function getTipsByUser(address _user) external view returns (uint256) {
        return tipsByUser[_user];
    }

    /**
     * @dev Returns the value of a data feed given a specific ID and timestamp
     * @param _queryId is the ID of the specific data feed
     * @param _timestamp is the timestamp to look for data
     * @return bytes memory of the value of data at the associated timestamp
     */
    function getValueByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory)
    {
        return reports[_queryId].valueByTimestamp[_timestamp];
    }

    /**
     * @dev Used during the upgrade process to verify valid Tellor Contracts
     */
    function verify() external pure returns (uint256) {
        return 9999;
    }
}

File 2 of 4 : IController.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.3;

interface IController{
    function addresses(bytes32) external returns(address);
    function uints(bytes32) external returns(uint256);
    function burn(uint256 _amount) external;
    function changeDeity(address _newDeity) external;
    function changeOwner(address _newOwner) external;
    function changeTellorContract(address _tContract) external;
    function changeControllerContract(address _newController) external;
    function changeGovernanceContract(address _newGovernance) external;
    function changeOracleContract(address _newOracle) external;
    function changeTreasuryContract(address _newTreasury) external;
    function changeUint(bytes32 _target, uint256 _amount) external;
    function migrate() external;
    function mint(address _reciever, uint256 _amount) external;
    function init() external;
    function getDisputeIdByDisputeHash(bytes32 _hash) external view returns (uint256);
    function getLastNewValueById(uint256 _requestId) external view returns (uint256, bool);
    function retrieveData(uint256 _requestId, uint256 _timestamp) external view returns (uint256);
    function getNewValueCountbyRequestId(uint256 _requestId) external view returns (uint256);
    function getAddressVars(bytes32 _data) external view returns (address);
    function getUintVar(bytes32 _data) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function allowance(address _user, address _spender) external view  returns (uint256);
    function allowedToTrade(address _user, uint256 _amount) external view returns (bool);
    function approve(address _spender, uint256 _amount) external returns (bool);
    function approveAndTransferFrom(address _from, address _to, uint256 _amount) external returns(bool);
    function balanceOf(address _user) external view returns (uint256);
    function balanceOfAt(address _user, uint256 _blockNumber)external view returns (uint256);
    function transfer(address _to, uint256 _amount)external returns (bool success);
    function transferFrom(address _from,address _to,uint256 _amount) external returns (bool success) ;
    function depositStake() external;
    function requestStakingWithdraw() external;
    function withdrawStake() external;
    function changeStakingStatus(address _reporter, uint _status) external;
    function slashReporter(address _reporter, address _disputer) external;
    function getStakerInfo(address _staker) external view returns (uint256, uint256);
    function getTimestampbyRequestIDandIndex(uint256 _requestID, uint256 _index) external view returns (uint256);
    function getNewCurrentVariables()external view returns (bytes32 _c,uint256[5] memory _r,uint256 _d,uint256 _t);
    //in order to call fallback function
    function beginDispute(uint256 _requestId, uint256 _timestamp,uint256 _minerIndex) external;
    function unlockDisputeFee(uint256 _disputeId) external;
    function vote(uint256 _disputeId, bool _supportsDispute) external;
    function tallyVotes(uint256 _disputeId) external;
    //test functions
    function tipQuery(uint,uint,bytes memory) external;
    function getNewVariablesOnDeck() external view returns (uint256[5] memory idsOnDeck, uint256[5] memory tipsOnDeck);
}

File 3 of 4 : TellorVars.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.3;

import "./tellor3/TellorVariables.sol";

/**
 @author Tellor Inc.
 @title TellorVariables
 @dev Helper contract to store hashes of variables.
 * For each of the bytes32 constants, the values are equal to
 * keccak256([VARIABLE NAME])
*/
contract TellorVars is TellorVariables {
    // Storage
    address constant TELLOR_ADDRESS =
        0x88dF592F8eb5D7Bd38bFeF7dEb0fBc02cf3778a0; // Address of main Tellor Contract
    // Hashes for each pertinent contract
    bytes32 constant _GOVERNANCE_CONTRACT =
        0xefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd93;
    bytes32 constant _ORACLE_CONTRACT =
        0xfa522e460446113e8fd353d7fa015625a68bc0369712213a42e006346440891e;
    bytes32 constant _TREASURY_CONTRACT =
        0x1436a1a60dca0ebb2be98547e57992a0fa082eb479e7576303cbd384e934f1fa;
    bytes32 constant _SWITCH_TIME =
        0x6c0e91a96227393eb6e42b88e9a99f7c5ebd588098b549c949baf27ac9509d8f;
    bytes32 constant _MINIMUM_DISPUTE_FEE =
        0x7335d16d7e7f6cb9f532376441907fe76aa2ea267285c82892601f4755ed15f0;
}

File 4 of 4 : TellorVariables.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.4;

/**
 @author Tellor Inc.
 @title TellorVariables
 @dev Helper contract to store hashes of variables
*/
contract TellorVariables {
    bytes32 constant _BLOCK_NUMBER =
        0x4b4cefd5ced7569ef0d091282b4bca9c52a034c56471a6061afd1bf307a2de7c; //keccak256("_BLOCK_NUMBER");
    bytes32 constant _CURRENT_CHALLENGE =
        0xd54702836c9d21d0727ffacc3e39f57c92b5ae0f50177e593bfb5ec66e3de280; //keccak256("_CURRENT_CHALLENGE");
    bytes32 constant _CURRENT_REQUESTID =
        0xf5126bb0ac211fbeeac2c0e89d4c02ac8cadb2da1cfb27b53c6c1f4587b48020; //keccak256("_CURRENT_REQUESTID");
    bytes32 constant _CURRENT_REWARD =
        0xd415862fd27fb74541e0f6f725b0c0d5b5fa1f22367d9b78ec6f61d97d05d5f8; //keccak256("_CURRENT_REWARD");
    bytes32 constant _CURRENT_TOTAL_TIPS =
        0x09659d32f99e50ac728058418d38174fe83a137c455ff1847e6fb8e15f78f77a; //keccak256("_CURRENT_TOTAL_TIPS");
    bytes32 constant _DEITY =
        0x5fc094d10c65bc33cc842217b2eccca0191ff24148319da094e540a559898961; //keccak256("_DEITY");
    bytes32 constant _DIFFICULTY =
        0xf758978fc1647996a3d9992f611883adc442931dc49488312360acc90601759b; //keccak256("_DIFFICULTY");
    bytes32 constant _DISPUTE_COUNT =
        0x310199159a20c50879ffb440b45802138b5b162ec9426720e9dd3ee8bbcdb9d7; //keccak256("_DISPUTE_COUNT");
    bytes32 constant _DISPUTE_FEE =
        0x675d2171f68d6f5545d54fb9b1fb61a0e6897e6188ca1cd664e7c9530d91ecfc; //keccak256("_DISPUTE_FEE");
    bytes32 constant _DISPUTE_ROUNDS =
        0x6ab2b18aafe78fd59c6a4092015bddd9fcacb8170f72b299074f74d76a91a923; //keccak256("_DISPUTE_ROUNDS");
    bytes32 constant _EXTENSION =
        0x2b2a1c876f73e67ebc4f1b08d10d54d62d62216382e0f4fd16c29155818207a4; //keccak256("_EXTENSION");
    bytes32 constant _FEE =
        0x1da95f11543c9b03927178e07951795dfc95c7501a9d1cf00e13414ca33bc409; //keccak256("_FEE");
    bytes32 constant _FORK_EXECUTED =
        0xda571dfc0b95cdc4a3835f5982cfdf36f73258bee7cb8eb797b4af8b17329875; //keccak256("_FORK_EXECUTED");
    bytes32 constant _LOCK =
        0xd051321aa26ce60d202f153d0c0e67687e975532ab88ce92d84f18e39895d907;
    bytes32 constant _MIGRATOR =
        0xc6b005d45c4c789dfe9e2895b51df4336782c5ff6bd59a5c5c9513955aa06307; //keccak256("_MIGRATOR");
    bytes32 constant _MIN_EXECUTION_DATE =
        0x46f7d53798d31923f6952572c6a19ad2d1a8238d26649c2f3493a6d69e425d28; //keccak256("_MIN_EXECUTION_DATE");
    bytes32 constant _MINER_SLOT =
        0x6de96ee4d33a0617f40a846309c8759048857f51b9d59a12d3c3786d4778883d; //keccak256("_MINER_SLOT");
    bytes32 constant _NUM_OF_VOTES =
        0x1da378694063870452ce03b189f48e04c1aa026348e74e6c86e10738514ad2c4; //keccak256("_NUM_OF_VOTES");
    bytes32 constant _OLD_TELLOR =
        0x56e0987db9eaec01ed9e0af003a0fd5c062371f9d23722eb4a3ebc74f16ea371; //keccak256("_OLD_TELLOR");
    bytes32 constant _ORIGINAL_ID =
        0xed92b4c1e0a9e559a31171d487ecbec963526662038ecfa3a71160bd62fb8733; //keccak256("_ORIGINAL_ID");
    bytes32 constant _OWNER =
        0x7a39905194de50bde334d18b76bbb36dddd11641d4d50b470cb837cf3bae5def; //keccak256("_OWNER");
    bytes32 constant _PAID =
        0x29169706298d2b6df50a532e958b56426de1465348b93650fca42d456eaec5fc; //keccak256("_PAID");
    bytes32 constant _PENDING_OWNER =
        0x7ec081f029b8ac7e2321f6ae8c6a6a517fda8fcbf63cabd63dfffaeaafa56cc0; //keccak256("_PENDING_OWNER");
    bytes32 constant _REQUEST_COUNT =
        0x3f8b5616fa9e7f2ce4a868fde15c58b92e77bc1acd6769bf1567629a3dc4c865; //keccak256("_REQUEST_COUNT");
    bytes32 constant _REQUEST_ID =
        0x9f47a2659c3d32b749ae717d975e7962959890862423c4318cf86e4ec220291f; //keccak256("_REQUEST_ID");
    bytes32 constant _REQUEST_Q_POSITION =
        0xf68d680ab3160f1aa5d9c3a1383c49e3e60bf3c0c031245cbb036f5ce99afaa1; //keccak256("_REQUEST_Q_POSITION");
    bytes32 constant _SLOT_PROGRESS =
        0xdfbec46864bc123768f0d134913175d9577a55bb71b9b2595fda21e21f36b082; //keccak256("_SLOT_PROGRESS");
    bytes32 constant _STAKE_AMOUNT =
        0x5d9fadfc729fd027e395e5157ef1b53ef9fa4a8f053043c5f159307543e7cc97; //keccak256("_STAKE_AMOUNT");
    bytes32 constant _STAKE_COUNT =
        0x10c168823622203e4057b65015ff4d95b4c650b308918e8c92dc32ab5a0a034b; //keccak256("_STAKE_COUNT");
    bytes32 constant _T_BLOCK =
        0xf3b93531fa65b3a18680d9ea49df06d96fbd883c4889dc7db866f8b131602dfb; //keccak256("_T_BLOCK");
    bytes32 constant _TALLY_DATE =
        0xf9e1ae10923bfc79f52e309baf8c7699edb821f91ef5b5bd07be29545917b3a6; //keccak256("_TALLY_DATE");
    bytes32 constant _TARGET_MINERS =
        0x0b8561044b4253c8df1d9ad9f9ce2e0f78e4bd42b2ed8dd2e909e85f750f3bc1; //keccak256("_TARGET_MINERS");
    bytes32 constant _TELLOR_CONTRACT =
        0x0f1293c916694ac6af4daa2f866f0448d0c2ce8847074a7896d397c961914a08; //keccak256("_TELLOR_CONTRACT");
    bytes32 constant _TELLOR_GETTERS =
        0xabd9bea65759494fe86471c8386762f989e1f2e778949e94efa4a9d1c4b3545a; //keccak256("_TELLOR_GETTERS");
    bytes32 constant _TIME_OF_LAST_NEW_VALUE =
        0x2c8b528fbaf48aaf13162a5a0519a7ad5a612da8ff8783465c17e076660a59f1; //keccak256("_TIME_OF_LAST_NEW_VALUE");
    bytes32 constant _TIME_TARGET =
        0xd4f87b8d0f3d3b7e665df74631f6100b2695daa0e30e40eeac02172e15a999e1; //keccak256("_TIME_TARGET");
    bytes32 constant _TIMESTAMP =
        0x2f9328a9c75282bec25bb04befad06926366736e0030c985108445fa728335e5; //keccak256("_TIMESTAMP");
    bytes32 constant _TOTAL_SUPPLY =
        0xe6148e7230ca038d456350e69a91b66968b222bfac9ebfbea6ff0a1fb7380160; //keccak256("_TOTAL_SUPPLY");
    bytes32 constant _TOTAL_TIP =
        0x1590276b7f31dd8e2a06f9a92867333eeb3eddbc91e73b9833e3e55d8e34f77d; //keccak256("_TOTAL_TIP");
    bytes32 constant _VALUE =
        0x9147231ab14efb72c38117f68521ddef8de64f092c18c69dbfb602ffc4de7f47; //keccak256("_VALUE");
    bytes32 constant _EIP_SLOT =
        0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 300
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_value","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_reporter","type":"address"}],"name":"NewReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newReportingLock","type":"uint256"}],"name":"ReportingLockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newTimeBasedReward","type":"uint256"}],"name":"TimeBasedRewardsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_tip","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTip","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"TipAdded","type":"event"},{"inputs":[{"internalType":"uint256","name":"_newReportingLock","type":"uint256"}],"name":"changeReportingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTimeBasedReward","type":"uint256"}],"name":"changeTimeBasedReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getBlockNumberByTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentValue","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getReportTimestampByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getReporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_reporter","type":"address"}],"name":"getReporterLastTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReportingLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_reporter","type":"address"}],"name":"getReportsSubmittedByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeBasedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeOfLastNewValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getTimestampCountById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getTimestampIndexByTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getTipsById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTipsByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getValueByTimestamp","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"removeValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reportingLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"submitValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeBasedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeOfLastNewValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_tip","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"tipQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"tips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tipsInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verify","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

608060405261a8c06000556706f05b59d3b200006001554260025534801561002657600080fd5b50611e52806100366000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80636fd4f229116100ee578063adf1639d11610097578063e07c548611610071578063e07c5486146103d7578063ef0234ad14610426578063ef4c262d14610439578063fc735e9914610459576101ae565b8063adf1639d14610393578063b736ec36146103a6578063c0f95d52146103cf576101ae565b806396426d97116100c857806396426d97146103335780639d9b16ed1461033c578063a1e588a51461036b576101ae565b80636fd4f229146102e85780637c37b8b4146102f1578063935408d014610304576101ae565b806350005b831161015b5780635eaa9ced116101355780635eaa9ced14610299578063602bf227146102ac57806369d43bd3146102cc5780636d53585f146102d5576101ae565b806350005b83146102485780635b5edcfc146102715780635d183cfa14610286576101ae565b806335e724321161018c57806335e72432146101f75780633878293e14610217578063460c33a214610240576101ae565b80630b2d2b0d146101b357806314d66b9a146101dc5780633321fc41146101ee575b600080fd5b6101c66101c1366004611b70565b610461565b6040516101d39190611cd9565b60405180910390f35b6001545b6040519081526020016101d3565b6101e060005481565b6101e0610205366004611ab3565b60009081526004602052604090205490565b6101e0610225366004611a54565b6001600160a01b031660009081526007602052604090205490565b6000546101e0565b6101e0610256366004611a54565b6001600160a01b031660009081526006602052604090205490565b61028461027f366004611b70565b610512565b005b610284610294366004611ab3565b6108b6565b6102846102a7366004611acb565b610a64565b6101e06102ba366004611ab3565b60056020526000908152604090205481565b6101e060035481565b6102846102e3366004611ab3565b611153565b6101e060025481565b6101e06102ff366004611b70565b6112b2565b6101e0610312366004611b70565b60009182526004602090815260408084209284526002909201905290205490565b6101e060015481565b6101e061034a366004611b70565b60009182526004602090815260408084209284526001909201905290205490565b61037e610379366004611ab3565b6112f3565b604080519283526020830191909152016101d3565b6101c66103a1366004611ab3565b61146a565b6101e06103b4366004611a54565b6001600160a01b031660009081526008602052604090205490565b6002546101e0565b61040e6103e5366004611b70565b60009182526004602081815260408085209385529290910190529020546001600160a01b031690565b6040516001600160a01b0390911681526020016101d3565b610284610434366004611b91565b611557565b6101e0610447366004611ab3565b60009081526005602052604090205490565b61270f6101e0565b6000828152600460209081526040808320848452600301909152902080546060919061048c90611d82565b80601f01602080910402602001604051908101604052809291908181526020018280546104b890611d82565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b5050505050905092915050565b60405163699f200f60e01b81527fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd9360048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b69190611a77565b6001600160a01b0316336001600160a01b03161480610689575060405163699f200f60e01b81527ffa522e460446113e8fd353d7fa015625a68bc0369712213a42e006346440891e60048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b15801561063c57600080fd5b505af1158015610650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106749190611a77565b6001600160a01b0316336001600160a01b0316145b6107005760405162461bcd60e51b815260206004820152603d60248201527f63616c6c6572206d7573742062652074686520676f7665726e616e636520636f60448201527f6e7472616374206f7220746865206f7261636c6520636f6e747261637400000060648201526084015b60405180910390fd5b60008281526004602090815260408083208484526001810190925290912054805b825461072f90600190611d6b565b8110156108075782610742826001611d14565b8154811061076057634e487b7160e01b600052603260045260246000fd5b906000526020600020015483600001828154811061078e57634e487b7160e01b600052603260045260246000fd5b906000526020600020018190555060018360010160008560000184815481106107c757634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060008282546107ef9190611d6b565b909155508190506107ff81611dbd565b915050610721565b508154829061081890600190611d6b565b8154811061083657634e487b7160e01b600052603260045260246000fd5b6000918252602082200155815482908061086057634e487b7160e01b600052603160045260246000fd5b6000828152602080822083016000199081018390559092019092556040805180830180835284825287855260038701909352922091516108a19291906118c0565b50506000918252600101602052604081205550565b60405163699f200f60e01b81527fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd9360048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a9190611a77565b6001600160a01b0316336001600160a01b0316146109d65760405162461bcd60e51b815260206004820152603360248201527f4f6e6c7920676f7665726e616e636520636f6e74726163742063616e206368616044820152723733b2903932b837b93a34b733903637b1b59760691b60648201526084016106f7565b6283d6008110610a285760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964205f6e65775265706f7274696e674c6f636b2076616c75650060448201526064016106f7565b60008190556040518181527f8867dac9fd763aeaa408825321cc53f6fd67a46ea326adadfd2a378d17fedf22906020015b60405180910390a150565b600085815260046020526040902080548314610ac25760405162461bcd60e51b815260206004820181905260248201527f6e6f6e6365206d757374206d617463682074696d657374616d7020696e64657860448201526064016106f7565b600080543382526006602052604090912054610ade9042611d6b565b11610b3d5760405162461bcd60e51b815260206004820152602960248201527f7374696c6c20696e207265706f727465722074696d65206c6f636b2c20706c6560448201526861736520776169742160b81b60648201526084016106f7565b60405163699f200f60e01b81527ffa522e460446113e8fd353d7fa015625a68bc0369712213a42e006346440891e60048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be19190611a77565b6001600160a01b0316306001600160a01b031614610c545760405162461bcd60e51b815260206004820152602a60248201527f63616e206f6e6c79207375626d697420746f2063757272656e74206f7261636c604482015269194818dbdb9d1c9858dd60b21b60648201526084016106f7565b81516020830120861480610c69575060648611155b610cb55760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016106f7565b3360008181526006602052604080822042905551630733bdef60e41b815260048101929092527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a091829063733bdef090602401604080518083038186803b158015610d1357600080fd5b505afa158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b9190611bf7565b50905080600114610d9e5760405162461bcd60e51b815260206004820152601d60248201527f5265706f7274657220737461747573206973206e6f74207374616b657200000060448201526064016106f7565b604051632d67853560e21b81527f5d9fadfc729fd027e395e5157ef1b53ef9fa4a8f053043c5f159307543e7cc9760048201526001600160a01b0383169063b59e14d490602401602060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190611bdf565b6040516370a0823160e01b81523360048201526001600160a01b038416906370a082319060240160206040518083038186803b158015610e7657600080fd5b505afa158015610e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eae9190611bdf565b1015610f0e5760405162461bcd60e51b815260206004820152602960248201527f62616c616e6365206d7573742062652067726561746572207468616e207374616044820152681ad948185b5bdd5b9d60ba1b60648201526084016106f7565b4260009081526004840160205260409020546001600160a01b031615610f765760405162461bcd60e51b815260206004820152601e60248201527f74696d657374616d7020616c7265616479207265706f7274656420666f72000060448201526064016106f7565b82544260008181526001808701602090815260408084208690559185018855878352808320909401839055918152600286018352818120439055600386019092529020610fc4908888611944565b504260009081526004840160205260408120805473ffffffffffffffffffffffffffffffffffffffff19163317905580610ffd8a6112f3565b9150915081600360008282546110139190611d6b565b90915550600090506110258383611d14565b11156110c5576001600160a01b03841663a9059cbb336110458585611d14565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c39190611a93565b505b60008a815260056020908152604080832083905542600255338352600790915281208054916110f383611dbd565b909155507fab1d593f8e2ecb165106e30a39db6769078d35c3fdbb110f24932f0d7af68c2990508a428b8b6111288688611d14565b8c8c3360405161113f989796959493929190611c65565b60405180910390a150505050505050505050565b60405163699f200f60e01b81527fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd9360048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f79190611a77565b6001600160a01b0316336001600160a01b03161461127d5760405162461bcd60e51b815260206004820152603660248201527f4f6e6c7920676f7665726e616e636520636f6e74726163742063616e2063686160448201527f6e67652074696d65206261736564207265776172642e0000000000000000000060648201526084016106f7565b60018190556040518181527f01432c5d54689da3dbfec924c89d1e453ecaec349928ceabd50207e909e8f7de90602001610a59565b60008281526004602052604081208054839081106112e057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60008060007388df592f8eb5d7bd38bfef7deb0fbc02cf3778a0905060006002544261131f9190611d6b565b9050600061012c600154836113349190611d4c565b61133e9190611d2c565b90506003548161134e9190611d14565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c59190611bdf565b1015611452576003546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114459190611bdf565b61144f9190611d6b565b90505b60009586526005602052604090952054959350505050565b600081815260046020526040812080546060926003830192909161149090600190611d6b565b815481106114ae57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002080546114d290611d82565b80601f01602080910402602001604051908101604052809291908181526020018280546114fe90611d82565b801561154b5780601f106115205761010080835404028352916020019161154b565b820191906000526020600020905b81548152906001019060200180831161152e57829003601f168201915b50505050509050919050565b600182116115a75760405162461bcd60e51b815260206004820152601c60248201527f5469702073686f756c642062652067726561746572207468616e20310000000060448201526064016106f7565b60405163288c9c9d60e01b8152336004820152306024820152604481018390527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063288c9c9d90606401602060405180830381600087803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116389190611a93565b6116775760405162461bcd60e51b815260206004820152601060248201526f1d1a5c081b5d5cdd081899481c185a5960821b60448201526064016106f7565b8051602082012083148061168c575060648311155b8061174b575060405163699f200f60e01b81527fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd9360048201527388df592f8eb5d7bd38bfef7deb0fbc02cf3778a09063699f200f90602401602060405180830381600087803b1580156116fe57600080fd5b505af1158015611712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117369190611a77565b6001600160a01b0316336001600160a01b0316145b6117975760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016106f7565b6117a2600283611d2c565b604051630852cd8d60e31b8152600481018290529092507388df592f8eb5d7bd38bfef7deb0fbc02cf3778a0906342966c6890602401600060405180830381600087803b1580156117f257600080fd5b505af1158015611806573d6000803e3d6000fd5b5050506000848152600560205260408120805485935090919061182a908490611d14565b9091555050336000908152600860205260408120805484929061184e908490611d14565b9250508190555081600360008282546118679190611d14565b909155505060008381526005602052604090819020549051849133917fd951d408a0f5057da5c25b826fb5ce403d56542962b6ac6994dbc6d5432fbff5916118b3918791908790611cec565b60405180910390a3505050565b8280546118cc90611d82565b90600052602060002090601f0160209004810192826118ee5760008555611934565b82601f1061190757805160ff1916838001178555611934565b82800160010185558215611934579182015b82811115611934578251825591602001919060010190611919565b506119409291506119b8565b5090565b82805461195090611d82565b90600052602060002090601f0160209004810192826119725760008555611934565b82601f1061198b5782800160ff19823516178555611934565b82800160010185558215611934579182015b8281111561193457823582559160200191906001019061199d565b5b8082111561194057600081556001016119b9565b600082601f8301126119dd578081fd5b813567ffffffffffffffff808211156119f8576119f8611dee565b604051601f8301601f19908116603f01168101908282118183101715611a2057611a20611dee565b81604052838152866020858801011115611a38578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611a65578081fd5b8135611a7081611e04565b9392505050565b600060208284031215611a88578081fd5b8151611a7081611e04565b600060208284031215611aa4578081fd5b81518015158114611a70578182fd5b600060208284031215611ac4578081fd5b5035919050565b600080600080600060808688031215611ae2578081fd5b85359450602086013567ffffffffffffffff80821115611b00578283fd5b818801915088601f830112611b13578283fd5b813581811115611b21578384fd5b896020828501011115611b32578384fd5b60208301965080955050604088013593506060880135915080821115611b56578283fd5b50611b63888289016119cd565b9150509295509295909350565b60008060408385031215611b82578182fd5b50508035926020909101359150565b600080600060608486031215611ba5578283fd5b8335925060208401359150604084013567ffffffffffffffff811115611bc9578182fd5b611bd5868287016119cd565b9150509250925092565b600060208284031215611bf0578081fd5b5051919050565b60008060408385031215611c09578182fd5b505080516020909101519092909150565b60008151808452815b81811015611c3f57602081850181015186830182015201611c23565b81811115611c505782602083870101525b50601f01601f19169290920160200192915050565b600089825288602083015260e060408301528660e083015261010087898285013781818985010152601f19601f8901168301876060850152866080850152818482030160a0850152611cb982820187611c1a565b925050506001600160a01b03831660c08301529998505050505050505050565b600060208252611a706020830184611c1a565b600084825283602083015260606040830152611d0b6060830184611c1a565b95945050505050565b60008219821115611d2757611d27611dd8565b500190565b600082611d4757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611d6657611d66611dd8565b500290565b600082821015611d7d57611d7d611dd8565b500390565b600181811c90821680611d9657607f821691505b60208210811415611db757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611dd157611dd1611dd8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e1957600080fd5b5056fea26469706673582212201ec320c16a6f6431c31e1fa0184ecb5db4f3edfb5dedfa957962f63c8925874e64736f6c63430008030033

Block Transaction Difficulty Gas Used Reward
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.