pragma solidity 0.5.9; contract TRONPROM { using SafeMath for uint256; uint256 constant public MIN_INVEST = 100 trx; uint256 constant public BASE_PERCENT = 50; uint256 constant public MARKETING_FEE = 80; uint256 constant public ADMIN_FEE = 30; uint256[] public REFF_PERCENT = [50, 30, 10]; uint256 constant public TIMESTEP = 1 days; uint256 constant public PERCENTS_DIVIDER = 1000; uint256 constant public CONTRACT_BALANCE_STEP = 1000000 trx; uint256 public totalInvestors; uint256 public totalInvested; uint256 public totalWithdrawn; uint256 public totalDeposits; address payable public marketingAddress; address payable public projectAddress; struct Deposit { uint256 amount; uint256 withdrawn; uint256 start; } struct User { Deposit[] deposits; uint256 checkpoint; address referrer; uint256 bonus; } mapping (address => User) internal users; event NewDeposit(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RefBonus(address indexed referrer, address indexed referral, uint256 indexed level, uint256 amount); constructor(address payable marketingAddr, address payable projectAddr) public { require(!isContract(marketingAddr) && !isContract(projectAddr)); marketingAddress = marketingAddr; projectAddress = projectAddr; } function invest(address referrer) public payable { require(msg.value >= MIN_INVEST); marketingAddress.transfer(msg.value.mul(MARKETING_FEE).div(PERCENTS_DIVIDER)); projectAddress.transfer(msg.value.mul(ADMIN_FEE).div(PERCENTS_DIVIDER)); User storage user = users[msg.sender]; if (user.referrer == address(0) && users[referrer].deposits.length > 0 && referrer != msg.sender) { user.referrer = referrer; } if (user.referrer != address(0)) { address upline = user.referrer; for (uint256 i = 0; i < 3; i++) { if (upline != address(0)) { uint256 amount = msg.value.mul(REFF_PERCENT[i]).div(PERCENTS_DIVIDER); users[upline].bonus = users[upline].bonus.add(amount); emit RefBonus(upline, msg.sender, i, amount); upline = users[upline].referrer; } else break; } } if (user.deposits.length == 0) { user.checkpoint = block.timestamp; totalInvestors = totalInvestors.add(1); } user.deposits.push(Deposit(msg.value, 0, block.timestamp)); totalInvested = totalInvested.add(msg.value); totalDeposits = totalDeposits.add(1); emit NewDeposit(msg.sender, msg.value); } function withdraw() public { User storage user = users[msg.sender]; uint256 userPercentRate = getUserPercentRate(msg.sender); uint256 totalAmount; uint256 dividends; for (uint256 i = 0; i < user.deposits.length; i++) { if (user.deposits[i].withdrawn < ((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))) { if (user.deposits[i].start > user.checkpoint) { dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER)) .mul(block.timestamp.sub(user.deposits[i].start)) .div(TIMESTEP); } else { dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER)) .mul(block.timestamp.sub(user.checkpoint)) .div(TIMESTEP); } if (user.deposits[i].withdrawn.add(dividends) > ((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))) { dividends = (((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))).sub(user.deposits[i].withdrawn); } user.deposits[i].withdrawn = user.deposits[i].withdrawn.add(dividends); totalAmount = totalAmount.add(dividends); } } uint256 referralBonus = getUserReferralBonus(msg.sender); if (referralBonus > 0) { totalAmount = totalAmount.add(referralBonus); user.bonus = 0; } require(totalAmount > 0, No dividends); uint256 contractBalance = address(this).balance; if (contractBalance < totalAmount) { totalAmount = contractBalance; } user.checkpoint = block.timestamp; msg.sender.transfer(totalAmount); totalWithdrawn = totalWithdrawn.add(totalAmount); emit Withdrawn(msg.sender, totalAmount); } function getContractBalance() public view returns (uint256) { return address(this).balance; } function getContractBalanceRate() public view returns (uint256) { uint256 contractBalance = address(this).balance; uint256 contractBalancePercent = contractBalance.div(CONTRACT_BALANCE_STEP); return BASE_PERCENT.add(contractBalancePercent); } function getUserPercentRate(address userAddress) public view returns (uint256) { User storage user = users[userAddress]; uint256 contractBalanceRate = getContractBalanceRate(); if (isActive(userAddress)) { uint256 timeMultiplier = (now.sub(user.checkpoint)).div(TIMESTEP); return contractBalanceRate.add(timeMultiplier); } else { return contractBalanceRate; } } function getUserDividends(address userAddress) public view returns (uint256) { User storage user = users[userAddress]; uint256 userPercentRate = getUserPercentRate(userAddress); uint256 totalDividends; uint256 dividends; for (uint256 i = 0; i < user.deposits.length; i++) { if (user.deposits[i].withdrawn < ((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))) { if (user.deposits[i].start > user.checkpoint) { dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER)) .mul(block.timestamp.sub(user.deposits[i].start)) .div(TIMESTEP); } else { dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER)) .mul(block.timestamp.sub(user.checkpoint)) .div(TIMESTEP); } if (user.deposits[i].withdrawn.add(dividends) > ((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))) { dividends = (((user.deposits[i].amount.mul(2)).add(user.deposits[i].amount.div(2)))).sub(user.deposits[i].withdrawn); } totalDividends = totalDividends.add(dividends); } } return totalDividends; } function getUserCheckpoint(address userAddress) public view returns(uint256) { return users[userAddress].checkpoint; } function getUserReferrer(address userAddress) public view returns(address) { return users[userAddress].referrer; } function getUserReferralBonus(address userAddress) public view returns(uint256) { return users[userAddress].bonus; } function getUserAvailable(address userAddress) public view returns(uint256) { return getUserReferralBonus(userAddress).add(getUserDividends(userAddress)); } function isActive(address userAddress) public view returns (bool) { User storage user = users[userAddress]; if (user.deposits.length > 0) { if (user.deposits[user.deposits.length-1].withdrawn < ((user.deposits[user.deposits.length-1].amount.mul(2)).add(user.deposits[user.deposits.length-1].amount.div(2)))) { return true; } } } function getUserDepositInfo(address userAddress, uint256 index) public view returns(uint256, uint256, uint256) { User storage user = users[userAddress]; return (user.deposits[index].amount, user.deposits[index].withdrawn, user.deposits[index].start); } function getUserAmountOfDeposits(address userAddress) public view returns(uint256) { return users[userAddress].deposits.length; } function getUserTotalDeposits(address userAddress) public view returns(uint256) { User storage user = users[userAddress]; uint256 amount; for (uint256 i = 0; i < user.deposits.length; i++) { amount = amount.add(user.deposits[i].amount); } return amount; } function getUserTotalWithdrawn(address userAddress) public view returns(uint256) { User storage user = users[userAddress]; uint256 amount; for (uint256 i = 0; i < user.deposits.length; i++) { amount = amount.add(user.deposits[i].withdrawn); } return amount; } function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } } library SafeMath { function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, b), base); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, SafeMath: addition overflow); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, SafeMath: subtraction overflow); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, SafeMath: multiplication overflow); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, SafeMath: division by zero); uint256 c = a / b; return c; } }
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
We recommend to use: TronLink / TronMask browsers extensions, or TronWallet / Banko mobile apps.
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
You can get TRX coins via popular exchangers.
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
You can check all your wallet information, including your deposits, earnings, withdraw and referral statistics in real time.
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
Referral rewards comes instantly on your wallet balance and can be withdrawn any time along with earnings.
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
Request withdraw from the same wallet you deposited
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
All your wallet deposits and referral earnings will be withdrawn with single transaction per 1 request
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
IMPORTANT: Do not forget about blockchain fee! You should have 2-5 TRX more on your wallet, or your transaction will get out of energy status!
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
We are working only with TRON (TRX) cryptocurrency
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
Your deposit will be activated after 1 confirmation in blockchain
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
Earnings comes every moment on your wallet balance, you can withdraw it any time you want
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
You can use two types of wallets:
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|
- - You should have active deposit to unlock affiliate bonuses! You will get no rewards without active
The text above is found on the main page of the folowing websites:
swissex.me
Total: 1 HYIP
|