Contract Overview
Transactions:
169 txns
TokenTracker:
Latest 25 transactions from a total of 169 transactions
[ Download CSV Export ]
Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name: | MainContract |
Compiler Version: | v0.4.25+commit.59dbf8f1 |
Optimization Enabled: | Yes |
Runs (Optimizer): | 200 |
Contract Source Code
pragma solidity ^0.4.24; /* - https://eth-invest.com/ version: 1.0.1 * - Ref bonuses 8% per day, 0.33% every hour * - Invest dividends 8% * - Invest and get 120% But u can't get more than 120% * - Dont snooze, you can earn ETH only the first fifteen days!!! * - Invite your friends, you will get 4% for each other, they will get +2% to their deposit. Also, if u already got 120% u can get invite bonuses * - Have a nice day :) */ contract MainContract { address owner; address advertisingAddress; uint private constant minInvest = 10 finney; // 0.01 eth uint constant maxPayment = 360; // maxPayment value every hour your payment + 1; 24 hours * 15 days = 360 :) using Calc for uint; using PercentCalc for PercentCalc.percent; using Zero for *; using compileLibrary for *; struct User { uint idx; uint value; uint bonus; uint payValue; uint payTime; } mapping(address => User) investorsStorage; address[] users; modifier onlyOwner() { require(msg.sender == owner, "access denied"); _; } event logsDataPayable(uint value, uint time, address indexed addr); event logsDataConstructor(address creater, uint when, string text); event newInvestor(address indexed addr, uint when, uint value); event investToProject(address creater, uint when, string text); event logPaymentUser(uint value, uint when, address indexed addr, string text); event logPayDividends(uint value, uint when, address indexed addr, string text); event logPayBonus(uint value, uint when, address indexed addr, string text); event notEnoughETH(uint when, string text); constructor() public { owner = msg.sender; users.length++; emit logsDataConstructor(msg.sender, now, "constructor"); } // PercentCalc PercentCalc.percent private dividendPercent = PercentCalc.percent(8); // 8% PercentCalc.percent private refPercent = PercentCalc.percent(2); // 2% PercentCalc.percent private refPercentBonus = PercentCalc.percent(4); // 4% PercentCalc.percent private advertisingPercent = PercentCalc.percent(5); // 5% PercentCalc.percent private ownerPercent = PercentCalc.percent(2); // 2% function() public payable { if (msg.value == 0) { fetchDividends(); return; } require(msg.value >= minInvest, "value can't be < than 0.01"); if (investorsStorage[msg.sender].idx > 0) { // dont send more if u have already invested!!! sendValueToAdv(msg.value); } else { address ref = msg.data.toAddr(); uint idx = investorsStorage[msg.sender].idx; uint value = msg.value; idx = users.length++; if (ref.notZero() && investorsStorage[ref].idx > 0) { setUserBonus(ref, msg.value); value += refPercent.getValueByPercent(value); } emit newInvestor(msg.sender, now, msg.value); investorsStorage[msg.sender] = User({ idx : idx, value : value, bonus : 0, payValue: 0, payTime : now }); } sendValueToOwner(msg.value); sendValueToAdv(msg.value); emit logsDataPayable(msg.value, now, msg.sender); } function setUserBonus(address addr, uint value) private { uint bonus = refPercentBonus.getValueByPercent(value); if (investorsStorage[addr].idx > 0) { investorsStorage[addr].bonus += bonus; } else { sendValueToAdv(bonus); } } function fetchDividends() private { User memory inv = findInvestorByAddress(msg.sender); require(inv.idx > 0, "Payer is not investor"); uint payValueByTime = now.sub(inv.payTime).getDiffValue(1 hours); require(payValueByTime > 0, "the payment was earlier than 1 hours"); uint newPayValye = payValueByTime + inv.payValue; // do not snooze if (newPayValye > maxPayment) { require(inv.bonus > 0, "you've already got 120%"); sendUserBonus(msg.sender, inv.bonus); } else { uint dividendValue = (dividendPercent.getValueByPercent(inv.value) * payValueByTime) / 24; if (address(this).balance < dividendValue + inv.bonus) { emit notEnoughETH(now, "not enough Eth at address"); return; } emit logPaymentUser(newPayValye, now, msg.sender, 'gotPercent value'); investorsStorage[msg.sender].payValue += payValueByTime; if (inv.bonus > 0) { sendDividendsWithBonus(msg.sender, dividendValue, inv.bonus); } else { sendDividends(msg.sender, dividendValue); } } } function sendUserBonus(address addr, uint bonus) private { addr.transfer(bonus); investorsStorage[addr].bonus = 0; emit logPayBonus(bonus, now, addr, "Investor got bonuses!"); } function setAdvertisingAddress(address addr) public onlyOwner { advertisingAddress = addr; } function sendDividends(address addr, uint value) private { updatePayTime(addr, now); emit logPayDividends(value, now, addr, "dividends"); addr.transfer(value); } function sendDividendsWithBonus(address addr, uint value, uint bonus) private { updatePayTime(addr, now); addr.transfer(value + bonus); investorsStorage[addr].bonus = 0; emit logPayDividends(value + bonus, now, addr, "dividends with bonus"); } function findInvestorByAddress(address addr) internal view returns (User) { return User( investorsStorage[addr].idx, investorsStorage[addr].value, investorsStorage[addr].bonus, investorsStorage[addr].payValue, investorsStorage[addr].payTime ); } function sendValueToOwner(uint val) private { owner.transfer(ownerPercent.getValueByPercent(val)); } function sendValueToAdv(uint val) private { advertisingAddress.transfer(advertisingPercent.getValueByPercent(val)); } function updatePayTime(address addr, uint time) private returns (bool) { if (investorsStorage[addr].idx == 0) return false; investorsStorage[addr].payTime = time; return true; } } // Calc library library Calc { function getDiffValue(uint _a, uint _b) internal pure returns (uint) { require(_b > 0); uint c = _a / _b; return c; } function sub(uint _a, uint _b) internal pure returns (uint) { require(_b <= _a); uint c = _a - _b; return c; } } // Percent Calc library library PercentCalc { struct percent { uint val; } function getValueByPercent(percent storage p, uint a) internal view returns (uint) { if (a == 0) { return 0; } return a * p.val / 100; } } library Zero { function notZero(address addr) internal pure returns (bool) { return !(addr == address(0)); } } library compileLibrary { function toAddr(bytes source) internal pure returns (address addr) { assembly {addr := mload(add(source, 0x14))} return addr; } }
Contract ABI
[{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"},{"indexed":true,"name":"addr","type":"address"}],"name":"logsDataPayable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creater","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"text","type":"string"}],"name":"logsDataConstructor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"newInvestor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"creater","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"text","type":"string"}],"name":"investToProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"text","type":"string"}],"name":"logPaymentUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"text","type":"string"}],"name":"logPayDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"text","type":"string"}],"name":"logPayBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"text","type":"string"}],"name":"notEnoughETH","type":"event"}]
Contract Creation Code
600860808190526004818155600260a0819052600581815560c083905260069290925560e0829052600791909155610120604052610100819052905534801561004757600080fd5b5060008054600160a060020a03191633179055600380549061006c90600183016100df565b50604080513381524260208201526060818301819052600b908201527f636f6e7374727563746f72000000000000000000000000000000000000000000608082015290517f9940e597a94db4a412d9def09f3afc4b3ed749121f2faa18a7b3447e7269d73b9181900360a00190a1610129565b81548183558181111561010357600083815260209020610103918101908301610108565b505050565b61012691905b80821115610122576000815560010161010e565b5090565b90565b610b18806101386000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663cb192f2c811461027d575b60008080341515610058576100536102a0565b610278565b662386f26fc100003410156100b7576040805160e560020a62461bcd02815260206004820152601a60248201527f76616c75652063616e2774206265203c207468616e20302e3031000000000000604482015290519081900360640190fd5b3360009081526002602052604081205411156100db576100d634610598565b61022c565b6101156000368080601f016020809104026020016040519081016040528093929190818152602001838380828437506105e4945050505050565b336000908152600260205260409020546003805492955090935034925061013f9060018301610a77565b915061015383600160a060020a03166105eb565b80156101755750600160a060020a038316600090815260026020526040812054115b156101975761018483346105f9565b61019560058263ffffffff61066316565b015b60408051428152346020820152815133927f41b2121cb66467389a85e7715af1dca7be90f6c83b647a80cefccd3000d5a1e1928290030190a26040805160a0810182528381526020808201848152600083850181815260608501828152426080870190815233845260029586905296909220945185559151600185015590519183019190915551600382015590516004909101555b61023534610684565b61023e34610598565b60408051348152426020820152815133927f6928248aab57c99590f3f74ae8443e73f1d1c9198b02955c7d4c0949efb68f28928290030190a25b505050005b34801561028957600080fd5b5061029e600160a060020a03600435166106a4565b005b6102a8610a9b565b60008060006102b633610735565b8051909450600010610312576040805160e560020a62461bcd02815260206004820152601560248201527f5061796572206973206e6f7420696e766573746f720000000000000000000000604482015290519081900360640190fd5b61033b610e1061032f86608001514261079790919063ffffffff16565b9063ffffffff6107ae16565b9250600083116103ba576040805160e560020a62461bcd028152602060048201526024808201527f746865207061796d656e7420776173206561726c696572207468616e2031206860448201527f6f75727300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83606001518301915061016882111561043c576040840151600010610429576040805160e560020a62461bcd02815260206004820152601760248201527f796f7527766520616c726561647920676f742031323025000000000000000000604482015290519081900360640190fd5b6104373385604001516107d1565b610592565b6018836104578660200151600461066390919063ffffffff16565b0281151561046157fe5b0490508360400151810130600160a060020a03163110156104e75760408051428152602081018290526019818301527f6e6f7420656e6f75676820457468206174206164647265737300000000000000606082015290517fbc28346f7285e9d3e7e2d2488475c3fdb6503820989a060bf6e9e5c9b04b6f579181900360800190a1610592565b6040805183815242602082015260608183018190526010908201527f676f7450657263656e742076616c7565000000000000000000000000000000006080820152905133917f9ee03a2b75c69923a70215b5c0bafed98e95d75f7bf286bfb980d09c79aeb93b919081900360a00190a2336000908152600260205260408082206003018054860190558501511115610588576104373382866040015161089a565b6105923382610972565b50505050565b600154600160a060020a03166108fc6105b860078463ffffffff61066316565b6040518115909202916000818181858888f193505050501580156105e0573d6000803e3d6000fd5b5050565b6014015190565b600160a060020a0316151590565b600061060c60068363ffffffff61066316565b600160a060020a038416600090815260026020526040812054919250101561065557600160a060020a03831660009081526002602081905260409091200180548201905561065e565b61065e81610598565b505050565b60008115156106745750600061067e565b5081546064908202045b92915050565b600054600160a060020a03166108fc6105b860088463ffffffff61066316565b600054600160a060020a03163314610706576040805160e560020a62461bcd02815260206004820152600d60248201527f6163636573732064656e69656400000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b61073d610a9b565b506040805160a081018252600160a060020a03929092166000818152600260208181528483208054875260018101548288015280830154958701959095526003850154606087015292909152905260040154608082015290565b600080838311156107a757600080fd5b5050900390565b6000808083116107bd57600080fd5b82848115156107c857fe5b04949350505050565b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610807573d6000803e3d6000fd5b50600160a060020a0382166000818152600260208181526040808420909201929092558051848152429281019290925260608282018190526015908301527f496e766573746f7220676f7420626f6e757365732100000000000000000000006080830152517ff3af8519cd4099eb27793b20329e75e9d13eae2448e33ff32d7f172342290d5d9181900360a00190a25050565b6108a48342610a2c565b50604051600160a060020a0384169083830180156108fc02916000818181858888f193505050501580156108dc573d6000803e3d6000fd5b50600160a060020a03831660008181526002602081815260408084209092019290925580518585018152429281019290925260608282018190526014908301527f6469766964656e6473207769746820626f6e75730000000000000000000000006080830152517f541ccf0a06c67351c775f1cb1629c24c22fe874efc4c4aa8f2177349d27ffdbd9181900360a00190a2505050565b61097c8242610a2c565b506040805182815242602082015260608183018190526009908201527f6469766964656e6473000000000000000000000000000000000000000000000060808201529051600160a060020a038416917f541ccf0a06c67351c775f1cb1629c24c22fe874efc4c4aa8f2177349d27ffdbd919081900360a00190a2604051600160a060020a0383169082156108fc029083906000818181858888f1935050505015801561065e573d6000803e3d6000fd5b600160a060020a0382166000908152600260205260408120541515610a535750600061067e565b50600160a060020a0391909116600090815260026020526040902060040155600190565b81548183558181111561065e5760008381526020902061065e918101908301610acb565b60a06040519081016040528060008152602001600081526020016000815260200160008152602001600081525090565b610ae991905b80821115610ae55760008155600101610ad1565b5090565b905600a165627a7a7230582009d99c21aaf7a5f255862854b65a91e406f36839a6e6abb17f49071e256539a70029
Swarm Source:
bzzr://09d99c21aaf7a5f255862854b65a91e406f36839a6e6abb17f49071e256539a7
Block | Age | transaction | Difficulty | GasUsed | Reward |
---|
Block | Age | Uncle Number | Difficulty | GasUsed | Reward |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.