ETH Price: $2,709.98 (-1.14%)
Gas: 3.77 Gwei

Contract

0xE2567c521CCDf707F0Ef804DE17B4Ec2fcc8a94b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Governance Add T...127549432021-07-03 13:44:441314 days ago1625319884IN
0xE2567c52...2fcc8a94b
0 ETH0.0007062615
Governance Add T...127549352021-07-03 13:42:221314 days ago1625319742IN
0xE2567c52...2fcc8a94b
0 ETH0.0005414611.5
Governance Add T...127502442021-07-02 20:05:351314 days ago1625256335IN
0xE2567c52...2fcc8a94b
0 ETH0.0008475118

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GenericSpentETHOracle

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-06-19
*/

// Spent ETH Oracle for Reeth
// This oracle collects eth data from various whitelisted data sources to generate a database of eth spent data for users
// The ETH spent data will be used by the Reeth Claimer to determine how much cashback to reward to zs-Reeth holders
// 
// Governance can update whitelisted addresses, change eth spent balances per user and update the iteration of the oracle (which resets all balances to 0)

pragma solidity =0.6.6;

contract GenericSpentETHOracle {

    address public governance;
    uint256 private _globalIteration; // This resets all the balances back to 0
    
    mapping(address => UserInfo) private allUsersInfo;
    mapping(address => bool) private providers; // This will be a list of all providers eligible
    
    event GovernanceUpdated(address _add);
    event ProviderAdded(address _add);
    event ProviderRemoved(address _add);
    event NewIteration(uint256 _iter);
    event UserETHSpentUpdated(address _updater, address _user, uint256 _amount);
    
    // Structs
    struct UserInfo {
        uint256 ethSpent; // The amount of eth spent since last claim
        uint256 iteration; // The iteration version of the user
    }

    constructor() public {
        governance = msg.sender;
    }
    
    modifier onlyGovernance() {
        require(governance == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    
    function getCurrentIteration() external view returns (uint256) {
        return _globalIteration;
    }
    
    function getUserETHSpent(address _add) external view returns (uint256) {
        if(allUsersInfo[_add].iteration < _globalIteration){
            return 0; // The user is on an old iteration of this oracle
        }else{
            return allUsersInfo[_add].ethSpent; // Get the eth septn
        }
    }
    
    function getUserIteration(address _add) external view returns (uint256) {
        return allUsersInfo[_add].iteration;
    }
    
    function isAddressProvider(address _add) public view returns (bool) {
        return providers[_add];
    }
    
    // Write functions
    // Whitelisted contracts can call this oracle to update the amount the user spent to perform a call
    function addUserETHSpent(address _add, uint256 _ethback) external returns (bool) {
        if(isAddressProvider(msg.sender) == false){
            return false; // Don't revert, just return false instead
        }
        if(allUsersInfo[_add].iteration < _globalIteration){
            allUsersInfo[_add].iteration = _globalIteration;
            allUsersInfo[_add].ethSpent = 0;
        }
        allUsersInfo[_add].ethSpent = allUsersInfo[_add].ethSpent + _ethback; // Overflow is ok
        emit UserETHSpentUpdated(msg.sender, _add, _ethback); // Create an event
        return true; // This function will never revert so safe to be integrated
    }
    
    // Governance functions
    function updateGovernanceAddress(address _add) external onlyGovernance {
        require(_add != address(0), "Can't set to 0 address");
        governance = _add;
        emit GovernanceUpdated(_add);
    }
    
    function governanceUpdateUserETHSpent(address _add, uint256 amount) external onlyGovernance {
        // Governance can update users balances manually in case of errors
        allUsersInfo[_add].iteration = _globalIteration; // Set to the current iteration
        allUsersInfo[_add].ethSpent = amount;
    }
    
    function governanceAddToProviders(address _add) external onlyGovernance {
        providers[_add] = true;
        emit ProviderAdded(_add);
    }
    
    function governanceRemoveFromProviders(address _add) external onlyGovernance {
        providers[_add] = false;
        emit ProviderRemoved(_add);
    }
    
    function governanceNewIteration() external onlyGovernance {
        // This will reset all ETH spends back to zero
        _globalIteration = _globalIteration + 1;
        emit NewIteration(_globalIteration);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_add","type":"address"}],"name":"GovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_iter","type":"uint256"}],"name":"NewIteration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_add","type":"address"}],"name":"ProviderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_add","type":"address"}],"name":"ProviderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_updater","type":"address"},{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"UserETHSpentUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"uint256","name":"_ethback","type":"uint256"}],"name":"addUserETHSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentIteration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getUserETHSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getUserIteration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"governanceAddToProviders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governanceNewIteration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"governanceRemoveFromProviders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"governanceUpdateUserETHSpent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"isAddressProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"updateGovernanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561074c806100326000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80636faabf5f116100715780636faabf5f14610186578063a3f98823146101a0578063b7a5116e146101c6578063b90d8930146101ec578063ca15efd114610212578063da9dfa0a1461021a576100a9565b806306348f3e146100ae5780630c7fc7c3146100d65780633b3fa241146100fc5780634a5db28c1461013c5780635aa6e67514610162575b600080fd5b6100d4600480360360208110156100c457600080fd5b50356001600160a01b0316610246565b005b6100d4600480360360208110156100ec57600080fd5b50356001600160a01b03166102eb565b6101286004803603604081101561011257600080fd5b506001600160a01b038135169060200135610393565b604080519115158252519081900360200190f35b6101286004803603602081101561015257600080fd5b50356001600160a01b031661045f565b61016a610481565b604080516001600160a01b039092168252519081900360200190f35b61018e610490565b60408051918252519081900360200190f35b61018e600480360360208110156101b657600080fd5b50356001600160a01b0316610496565b61018e600480360360208110156101dc57600080fd5b50356001600160a01b03166104e3565b6100d46004803603602081101561020257600080fd5b50356001600160a01b0316610501565b6100d46105f6565b6100d46004803603604081101561023057600080fd5b506001600160a01b038135169060200135610681565b6000546001600160a01b03163314610293576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020908152604091829020805460ff19169055815192835290517f1589f8555933761a3cff8aa925061be3b46e2dd43f621322ab611d300f62b1d99281900390910190a150565b6000546001600160a01b03163314610338576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020908152604091829020805460ff19166001179055815192835290517fae9c2c6481964847714ce58f65a7f6dcc41d0d8394449bacdf161b5920c4744a9281900390910190a150565b600061039e3361045f565b6103aa57506000610459565b600180546001600160a01b03851660009081526002602052604090209091015410156103f657600180546001600160a01b03851660009081526002602052604081209283019190915590555b6001600160a01b038316600081815260026020908152604091829020805486019055815133815290810192909252818101849052517f27c0b38d54c0fe7cc1e3d5df15b1359be59cb43a10e706959eac8f5d6d1ee73d9181900360600190a15060015b92915050565b6001600160a01b03811660009081526003602052604090205460ff165b919050565b6000546001600160a01b031681565b60015490565b600180546001600160a01b03831660009081526002602052604081209092015410156104c45750600061047c565b506001600160a01b03811660009081526002602052604090205461047c565b6001600160a01b031660009081526002602052604090206001015490565b6000546001600160a01b0316331461054e576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166105a2576040805162461bcd60e51b815260206004820152601660248201527543616e27742073657420746f2030206164647265737360501b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b6000546001600160a01b03163314610643576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001805481019081905560408051918252517f5897baeb88942cacf61155dbb84caf33542aeca607ce229e604a28ce18cdc7c59181900360200190a1565b6000546001600160a01b031633146106ce576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b600180546001600160a01b03909316600090815260026020526040902090810192909255905556fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201cd20522a406094a23b622cfd0a58bc59a5f4d7935eace913a5bee6aeb304f2364736f6c63430006060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80636faabf5f116100715780636faabf5f14610186578063a3f98823146101a0578063b7a5116e146101c6578063b90d8930146101ec578063ca15efd114610212578063da9dfa0a1461021a576100a9565b806306348f3e146100ae5780630c7fc7c3146100d65780633b3fa241146100fc5780634a5db28c1461013c5780635aa6e67514610162575b600080fd5b6100d4600480360360208110156100c457600080fd5b50356001600160a01b0316610246565b005b6100d4600480360360208110156100ec57600080fd5b50356001600160a01b03166102eb565b6101286004803603604081101561011257600080fd5b506001600160a01b038135169060200135610393565b604080519115158252519081900360200190f35b6101286004803603602081101561015257600080fd5b50356001600160a01b031661045f565b61016a610481565b604080516001600160a01b039092168252519081900360200190f35b61018e610490565b60408051918252519081900360200190f35b61018e600480360360208110156101b657600080fd5b50356001600160a01b0316610496565b61018e600480360360208110156101dc57600080fd5b50356001600160a01b03166104e3565b6100d46004803603602081101561020257600080fd5b50356001600160a01b0316610501565b6100d46105f6565b6100d46004803603604081101561023057600080fd5b506001600160a01b038135169060200135610681565b6000546001600160a01b03163314610293576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020908152604091829020805460ff19169055815192835290517f1589f8555933761a3cff8aa925061be3b46e2dd43f621322ab611d300f62b1d99281900390910190a150565b6000546001600160a01b03163314610338576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260036020908152604091829020805460ff19166001179055815192835290517fae9c2c6481964847714ce58f65a7f6dcc41d0d8394449bacdf161b5920c4744a9281900390910190a150565b600061039e3361045f565b6103aa57506000610459565b600180546001600160a01b03851660009081526002602052604090209091015410156103f657600180546001600160a01b03851660009081526002602052604081209283019190915590555b6001600160a01b038316600081815260026020908152604091829020805486019055815133815290810192909252818101849052517f27c0b38d54c0fe7cc1e3d5df15b1359be59cb43a10e706959eac8f5d6d1ee73d9181900360600190a15060015b92915050565b6001600160a01b03811660009081526003602052604090205460ff165b919050565b6000546001600160a01b031681565b60015490565b600180546001600160a01b03831660009081526002602052604081209092015410156104c45750600061047c565b506001600160a01b03811660009081526002602052604090205461047c565b6001600160a01b031660009081526002602052604090206001015490565b6000546001600160a01b0316331461054e576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166105a2576040805162461bcd60e51b815260206004820152601660248201527543616e27742073657420746f2030206164647265737360501b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b6000546001600160a01b03163314610643576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b6001805481019081905560408051918252517f5897baeb88942cacf61155dbb84caf33542aeca607ce229e604a28ce18cdc7c59181900360200190a1565b6000546001600160a01b031633146106ce576040805162461bcd60e51b815260206004820181905260248201526000805160206106f7833981519152604482015290519081900360640190fd5b600180546001600160a01b03909316600090815260026020526040902090810192909255905556fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201cd20522a406094a23b622cfd0a58bc59a5f4d7935eace913a5bee6aeb304f2364736f6c63430006060033

Deployed Bytecode Sourcemap

462:3606:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;462:3606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;3673:156:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3673:156:0;-1:-1:-1;;;;;3673:156:0;;:::i;:::-;;3513:148;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3513:148:0;-1:-1:-1;;;;;3513:148:0;;:::i;2260:665::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;2260:665:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2010:109;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2010:109:0;-1:-1:-1;;;;;2010:109:0;;:::i;502:25::-;;;:::i;:::-;;;;-1:-1:-1;;;;;502:25:0;;;;;;;;;;;;;;1432:105;;;:::i;:::-;;;;;;;;;;;;;;;;1549:311;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1549:311:0;-1:-1:-1;;;;;1549:311:0;;:::i;1872:126::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1872:126:0;-1:-1:-1;;;;;1872:126:0;;:::i;2966:210::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2966:210:0;-1:-1:-1;;;;;2966:210:0;;:::i;3841:218::-;;;:::i;3188:313::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;3188:313:0;;;;;;;;:::i;3673:156::-;1339:10;;-1:-1:-1;;;;;1339:10:0;1353;1339:24;1331:69;;;;;-1:-1:-1;;;1331:69:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1331:69:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3761:15:0;::::1;3779:5;3761:15:::0;;;:9:::1;:15;::::0;;;;;;;;:23;;-1:-1:-1;;3761:23:0::1;::::0;;3800:21;;;;;;;::::1;::::0;;;;;;;;::::1;3673:156:::0;:::o;3513:148::-;1339:10;;-1:-1:-1;;;;;1339:10:0;1353;1339:24;1331:69;;;;;-1:-1:-1;;;1331:69:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1331:69:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3596:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;;;;:22;;-1:-1:-1;;3596:22:0::1;3614:4;3596:22;::::0;;3634:19;;;;;;;::::1;::::0;;;;;;;;::::1;3513:148:::0;:::o;2260:665::-;2335:4;2355:29;2373:10;2355:17;:29::i;:::-;2352:124;;-1:-1:-1;2416:5:0;2409:12;;2352:124;2520:16;;;-1:-1:-1;;;;;2489:18:0;;;;;;:12;:18;;;;;:28;;;;:47;2486:171;;;2583:16;;;-1:-1:-1;;;;;2552:18:0;;;;;;:12;:18;;;;;:28;;;:47;;;;2614:31;;2486:171;-1:-1:-1;;;;;2697:18:0;;;;;;:12;:18;;;;;;;;;:27;;:38;;2667:68;;2769:47;;2789:10;2769:47;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2853:4:0;2260:665;;;;;:::o;2010:109::-;-1:-1:-1;;;;;2096:15:0;;2072:4;2096:15;;;:9;:15;;;;;;;;2010:109;;;;:::o;502:25::-;;;-1:-1:-1;;;;;502:25:0;;:::o;1432:105::-;1513:16;;1432:105;:::o;1549:311::-;1665:16;;;-1:-1:-1;;;;;1634:18:0;;1611:7;1634:18;;;:12;:18;;;;;:28;;;;:47;1631:222;;;-1:-1:-1;1704:1:0;1697:8;;1631:222;-1:-1:-1;;;;;;1793:18:0;;;;;;:12;:18;;;;;:27;1786:34;;1872:126;-1:-1:-1;;;;;1962:18:0;1935:7;1962:18;;;:12;:18;;;;;:28;;;;1872:126::o;2966:210::-;1339:10;;-1:-1:-1;;;;;1339:10:0;1353;1339:24;1331:69;;;;;-1:-1:-1;;;1331:69:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1331:69:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3056:18:0;::::1;3048:53;;;::::0;;-1:-1:-1;;;3048:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3048:53:0;;;;;;;;;;;;;::::1;;3112:10;:17:::0;;-1:-1:-1;;;;;3112:17:0;::::1;-1:-1:-1::0;;;;;;3112:17:0;;::::1;::::0;::::1;::::0;;;3145:23:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;2966:210:::0;:::o;3841:218::-;1339:10;;-1:-1:-1;;;;;1339:10:0;1353;1339:24;1331:69;;;;;-1:-1:-1;;;1331:69:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1331:69:0;;;;;;;;;;;;;;;3985:16:::1;::::0;;:20;::::1;3966:39:::0;;;;4021:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3841:218::o:0;3188:313::-;1339:10;;-1:-1:-1;;;;;1339:10:0;1353;1339:24;1331:69;;;;;-1:-1:-1;;;1331:69:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1331:69:0;;;;;;;;;;;;;;;3398:16:::1;::::0;;-1:-1:-1;;;;;3367:18:0;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:28;;::::1;:47:::0;;;;3457:36;;3188:313::o

Swarm Source

ipfs://1cd20522a406094a23b622cfd0a58bc59a5f4d7935eace913a5bee6aeb304f23

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.