Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
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
Contract Source Code (Solidity)
/** *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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.