Transaction Hash:
Block:
8594967 at Sep-21-2019 09:11:01 PM +UTC
Transaction Fee:
0.0472906616 ETH
$115.42
Gas Used:
2,798,264 Gas / 16.9 Gwei
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x01EaCc3A...dAc11628C | (FairWin.me) | ||||
0x4B8C5cec...A9F377A7E |
20.8047751371860888 Eth
Nonce: 19310
|
20.7574844755860888 Eth
Nonce: 19311
| 0.0472906616 | ||
0xEA674fdD...16B898ec8
Miner
| (Ethermine) | 753.235555251196730656 Eth | 753.282845912796730656 Eth | 0.0472906616 |
Execution Trace
FairWin.countRecommend( startLength=8685, endLength=8685, times=0 )
-
UtilFairWin.getScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=1 ) => ( 100 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=2 ) => ( 70 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=3 ) => ( 50 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=4 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=5 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=6 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=7 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=8 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=9 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=10 ) => ( 10 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=11 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=12 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=13 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=14 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=15 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=16 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=17 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=18 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=19 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=20 ) => ( 5 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=21 ) => ( 1 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=22 ) => ( 1 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=23 ) => ( 1 )
-
UtilFairWin.getFireScBylevel( level=0 ) => ( 0 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=0, times=24 ) => ( 0 )
-
UtilFairWin.getFireScBylevel( level=3 ) => ( 10 )
-
UtilFairWin.getRecommendScaleBylevelandTim( level=3, times=25 ) => ( 1 )
countRecommend[FairWin (ln:231)]
getScBylevel[FairWin (ln:242)]
execute[FairWin (ln:243)]
getFireScBylevel[FairWin (ln:261)]
getRecommendScaleBylevelandTim[FairWin (ln:262)]
execute[FairWin (ln:277)]
File 1 of 2: FairWin
File 2 of 2: UtilFairWin
pragma solidity ^0.4.24; contract UtilFairWin { /* fairwin.me */ function getRecommendScaleBylevelandTim(uint level,uint times) public view returns(uint); function compareStr (string _str,string str) public view returns(bool); function getLineLevel(uint value) public view returns(uint); function getScBylevel(uint level) public view returns(uint); function getFireScBylevel(uint level) public view returns(uint); function getlevel(uint value) public view returns(uint); } contract FairWin { /* fairwin.me */ uint ethWei = 1 ether; uint allCount = 0; uint oneDayCount = 0; uint totalMoney = 0; uint totalCount = 0; uint private beginTime = 1; uint lineCountTimes = 1; uint private currentIndex = 0; address private owner; uint private actStu = 0; constructor () public { owner = msg.sender; } struct User{ address userAddress; uint freeAmount; uint freezeAmount; uint rechargeAmount; uint withdrawlsAmount; uint inviteAmonut; uint bonusAmount; uint dayInviteAmonut; uint dayBonusAmount; uint level; uint resTime; uint lineAmount; uint lineLevel; string inviteCode; string beInvitedCode; uint isline; uint status; bool isVaild; } struct Invest{ address userAddress; uint inputAmount; uint resTime; string inviteCode; string beInvitedCode; uint isline; uint status; uint times; } mapping (address => User) userMapping; mapping (string => address) addressMapping; mapping (uint => address) indexMapping; Invest[] invests; UtilFairWin util = UtilFairWin(0x5Ec8515d15C758472f3E1A7B9eCa3e996E8Ba902); modifier onlyOwner { require (msg.sender == owner, "OnlyOwner methods called by non-owner."); _; } function () public payable { } function invest(address userAddress ,uint inputAmount,string inviteCode,string beInvitedCode) public payable{ userAddress = msg.sender; inputAmount = msg.value; uint lineAmount = inputAmount; if(!getUserByinviteCode(beInvitedCode)){ userAddress.transfer(msg.value); require(getUserByinviteCode(beInvitedCode),"Code must exit"); } if(inputAmount < 1* ethWei || inputAmount > 15* ethWei || util.compareStr(inviteCode,"")){ userAddress.transfer(msg.value); require(inputAmount >= 1* ethWei && inputAmount <= 15* ethWei && !util.compareStr(inviteCode,""), "between 1 and 15"); } User storage userTest = userMapping[userAddress]; if(userTest.isVaild && userTest.status != 2){ if((userTest.lineAmount + userTest.freezeAmount + lineAmount)> (15 * ethWei)){ userAddress.transfer(msg.value); require((userTest.lineAmount + userTest.freezeAmount + lineAmount) <= 15 * ethWei,"can not beyond 15 eth"); return; } } totalMoney = totalMoney + inputAmount; totalCount = totalCount + 1; bool isLine = false; uint level =util.getlevel(inputAmount); uint lineLevel = util.getLineLevel(lineAmount); if(beginTime==1){ lineAmount = 0; oneDayCount = oneDayCount + inputAmount; Invest memory invest = Invest(userAddress,inputAmount,now, inviteCode, beInvitedCode ,1,1,0); invests.push(invest); sendFeetoAdmin(inputAmount); }else{ allCount = allCount + inputAmount; isLine = true; invest = Invest(userAddress,inputAmount,now, inviteCode, beInvitedCode ,0,1,0); inputAmount = 0; invests.push(invest); } User memory user = userMapping[userAddress]; if(user.isVaild && user.status == 1){ user.freezeAmount = user.freezeAmount + inputAmount; user.rechargeAmount = user.rechargeAmount + inputAmount; user.lineAmount = user.lineAmount + lineAmount; level =util.getlevel(user.freezeAmount); lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount +user.lineAmount); user.level = level; user.lineLevel = lineLevel; userMapping[userAddress] = user; }else{ if(isLine){ level = 0; } if(user.isVaild){ inviteCode = user.inviteCode; beInvitedCode = user.beInvitedCode; } user = User(userAddress,0,inputAmount,inputAmount,0,0,0,0,0,level,now,lineAmount,lineLevel,inviteCode, beInvitedCode ,1,1,true); userMapping[userAddress] = user; indexMapping[currentIndex] = userAddress; currentIndex = currentIndex + 1; } address userAddressCode = addressMapping[inviteCode]; if(userAddressCode == 0x0000000000000000000000000000000000000000){ addressMapping[inviteCode] = userAddress; } } function remedy(address userAddress ,uint freezeAmount,string inviteCode,string beInvitedCode ,uint freeAmount,uint times) public { require(actStu == 0,"this action was closed"); freezeAmount = freezeAmount * ethWei; freeAmount = freeAmount * ethWei; uint level =util.getlevel(freezeAmount); uint lineLevel = util.getLineLevel(freezeAmount + freeAmount); if(beginTime==1 && freezeAmount > 0){ Invest memory invest = Invest(userAddress,freezeAmount,now, inviteCode, beInvitedCode ,1,1,times); invests.push(invest); } User memory user = userMapping[userAddress]; if(user.isVaild){ user.freeAmount = user.freeAmount + freeAmount; user.freezeAmount = user.freezeAmount + freezeAmount; user.rechargeAmount = user.rechargeAmount + freezeAmount +freezeAmount; user.level =util.getlevel(user.freezeAmount); user.lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount +user.lineAmount); userMapping[userAddress] = user; }else{ user = User(userAddress,freeAmount,freezeAmount,freeAmount+freezeAmount,0,0,0,0,0,level,now,0,lineLevel,inviteCode, beInvitedCode ,1,1,true); userMapping[userAddress] = user; indexMapping[currentIndex] = userAddress; currentIndex = currentIndex + 1; } address userAddressCode = addressMapping[inviteCode]; if(userAddressCode == 0x0000000000000000000000000000000000000000){ addressMapping[inviteCode] = userAddress; } } function userWithDraw(address userAddress) public{ bool success = false; require (msg.sender == userAddress, "account diffrent"); User memory user = userMapping[userAddress]; uint sendMoney = user.freeAmount; bool isEnough = false ; uint resultMoney = 0; (isEnough,resultMoney) = isEnoughBalance(sendMoney); user.withdrawlsAmount =user.withdrawlsAmount + resultMoney; user.freeAmount = user.freeAmount - resultMoney; user.level = util.getlevel(user.freezeAmount); user.lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount); userMapping[userAddress] = user; if(resultMoney > 0 ){ userAddress.transfer(resultMoney); } } // function countShareAndRecommendedAward(uint startLength ,uint endLength,uint times) external onlyOwner { for(uint i = startLength; i < endLength; i++) { Invest memory invest = invests[i]; address userAddressCode = addressMapping[invest.inviteCode]; User memory user = userMapping[userAddressCode]; if(invest.isline==1 && invest.status == 1 && now < (invest.resTime + 5 days) && invest.times <5){ invests[i].times = invest.times + 1; uint scale = util.getScBylevel(user.level); user.dayBonusAmount =user.dayBonusAmount + scale*invest.inputAmount/1000; user.bonusAmount = user.bonusAmount + scale*invest.inputAmount/1000; userMapping[userAddressCode] = user; }else if(invest.isline==1 && invest.status == 1 && ( now >= (invest.resTime + 5 days) || invest.times >= 5 )){ invests[i].status = 2; user.freezeAmount = user.freezeAmount - invest.inputAmount; user.freeAmount = user.freeAmount + invest.inputAmount; user.level = util.getlevel(user.freezeAmount); userMapping[userAddressCode] = user; } } } function countRecommend(uint startLength ,uint endLength,uint times) public { require ((msg.sender == owner || msg.sender == 0xa0fEE185742f6C257bf590f1Bb29aC2B18257069 || msg.sender == 0x9C09Edc8c34192183c6222EFb4BC3BA2cC1FA5Fd || msg.sender == 0x56E8cA06E849FA7db60f8Ffb0DD655FDD3deb17a || msg.sender == 0x4B8C5cec33A3A54f365a165b9AdAA01A9F377A7E || msg.sender == 0x25c5981E71CF1063C6Fc8b6F03293C03A153180e || msg.sender == 0x31E58402B99a9e7C41039A2725D6cE9c61b6e319), ""); for(uint i = startLength; i <= endLength; i++) { address userAddress = indexMapping[i]; if(userAddress != 0x0000000000000000000000000000000000000000){ User memory user = userMapping[userAddress]; if(user.status == 1 && user.freezeAmount >= 1 * ethWei){ uint scale = util.getScBylevel(user.level); execute(user.beInvitedCode,1,user.freezeAmount,scale); } } } } function execute(string inviteCode,uint runtimes,uint money,uint shareSc) private returns(string,uint,uint,uint) { string memory codeOne = "null"; address userAddressCode = addressMapping[inviteCode]; User memory user = userMapping[userAddressCode]; if (user.isVaild && runtimes <= 25){ codeOne = user.beInvitedCode; if(user.status == 1){ uint fireSc = util.getFireScBylevel(user.lineLevel); uint recommendSc = util.getRecommendScaleBylevelandTim(user.lineLevel,runtimes); uint moneyResult = 0; if(money <= (user.freezeAmount+user.lineAmount+user.freeAmount)){ moneyResult = money; }else{ moneyResult = user.freezeAmount+user.lineAmount+user.freeAmount; } if(recommendSc != 0){ user.dayInviteAmonut =user.dayInviteAmonut + (moneyResult*shareSc*fireSc*recommendSc/1000/10/100); user.inviteAmonut = user.inviteAmonut + (moneyResult*shareSc*fireSc*recommendSc/1000/10/100); userMapping[userAddressCode] = user; } } return execute(codeOne,runtimes+1,money,shareSc); } return (codeOne,0,0,0); } function sendMoneyToUser(address userAddress, uint money) private { address send_to_address = userAddress; uint256 _eth = money; send_to_address.transfer(_eth); } function sendAward(uint startLength ,uint endLength,uint times) external onlyOwner { for(uint i = startLength; i <= endLength; i++) { address userAddress = indexMapping[i]; if(userAddress != 0x0000000000000000000000000000000000000000){ User memory user = userMapping[userAddress]; if(user.status == 1){ uint sendMoney =user.dayInviteAmonut + user.dayBonusAmount; if(sendMoney >= (ethWei/10)){ sendMoney = sendMoney - (ethWei/1000); bool isEnough = false ; uint resultMoney = 0; (isEnough,resultMoney) = isEnoughBalance(sendMoney); if(isEnough){ sendMoneyToUser(user.userAddress,resultMoney); // user.dayInviteAmonut = 0; user.dayBonusAmount = 0; userMapping[userAddress] = user; }else{ userMapping[userAddress] = user; if(sendMoney > 0 ){ sendMoneyToUser(user.userAddress,resultMoney); user.dayInviteAmonut = 0; user.dayBonusAmount = 0; userMapping[userAddress] = user; } } } } } } } function isEnoughBalance(uint sendMoney) private view returns (bool,uint){ if(this.balance > 0 ){ if(sendMoney >= this.balance){ if((this.balance ) > 0){ return (false,this.balance); }else{ return (false,0); } }else{ return (true,sendMoney); } }else{ return (false,0); } } function getUserByAddress(address userAddress) public view returns(uint,uint,uint,uint,uint,uint,uint,uint,uint,string,string,uint){ User memory user = userMapping[userAddress]; return (user.lineAmount,user.freeAmount,user.freezeAmount,user.inviteAmonut, user.bonusAmount,user.lineLevel,user.status,user.dayInviteAmonut,user.dayBonusAmount,user.inviteCode,user.beInvitedCode,user.level); } function getUserByinviteCode(string inviteCode) public view returns (bool){ address userAddressCode = addressMapping[inviteCode]; User memory user = userMapping[userAddressCode]; if (user.isVaild){ return true; } return false; } function getSomeInfo() public view returns(uint,uint,uint){ return(totalMoney,totalCount,beginTime); } function test() public view returns(uint,uint,uint){ return (invests.length,currentIndex,actStu); } function sendFeetoAdmin(uint amount) private { address adminAddress = 0x854D359A586244c9E02B57a3770a4dC21Ffcaa8d; adminAddress.transfer(amount/25); } function closeAct() external onlyOwner { actStu = 1; } }
File 2 of 2: UtilFairWin
pragma solidity ^0.4.24; contract UtilFairWin { uint ethWei = 1 ether; //getlevel function getlevel(uint value) public view returns(uint){ if(value>=1*ethWei && value<=5*ethWei){ return 1; }if(value>=6*ethWei && value<=10*ethWei){ return 2; }if(value>=11*ethWei && value<=15*ethWei){ return 3; } return 0; } //getLinelevel function getLineLevel(uint value) public view returns(uint){ if(value>=1*ethWei && value<=5*ethWei){ return 1; }if(value>=6*ethWei && value<=10*ethWei){ return 2; }if(value>=11*ethWei){ return 3; } } //level-commend /1000 function getScBylevel(uint level) public view returns(uint){ if(level == 1){ return 5; }if(level == 2){ return 7; }if(level == 3) { return 10; } return 0; } //level fire scale /10 function getFireScBylevel(uint level) public view returns(uint){ if(level == 1){ return 3; }if(level == 2){ return 6; }if(level == 3) { return 10; }return 0; } //level and times => invite scale /100 function getRecommendScaleBylevelandTim(uint level,uint times) public view returns(uint){ if(level == 1 && times == 1){ return 50; }if(level == 2 && times == 1){ return 70; }if(level == 2 && times == 2){ return 50; }if(level == 3) { if(times == 1){ return 100; }if(times == 2){ return 70; }if(times == 3){ return 50; }if(times >= 4 && times <= 10){ return 10; }if(times >= 11 && times <= 20){ return 5; }if(times >= 21){ return 1; } } return 0; } function compareStr (string _str,string str) public view returns(bool) { bool checkResult = false; if(keccak256(abi.encodePacked(_str)) == keccak256(abi.encodePacked(str))) { checkResult = true; } return checkResult; } }