Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.92 KB | None | 0 0
  1. /**
  2. *Submitted for verification at Etherscan.io on 2019-07-29
  3. */
  4.  
  5. pragma solidity ^0.4.24;
  6.  
  7. contract UtilFairWin {
  8.  
  9. /* fairwin.me */
  10.  
  11. function getRecommendScaleBylevelandTim(uint level,uint times) public view returns(uint);
  12. function compareStr (string _str,string str) public view returns(bool);
  13. function getLineLevel(uint value) public view returns(uint);
  14. function getScBylevel(uint level) public view returns(uint);
  15. function getFireScBylevel(uint level) public view returns(uint);
  16. function getlevel(uint value) public view returns(uint);
  17. }
  18. contract FairWin {
  19.  
  20. /* fairwin.me */
  21.  
  22. uint ethWei = 1 ether;
  23. uint allCount = 0;
  24. uint oneDayCount = 0;
  25. uint totalMoney = 0;
  26. uint totalCount = 0;
  27. uint private beginTime = 1;
  28. uint lineCountTimes = 1;
  29. uint private currentIndex = 0;
  30. address private owner;
  31. uint private actStu = 0;
  32.  
  33. constructor () public {
  34. owner = msg.sender;
  35. }
  36. struct User{
  37.  
  38. address userAddress;
  39. uint freeAmount;
  40. uint freezeAmount;
  41. uint rechargeAmount;
  42. uint withdrawlsAmount;
  43. uint inviteAmonut;
  44. uint bonusAmount;
  45. uint dayInviteAmonut;
  46. uint dayBonusAmount;
  47. uint level;
  48. uint resTime;
  49. uint lineAmount;
  50. uint lineLevel;
  51. string inviteCode;
  52. string beInvitedCode;
  53. uint isline;
  54. uint status;
  55. bool isVaild;
  56. }
  57.  
  58. struct Invest{
  59.  
  60. address userAddress;
  61. uint inputAmount;
  62. uint resTime;
  63. string inviteCode;
  64. string beInvitedCode;
  65. uint isline;
  66. uint status;
  67. uint times;
  68. }
  69.  
  70. mapping (address => User) userMapping;
  71. mapping (string => address) addressMapping;
  72. mapping (uint => address) indexMapping;
  73.  
  74. Invest[] invests;
  75. UtilFairWin util = UtilFairWin(0x5Ec8515d15C758472f3E1A7B9eCa3e996E8Ba902);
  76.  
  77. modifier onlyOwner {
  78. require (msg.sender == owner, "OnlyOwner methods called by non-owner.");
  79. _;
  80. }
  81.  
  82. function () public payable {
  83. }
  84.  
  85. function invest(address userAddress ,uint inputAmount,string inviteCode,string beInvitedCode) public payable{
  86.  
  87. userAddress = msg.sender;
  88. inputAmount = msg.value;
  89. uint lineAmount = inputAmount;
  90.  
  91. if(!getUserByinviteCode(beInvitedCode)){
  92. userAddress.transfer(msg.value);
  93. require(getUserByinviteCode(beInvitedCode),"Code must exit");
  94. }
  95. if(inputAmount < 1* ethWei || inputAmount > 15* ethWei || util.compareStr(inviteCode,"")){
  96. userAddress.transfer(msg.value);
  97. require(inputAmount >= 1* ethWei && inputAmount <= 15* ethWei && !util.compareStr(inviteCode,""), "between 1 and 15");
  98. }
  99. User storage userTest = userMapping[userAddress];
  100. if(userTest.isVaild && userTest.status != 2){
  101. if((userTest.lineAmount + userTest.freezeAmount + lineAmount)> (15 * ethWei)){
  102. userAddress.transfer(msg.value);
  103. require((userTest.lineAmount + userTest.freezeAmount + lineAmount) <= 15 * ethWei,"can not beyond 15 eth");
  104. return;
  105. }
  106. }
  107. totalMoney = totalMoney + inputAmount;
  108. totalCount = totalCount + 1;
  109. bool isLine = false;
  110.  
  111. uint level =util.getlevel(inputAmount);
  112. uint lineLevel = util.getLineLevel(lineAmount);
  113. if(beginTime==1){
  114. lineAmount = 0;
  115. oneDayCount = oneDayCount + inputAmount;
  116. Invest memory invest = Invest(userAddress,inputAmount,now, inviteCode, beInvitedCode ,1,1,0);
  117. invests.push(invest);
  118. sendFeetoAdmin(inputAmount);
  119. }else{
  120. allCount = allCount + inputAmount;
  121. isLine = true;
  122. invest = Invest(userAddress,inputAmount,now, inviteCode, beInvitedCode ,0,1,0);
  123. inputAmount = 0;
  124. invests.push(invest);
  125. }
  126. User memory user = userMapping[userAddress];
  127. if(user.isVaild && user.status == 1){
  128. user.freezeAmount = user.freezeAmount + inputAmount;
  129. user.rechargeAmount = user.rechargeAmount + inputAmount;
  130. user.lineAmount = user.lineAmount + lineAmount;
  131. level =util.getlevel(user.freezeAmount);
  132. lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount +user.lineAmount);
  133. user.level = level;
  134. user.lineLevel = lineLevel;
  135. userMapping[userAddress] = user;
  136.  
  137. }else{
  138. if(isLine){
  139. level = 0;
  140. }
  141. if(user.isVaild){
  142. inviteCode = user.inviteCode;
  143. beInvitedCode = user.beInvitedCode;
  144. }
  145. user = User(userAddress,0,inputAmount,inputAmount,0,0,0,0,0,level,now,lineAmount,lineLevel,inviteCode, beInvitedCode ,1,1,true);
  146. userMapping[userAddress] = user;
  147.  
  148. indexMapping[currentIndex] = userAddress;
  149. currentIndex = currentIndex + 1;
  150. }
  151. address userAddressCode = addressMapping[inviteCode];
  152. if(userAddressCode == 0x0000000000000000000000000000000000000000){
  153. addressMapping[inviteCode] = userAddress;
  154. }
  155.  
  156. }
  157.  
  158. function remedy(address userAddress ,uint freezeAmount,string inviteCode,string beInvitedCode ,uint freeAmount,uint times) public {
  159. require(actStu == 0,"this action was closed");
  160. freezeAmount = freezeAmount * ethWei;
  161. freeAmount = freeAmount * ethWei;
  162. uint level =util.getlevel(freezeAmount);
  163. uint lineLevel = util.getLineLevel(freezeAmount + freeAmount);
  164. if(beginTime==1 && freezeAmount > 0){
  165. Invest memory invest = Invest(userAddress,freezeAmount,now, inviteCode, beInvitedCode ,1,1,times);
  166. invests.push(invest);
  167. }
  168. User memory user = userMapping[userAddress];
  169. if(user.isVaild){
  170. user.freeAmount = user.freeAmount + freeAmount;
  171. user.freezeAmount = user.freezeAmount + freezeAmount;
  172. user.rechargeAmount = user.rechargeAmount + freezeAmount +freezeAmount;
  173. user.level =util.getlevel(user.freezeAmount);
  174. user.lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount +user.lineAmount);
  175. userMapping[userAddress] = user;
  176. }else{
  177. user = User(userAddress,freeAmount,freezeAmount,freeAmount+freezeAmount,0,0,0,0,0,level,now,0,lineLevel,inviteCode, beInvitedCode ,1,1,true);
  178. userMapping[userAddress] = user;
  179.  
  180. indexMapping[currentIndex] = userAddress;
  181. currentIndex = currentIndex + 1;
  182. }
  183. address userAddressCode = addressMapping[inviteCode];
  184. if(userAddressCode == 0x0000000000000000000000000000000000000000){
  185. addressMapping[inviteCode] = userAddress;
  186. }
  187.  
  188. }
  189.  
  190. function userWithDraw(address userAddress) public{
  191. bool success = false;
  192. require (msg.sender == userAddress, "account diffrent");
  193.  
  194. User memory user = userMapping[userAddress];
  195. uint sendMoney = user.freeAmount;
  196.  
  197. bool isEnough = false ;
  198. uint resultMoney = 0;
  199. (isEnough,resultMoney) = isEnoughBalance(sendMoney);
  200.  
  201. user.withdrawlsAmount =user.withdrawlsAmount + resultMoney;
  202. user.freeAmount = user.freeAmount - resultMoney;
  203. user.level = util.getlevel(user.freezeAmount);
  204. user.lineLevel = util.getLineLevel(user.freezeAmount + user.freeAmount);
  205. userMapping[userAddress] = user;
  206. if(resultMoney > 0 ){
  207. userAddress.transfer(resultMoney);
  208. }
  209. }
  210.  
  211. //
  212. function countShareAndRecommendedAward(uint startLength ,uint endLength,uint times) external onlyOwner {
  213.  
  214. for(uint i = startLength; i < endLength; i++) {
  215. Invest memory invest = invests[i];
  216. address userAddressCode = addressMapping[invest.inviteCode];
  217. User memory user = userMapping[userAddressCode];
  218. if(invest.isline==1 && invest.status == 1 && now < (invest.resTime + 5 days) && invest.times <5){
  219. invests[i].times = invest.times + 1;
  220. uint scale = util.getScBylevel(user.level);
  221. user.dayBonusAmount =user.dayBonusAmount + scale*invest.inputAmount/1000;
  222. user.bonusAmount = user.bonusAmount + scale*invest.inputAmount/1000;
  223. userMapping[userAddressCode] = user;
  224.  
  225. }else if(invest.isline==1 && invest.status == 1 && ( now >= (invest.resTime + 5 days) || invest.times >= 5 )){
  226. invests[i].status = 2;
  227. user.freezeAmount = user.freezeAmount - invest.inputAmount;
  228. user.freeAmount = user.freeAmount + invest.inputAmount;
  229. user.level = util.getlevel(user.freezeAmount);
  230. userMapping[userAddressCode] = user;
  231. }
  232. }
  233. }
  234.  
  235. function countRecommend(uint startLength ,uint endLength,uint times) public {
  236. require ((msg.sender == owner || msg.sender == 0xa0fEE185742f6C257bf590f1Bb29aC2B18257069 || msg.sender == 0x9C09Edc8c34192183c6222EFb4BC3BA2cC1FA5Fd
  237. || msg.sender == 0x56E8cA06E849FA7db60f8Ffb0DD655FDD3deb17a || msg.sender == 0x4B8C5cec33A3A54f365a165b9AdAA01A9F377A7E || msg.sender == 0x25c5981E71CF1063C6Fc8b6F03293C03A153180e
  238. || msg.sender == 0x31E58402B99a9e7C41039A2725D6cE9c61b6e319), "");
  239. for(uint i = startLength; i <= endLength; i++) {
  240.  
  241. address userAddress = indexMapping[i];
  242. if(userAddress != 0x0000000000000000000000000000000000000000){
  243.  
  244. User memory user = userMapping[userAddress];
  245. if(user.status == 1 && user.freezeAmount >= 1 * ethWei){
  246. uint scale = util.getScBylevel(user.level);
  247. execute(user.beInvitedCode,1,user.freezeAmount,scale);
  248. }
  249. }
  250. }
  251. }
  252.  
  253.  
  254. function execute(string inviteCode,uint runtimes,uint money,uint shareSc) private returns(string,uint,uint,uint) {
  255.  
  256. string memory codeOne = "null";
  257.  
  258. address userAddressCode = addressMapping[inviteCode];
  259. User memory user = userMapping[userAddressCode];
  260.  
  261. if (user.isVaild && runtimes <= 25){
  262. codeOne = user.beInvitedCode;
  263. if(user.status == 1){
  264.  
  265. uint fireSc = util.getFireScBylevel(user.lineLevel);
  266. uint recommendSc = util.getRecommendScaleBylevelandTim(user.lineLevel,runtimes);
  267. uint moneyResult = 0;
  268.  
  269. if(money <= (user.freezeAmount+user.lineAmount+user.freeAmount)){
  270. moneyResult = money;
  271. }else{
  272. moneyResult = user.freezeAmount+user.lineAmount+user.freeAmount;
  273. }
  274.  
  275. if(recommendSc != 0){
  276. user.dayInviteAmonut =user.dayInviteAmonut + (moneyResult*shareSc*fireSc*recommendSc/1000/10/100);
  277. user.inviteAmonut = user.inviteAmonut + (moneyResult*shareSc*fireSc*recommendSc/1000/10/100);
  278. userMapping[userAddressCode] = user;
  279. }
  280. }
  281. return execute(codeOne,runtimes+1,money,shareSc);
  282. }
  283. return (codeOne,0,0,0);
  284.  
  285. }
  286.  
  287. function sendMoneyToUser(address userAddress, uint money) private {
  288. address send_to_address = userAddress;
  289. uint256 _eth = money;
  290. send_to_address.transfer(_eth);
  291.  
  292. }
  293.  
  294. function sendAward(uint startLength ,uint endLength,uint times) external onlyOwner {
  295.  
  296. for(uint i = startLength; i <= endLength; i++) {
  297.  
  298. address userAddress = indexMapping[i];
  299. if(userAddress != 0x0000000000000000000000000000000000000000){
  300.  
  301. User memory user = userMapping[userAddress];
  302. if(user.status == 1){
  303. uint sendMoney =user.dayInviteAmonut + user.dayBonusAmount;
  304.  
  305. if(sendMoney >= (ethWei/10)){
  306. sendMoney = sendMoney - (ethWei/1000);
  307. bool isEnough = false ;
  308. uint resultMoney = 0;
  309. (isEnough,resultMoney) = isEnoughBalance(sendMoney);
  310. if(isEnough){
  311. sendMoneyToUser(user.userAddress,resultMoney);
  312. //
  313. user.dayInviteAmonut = 0;
  314. user.dayBonusAmount = 0;
  315. userMapping[userAddress] = user;
  316. }else{
  317. userMapping[userAddress] = user;
  318. if(sendMoney > 0 ){
  319. sendMoneyToUser(user.userAddress,resultMoney);
  320. user.dayInviteAmonut = 0;
  321. user.dayBonusAmount = 0;
  322. userMapping[userAddress] = user;
  323. }
  324. }
  325. }
  326. }
  327. }
  328. }
  329. }
  330.  
  331. function isEnoughBalance(uint sendMoney) private view returns (bool,uint){
  332.  
  333. if(this.balance > 0 ){
  334. if(sendMoney >= this.balance){
  335. if((this.balance ) > 0){
  336. return (false,this.balance);
  337. }else{
  338. return (false,0);
  339. }
  340. }else{
  341. return (true,sendMoney);
  342. }
  343. }else{
  344. return (false,0);
  345. }
  346. }
  347.  
  348. function getUserByAddress(address userAddress) public view returns(uint,uint,uint,uint,uint,uint,uint,uint,uint,string,string,uint){
  349.  
  350. User memory user = userMapping[userAddress];
  351. return (user.lineAmount,user.freeAmount,user.freezeAmount,user.inviteAmonut,
  352. user.bonusAmount,user.lineLevel,user.status,user.dayInviteAmonut,user.dayBonusAmount,user.inviteCode,user.beInvitedCode,user.level);
  353. }
  354. function getUserByinviteCode(string inviteCode) public view returns (bool){
  355.  
  356. address userAddressCode = addressMapping[inviteCode];
  357. User memory user = userMapping[userAddressCode];
  358. if (user.isVaild){
  359. return true;
  360. }
  361. return false;
  362. }
  363. function getSomeInfo() public view returns(uint,uint,uint){
  364. return(totalMoney,totalCount,beginTime);
  365. }
  366. function test() public view returns(uint,uint,uint){
  367. return (invests.length,currentIndex,actStu);
  368. }
  369. function sendFeetoAdmin(uint amount) private {
  370. address adminAddress = 0x854D359A586244c9E02B57a3770a4dC21Ffcaa8d;
  371. adminAddress.transfer(amount/25);
  372. }
  373. function closeAct() external onlyOwner {
  374. actStu = 1;
  375. }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement