- Contract name:
- Treasury
- Optimization enabled
- true
- Compiler version
- v0.8.18+commit.87f61d96
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-03-07T12:50:32.127578Z
Contract source code
// SPDX-License-Identifier: MIT pragma solidity 0.8.18; contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); } contract Treasury is Ownable { address[] public _addresses; mapping (address => uint256) private _indexs; mapping (address => bool) private _inserted; mapping (address => bool) public _isExcludedFromReward; IERC20 private token; uint256 public coinBalance = 0; uint256 private index = 0; //private before production deployment uint256 public minBalForDividens; constructor() { minBalForDividens = 10000 * (10**9); } function isContract(address _address) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_address) } return size > 0; } function circulatingSupply() internal view returns (uint256) { uint256 _circulatingSupply = 0; for(uint256 i=0; i<_addresses.length; i++) { address addr = _addresses[i]; if(!_isExcludedFromReward[addr]) { _circulatingSupply += token.balanceOf(addr); } } return _circulatingSupply; } function bindWith(address _tokenAddress) external onlyOwner() { token = IERC20(_tokenAddress); transferOwnership(_tokenAddress); } function addAddress(address account) external onlyOwner() { if (!_inserted[account] && !isContract(account)) { _inserted[account] = true; _indexs[account] = _addresses.length; _addresses.push(account); } } event DividendsSent(address, uint256, uint256); function sendDividensToHolders() external onlyOwner() { if(_addresses.length<1) { return; } if(coinBalance<1000*10**18) { return; } if(index>_addresses.length-1) { index = 0; coinBalance = address(this).balance; } address addr = _addresses[index]; if(_inserted[addr] && token.balanceOf(addr)>minBalForDividens && !_isExcludedFromReward[addr] && !isContract(addr)) { uint256 _circulatingSupply = circulatingSupply(); uint256 _bal = token.balanceOf(addr); uint256 dividens = (coinBalance*_bal)/_circulatingSupply; if(dividens>0) { address payable account = payable(addr); account.transfer(dividens); emit DividendsSent(addr, dividens, block.timestamp); } } index++; } function excludeFromReward(address addr, bool _enable) external onlyOwner() { _isExcludedFromReward[addr] = _enable; } function getTotalAddresses() public view returns(uint256) { return _addresses.length; } receive() external payable {} }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"DividendsSent","inputs":[{"type":"address","name":"","internalType":"address","indexed":false},{"type":"uint256","name":"","internalType":"uint256","indexed":false},{"type":"uint256","name":"","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_addresses","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_isExcludedFromReward","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAddress","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bindWith","inputs":[{"type":"address","name":"_tokenAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"coinBalance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromReward","inputs":[{"type":"address","name":"addr","internalType":"address"},{"type":"bool","name":"_enable","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getTotalAddresses","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minBalForDividens","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sendDividensToHolders","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Deployed ByteCode
0x6080604052600436106100a05760003560e01c80638da5cb5b116100645780638da5cb5b1461018f57806399166f7d146101ad578063d26c8a8a146101c2578063db11b8bf146101d8578063f2fde38b146101ed578063fdd5d7241461020d57600080fd5b806335c6f9bc146100ac57806338eada1c146100ce5780633c6ca5c1146100ee5780634f82517c146101335780635adb26ef1461016b57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610856565b61022d565b005b3480156100da57600080fd5b506100cc6100e9366004610892565b61028b565b3480156100fa57600080fd5b5061011e610109366004610892565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561013f57600080fd5b5061015361014e3660046108b4565b610357565b6040516001600160a01b03909116815260200161012a565b34801561017757600080fd5b5061018160085481565b60405190815260200161012a565b34801561019b57600080fd5b506000546001600160a01b0316610153565b3480156101b957600080fd5b50600154610181565b3480156101ce57600080fd5b5061018160065481565b3480156101e457600080fd5b506100cc610381565b3480156101f957600080fd5b506100cc610208366004610892565b61061b565b34801561021957600080fd5b506100cc610228366004610892565b610705565b6000546001600160a01b031633146102605760405162461bcd60e51b8152600401610257906108cd565b60405180910390fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146102b55760405162461bcd60e51b8152600401610257906108cd565b6001600160a01b03811660009081526003602052604090205460ff161580156102dd5750803b155b15610354576001600160a01b0381166000818152600360209081526040808320805460ff191660019081179091558054600290935290832082905581810181559091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191690911790555b50565b6001818154811061036757600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146103ab5760405162461bcd60e51b8152600401610257906108cd565b600180541061061957683635c9adc5dea000006006541061061957600180546103d49190610918565b60075411156103e7576000600755476006555b60006001600754815481106103fe576103fe610931565b60009182526020808320909101546001600160a01b0316808352600390915260409091205490915060ff1680156104a357506008546005546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a19190610947565b115b80156104c857506001600160a01b03811660009081526004602052604090205460ff16155b80156104d35750803b155b156106025760006104e2610753565b6005546040516370a0823160e01b81526001600160a01b038581166004830152929350600092909116906370a0823190602401602060405180830381865afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190610947565b9050600082826006546105699190610960565b6105739190610977565b905080156105fe5760405184906001600160a01b0382169083156108fc029084906000818181858888f193505050501580156105b3573d6000803e3d6000fd5b50604080516001600160a01b038716815260208101849052428183015290517ff8828ef2464bbae2cc83cbc71f3b0cade1777f841b7933165398716b29b7c9da9181900360600190a1505b5050505b6007805490600061061283610999565b9190505550505b565b6000546001600160a01b031633146106455760405162461bcd60e51b8152600401610257906108cd565b6001600160a01b0381166106aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610257565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461072f5760405162461bcd60e51b8152600401610257906108cd565b600580546001600160a01b0319166001600160a01b0383161790556103548161061b565b600080805b6001548110156108345760006001828154811061077757610777610931565b60009182526020808320909101546001600160a01b0316808352600490915260409091205490915060ff16610821576005546040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108149190610947565b61081e90846109b2565b92505b508061082c81610999565b915050610758565b50919050565b80356001600160a01b038116811461085157600080fd5b919050565b6000806040838503121561086957600080fd5b6108728361083a565b91506020830135801515811461088757600080fd5b809150509250929050565b6000602082840312156108a457600080fd5b6108ad8261083a565b9392505050565b6000602082840312156108c657600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561092b5761092b610902565b92915050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561095957600080fd5b5051919050565b808202811582820484141761092b5761092b610902565b60008261099457634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016109ab576109ab610902565b5060010190565b8082018082111561092b5761092b61090256fea26469706673582212209f9fe2088a3a04a15829a9bd059cac391b3d8c901fd45c68fd5956d8d3de907f64736f6c63430008120033