Contract Address Details

0x735534FA255C096A4F16F6d820D8F0091b593bEb

Contract Name
Treasury
Creator
0xfb5e17–0e0951 at 0x349b27–e1b21e
Balance
0 EGON
Tokens
Fetching tokens...
Transactions
1 Transactions
Transfers
0 Transfers
Gas Used
52,665
Last Balance Update
13516565
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