Transaction Hash:
Block:
10269231 at Jun-15-2020 08:33:33 AM +UTC
Transaction Fee:
0.006023940146482141 ETH
$11.48
Gas Used:
100,399 Gas / 60.000001459 Gwei
Emitted Events:
132 |
Gida.getIntroducerMoneyForLevelEvent( _user=0x120ebec5a24607d5c3d8343aee04e54932a87f34, _referral=[Sender] 0x98ff1d60b5a8fa07cb232bc437b9e2d7261d9813, _level=2, _time=1592210013, amount=45000000000000000 )
|
133 |
Gida.getMoneyForLevelEvent( _user=0x7c734d78a247a5ee3f9a64ce061db270a7cfef37, _referral=[Sender] 0x98ff1d60b5a8fa07cb232bc437b9e2d7261d9813, _level=2, _time=1592210013, amount=9000000000000000 )
|
134 |
Gida.getMoneyForLevelEvent( _user=0xcb5ceaad67a15099309b58bc8c3a9f7c3d82eeca, _referral=[Sender] 0x98ff1d60b5a8fa07cb232bc437b9e2d7261d9813, _level=2, _time=1592210013, amount=246000000000000000 )
|
135 |
Gida.buyLevelEvent( _user=[Sender] 0x98ff1d60b5a8fa07cb232bc437b9e2d7261d9813, _level=2, _time=1592210013 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x120Ebec5...932A87F34 | 0.053388719798202235 Eth | 0.098388719798202235 Eth | 0.045 | ||
0x7c734D78...0A7cFeF37 | 4.728 Eth | 4.737 Eth | 0.009 | ||
0x98ff1D60...7261D9813 |
0.334908995253197298 Eth
Nonce: 5
|
0.028885055106715157 Eth
Nonce: 6
| 0.306023940146482141 | ||
0x99C85bb6...993Cb89E3
Miner
| (BeePool) | 253.417361690472208357 Eth | 253.423385630618690498 Eth | 0.006023940146482141 | |
0xCb5ceAaD...C3D82eeca | 0.080198090409776 Eth | 0.326198090409776 Eth | 0.246 | ||
0xff0EFDD9...6d1f11eBF |
Execution Trace
ETH 0.3
Gida.CALL( )
- ETH 0.045
0x120ebec5a24607d5c3d8343aee04e54932a87f34.CALL( )
- ETH 0.246
0xcb5ceaad67a15099309b58bc8c3a9f7c3d82eeca.CALL( )
- ETH 0.009
0x7c734d78a247a5ee3f9a64ce061db270a7cfef37.CALL( )
[Gida (ln:192)]
paymentRejectedEvent[Gida (ln:220)]
revert[Gida (ln:221)]
recoverPasswordEvent[Gida (ln:226)]
buyLevel[Gida (ln:228)]
payForLevel[Gida (ln:322)]
send[Gida (ln:393)]
transferToAdmin3[Gida (ln:399)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
transferToAdmins[Gida (ln:403)]
transferToAdmin1[Gida (ln:459)]
send[Gida (ln:468)]
getMoneyForLevelEvent[Gida (ln:469)]
transferToAdmin2[Gida (ln:460)]
send[Gida (ln:477)]
getMoneyForLevelEvent[Gida (ln:478)]
send[Gida (ln:413)]
transferToAdmin3[Gida (ln:419)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
transferToAdmins[Gida (ln:423)]
transferToAdmin1[Gida (ln:459)]
send[Gida (ln:468)]
getMoneyForLevelEvent[Gida (ln:469)]
transferToAdmin2[Gida (ln:460)]
send[Gida (ln:477)]
getMoneyForLevelEvent[Gida (ln:478)]
send[Gida (ln:430)]
getIntroducerMoneyForLevelEvent[Gida (ln:431)]
send[Gida (ln:435)]
transferToAdmin3[Gida (ln:436)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
getMoneyForLevelEvent[Gida (ln:437)]
send[Gida (ln:439)]
getIntroducerMoneyForLevelEvent[Gida (ln:440)]
send[Gida (ln:441)]
getMoneyForLevelEvent[Gida (ln:442)]
lostMoneyForLevelEvent[Gida (ln:445)]
payForLevel[Gida (ln:446)]
buyLevelEvent[Gida (ln:323)]
bytesToAddress[Gida (ln:234)]
paymentRejectedEvent[Gida (ln:239)]
revert[Gida (ln:240)]
regUser[Gida (ln:242)]
findFreeReferrer[Gida (ln:265)]
UserStruct[Gida (ln:272)]
push[Gida (ln:294)]
payForLevel[Gida (ln:296)]
send[Gida (ln:393)]
transferToAdmin3[Gida (ln:399)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
transferToAdmins[Gida (ln:403)]
transferToAdmin1[Gida (ln:459)]
send[Gida (ln:468)]
getMoneyForLevelEvent[Gida (ln:469)]
transferToAdmin2[Gida (ln:460)]
send[Gida (ln:477)]
getMoneyForLevelEvent[Gida (ln:478)]
send[Gida (ln:413)]
transferToAdmin3[Gida (ln:419)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
transferToAdmins[Gida (ln:423)]
transferToAdmin1[Gida (ln:459)]
send[Gida (ln:468)]
getMoneyForLevelEvent[Gida (ln:469)]
transferToAdmin2[Gida (ln:460)]
send[Gida (ln:477)]
getMoneyForLevelEvent[Gida (ln:478)]
send[Gida (ln:430)]
getIntroducerMoneyForLevelEvent[Gida (ln:431)]
send[Gida (ln:435)]
transferToAdmin3[Gida (ln:436)]
send[Gida (ln:486)]
getMoneyForLevelEvent[Gida (ln:487)]
getMoneyForLevelEvent[Gida (ln:437)]
send[Gida (ln:439)]
getIntroducerMoneyForLevelEvent[Gida (ln:440)]
send[Gida (ln:441)]
getMoneyForLevelEvent[Gida (ln:442)]
lostMoneyForLevelEvent[Gida (ln:445)]
payForLevel[Gida (ln:446)]
regLevelEvent[Gida (ln:298)]
paymentRejectedEvent[Gida (ln:244)]
revert[Gida (ln:245)]
paymentRejectedEvent[Gida (ln:248)]
revert[Gida (ln:249)]
/* telegram: @gida hashtag: #gida_corp */ pragma solidity ^0.5.7; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; address public manager; address public introducer; address public ownerWallet1; address public ownerWallet2; address public ownerWallet3; constructor() public { owner = msg.sender; manager = msg.sender; ownerWallet1 = 0x42910288DcD576aE8574D611575Dfe35D9fA2Aa2; ownerWallet2 = 0xc40A767980fe384BBc367A8A0EeFF2BCC871A6c9; ownerWallet3 = 0x7c734D78a247A5eE3f9A64cE061DB270A7cFeF37; } modifier onlyOwner() { require(msg.sender == owner, "only for owner"); _; } modifier onlyOwnerOrManager() { require((msg.sender == owner)||(msg.sender == manager), "only for owner or manager"); _; } function transferOwnership(address newOwner) public onlyOwner { owner = newOwner; } function setManager(address _manager) public onlyOwnerOrManager { manager = _manager; } } contract Gida is Ownable { event regLevelEvent(address indexed _user, address indexed _referrer, uint _time); event consoleEvent(uint _msg); event recoverPasswordEvent(address indexed _user, uint _time); event paymentRejectedEvent(string _message, address indexed _user); event buyLevelEvent(address indexed _user, uint _level, uint _time); event prolongateLevelEvent(address indexed _user, uint _level, uint _time); event getIntroducerMoneyForLevelEvent(address indexed _user, address indexed _referral, uint _level, uint _time, uint amount); event getMoneyForLevelEvent(address indexed _user, address indexed _referral, uint _level, uint _time, uint amount); event lostMoneyForLevelEvent(address indexed _user, address indexed _referral, uint _level, uint _time, uint amount); //------------------------------ mapping (uint => uint) public LEVEL_PRICE; uint REFERRER_1_LEVEL_LIMIT = 3; uint RECOVER_PASSWORD = 0.01 ether; uint PERIOD_LENGTH = 90 days; struct UserStruct { bool isExist; uint id; uint referrerID; uint introducerID; address[] referral; mapping (uint => uint) levelExpired; } mapping (address => UserStruct) public users; mapping (uint => address) public userList; uint public currUserID = 0; constructor() public { LEVEL_PRICE[1] = 0.12 ether; LEVEL_PRICE[2] = 0.3 ether; LEVEL_PRICE[3] = 1 ether; LEVEL_PRICE[4] = 3 ether; LEVEL_PRICE[5] = 10 ether; LEVEL_PRICE[6] = 4 ether; LEVEL_PRICE[7] = 11 ether; LEVEL_PRICE[8] = 30 ether; LEVEL_PRICE[9] = 90 ether; LEVEL_PRICE[10] = 300 ether; UserStruct memory userStruct1; UserStruct memory userStruct2; UserStruct memory userStruct3; currUserID++; userStruct1 = UserStruct({ isExist : true, id : currUserID, referrerID : 0, introducerID : 0, referral : new address[](0) }); users[ownerWallet1] = userStruct1; userList[currUserID] = ownerWallet1; users[ownerWallet1].levelExpired[1] = 77777777777; users[ownerWallet1].levelExpired[2] = 77777777777; users[ownerWallet1].levelExpired[3] = 77777777777; users[ownerWallet1].levelExpired[4] = 77777777777; users[ownerWallet1].levelExpired[5] = 77777777777; users[ownerWallet1].levelExpired[6] = 77777777777; users[ownerWallet1].levelExpired[7] = 77777777777; users[ownerWallet1].levelExpired[8] = 77777777777; users[ownerWallet1].levelExpired[9] = 77777777777; users[ownerWallet1].levelExpired[10] = 77777777777; currUserID++; userStruct2 = UserStruct({ isExist : true, id : currUserID, referrerID : 0, introducerID : 0, referral : new address[](0) }); users[ownerWallet2] = userStruct2; userList[currUserID] = ownerWallet2; users[ownerWallet2].levelExpired[1] = 77777777777; users[ownerWallet2].levelExpired[2] = 77777777777; users[ownerWallet2].levelExpired[3] = 77777777777; users[ownerWallet2].levelExpired[4] = 77777777777; users[ownerWallet2].levelExpired[5] = 77777777777; users[ownerWallet2].levelExpired[6] = 77777777777; users[ownerWallet2].levelExpired[7] = 77777777777; users[ownerWallet2].levelExpired[8] = 77777777777; users[ownerWallet2].levelExpired[9] = 77777777777; users[ownerWallet2].levelExpired[10] = 77777777777; currUserID++; userStruct3 = UserStruct({ isExist : true, id : currUserID, referrerID : 0, introducerID : 0, referral : new address[](0) }); users[ownerWallet3] = userStruct3; userList[currUserID] = ownerWallet3; users[ownerWallet3].levelExpired[1] = 77777777777; users[ownerWallet3].levelExpired[2] = 77777777777; users[ownerWallet3].levelExpired[3] = 77777777777; users[ownerWallet3].levelExpired[4] = 77777777777; users[ownerWallet3].levelExpired[5] = 77777777777; users[ownerWallet3].levelExpired[6] = 77777777777; users[ownerWallet3].levelExpired[7] = 77777777777; users[ownerWallet3].levelExpired[8] = 77777777777; users[ownerWallet3].levelExpired[9] = 77777777777; users[ownerWallet3].levelExpired[10] = 77777777777; } function () external payable { uint level; uint passwordRecovery = 0; if(msg.value == LEVEL_PRICE[1]){ level = 1; }else if(msg.value == LEVEL_PRICE[2]){ level = 2; }else if(msg.value == LEVEL_PRICE[3]){ level = 3; }else if(msg.value == LEVEL_PRICE[4]){ level = 4; }else if(msg.value == LEVEL_PRICE[5]){ level = 5; }else if(msg.value == LEVEL_PRICE[6]){ level = 6; }else if(msg.value == LEVEL_PRICE[7]){ level = 7; }else if(msg.value == LEVEL_PRICE[8]){ level = 8; }else if(msg.value == LEVEL_PRICE[9]){ level = 9; }else if(msg.value == LEVEL_PRICE[10]){ level = 10; }else if(msg.value == RECOVER_PASSWORD){ passwordRecovery = 1; }else { emit paymentRejectedEvent('Incorrect Value send', msg.sender); revert('Incorrect Value send'); } if(users[msg.sender].isExist){ if(passwordRecovery==1){ emit recoverPasswordEvent(msg.sender, now); }else{ buyLevel(level); } } else if(level == 1) { if(passwordRecovery==0){ uint refId = 0; address referrer = bytesToAddress(msg.data); if (users[referrer].isExist){ refId = users[referrer].id; } else { emit paymentRejectedEvent('Incorrect referrer', msg.sender); revert('Incorrect referrer'); } regUser(refId); }else{ emit paymentRejectedEvent('User does not exist to recover password.', msg.sender); revert('User does not exist to recover password.'); } } else { emit paymentRejectedEvent('Please buy first level for 0.12 ETH', msg.sender); revert('Please buy first level for 0.12 ETH'); } } function regUser(uint _introducerID) public payable { uint _referrerID; require(!users[msg.sender].isExist, 'User exist'); require(_introducerID > 0 && _introducerID <= currUserID, 'Incorrect referrer Id'); require(msg.value==LEVEL_PRICE[1], 'Incorrect Value'); /* Default will be introducer, if 3 limit not reached */ _referrerID = _introducerID; if(users[userList[_introducerID]].referral.length >= REFERRER_1_LEVEL_LIMIT) { _referrerID = users[findFreeReferrer(userList[_introducerID])].id; } UserStruct memory userStruct; currUserID++; userStruct = UserStruct({ isExist : true, id : currUserID, referrerID : _referrerID, introducerID : _introducerID, referral : new address[](0) }); users[msg.sender] = userStruct; userList[currUserID] = msg.sender; users[msg.sender].levelExpired[1] = now + PERIOD_LENGTH; users[msg.sender].levelExpired[2] = 0; users[msg.sender].levelExpired[3] = 0; users[msg.sender].levelExpired[4] = 0; users[msg.sender].levelExpired[5] = 0; users[msg.sender].levelExpired[6] = 0; users[msg.sender].levelExpired[7] = 0; users[msg.sender].levelExpired[8] = 0; users[msg.sender].levelExpired[9] = 0; users[msg.sender].levelExpired[10] = 0; users[userList[_referrerID]].referral.push(msg.sender); payForLevel(1, msg.sender); emit regLevelEvent(msg.sender, userList[_referrerID], now); } function buyLevel(uint _level) public payable { require(users[msg.sender].isExist, 'User not exist'); require( _level>0 && _level<=10, 'Incorrect level'); if(_level == 1){ require(msg.value==LEVEL_PRICE[1], 'Incorrect Value'); users[msg.sender].levelExpired[1] += PERIOD_LENGTH; } else { require(msg.value==LEVEL_PRICE[_level], 'Incorrect Value'); for(uint l =_level-1; l>0; l-- ){ require(users[msg.sender].levelExpired[l] >= now, 'Buy the previous level'); } if(users[msg.sender].levelExpired[_level] == 0){ users[msg.sender].levelExpired[_level] = now + PERIOD_LENGTH; } else { users[msg.sender].levelExpired[_level] += PERIOD_LENGTH; } } payForLevel(_level, msg.sender); emit buyLevelEvent(msg.sender, _level, now); } function payForLevel(uint _level, address _user) internal { address referer; address referer1; address referer2; address referer3; address referer4; if(_level == 1 || _level == 6){ referer = userList[users[_user].referrerID]; } else if(_level == 2 || _level == 7){ referer1 = userList[users[_user].referrerID]; referer = userList[users[referer1].referrerID]; } else if(_level == 3 || _level == 8){ referer1 = userList[users[_user].referrerID]; referer2 = userList[users[referer1].referrerID]; referer = userList[users[referer2].referrerID]; } else if(_level == 4 || _level == 9){ referer1 = userList[users[_user].referrerID]; referer2 = userList[users[referer1].referrerID]; referer3 = userList[users[referer2].referrerID]; referer = userList[users[referer3].referrerID]; } else if(_level == 5 || _level == 10){ referer1 = userList[users[_user].referrerID]; referer2 = userList[users[referer1].referrerID]; referer3 = userList[users[referer2].referrerID]; referer4 = userList[users[referer3].referrerID]; referer = userList[users[referer4].referrerID]; } introducer = userList[users[msg.sender].introducerID]; /* Split amount and send comission to admins */ uint level; uint introducerlevel; uint firstAdminPart; uint finalToAdmin; uint introducerPart; uint refererPart; bool result; level = _level; if(_level==1){ introducerPart = 0.02 ether; /* introducer will get 0.02*/ refererPart = 0.1 ether; /* remaining 0.1 will go to referer*/ }else{ firstAdminPart = (msg.value * 3)/100; /* 3% will go to admin*/ introducerPart = (msg.value * 15)/100; /* introducer will get 15%*/ refererPart = msg.value - (firstAdminPart + introducerPart); /* remaining 82% will go to referer*/ } introducerlevel = 0; for(uint l = _level; l <= 10; l++ ){ if(users[introducer].levelExpired[l] >= now){ introducerlevel = l; break; } } if(!users[referer].isExist){ finalToAdmin = msg.value; if(users[introducer].isExist && _level>1){ if(introducerlevel >= _level){ if(userList[1] != introducer && userList[2] != introducer){ result = address(uint160(introducer)).send(introducerPart); finalToAdmin = finalToAdmin-introducerPart; } }else{ firstAdminPart = firstAdminPart+introducerPart; } transferToAdmin3(firstAdminPart, msg.sender, level); finalToAdmin = finalToAdmin-firstAdminPart; } /* If referer not exist then transfer amount to admins */ transferToAdmins(finalToAdmin, msg.sender, level); }else{ /* Admins are referer */ if(userList[1]==referer || userList[2]==referer ){ finalToAdmin = msg.value; if(users[introducer].isExist && _level>1){ if(introducerlevel >= _level){ if(userList[1] != introducer && userList[2] != introducer){ result = address(uint160(introducer)).send(introducerPart); finalToAdmin = finalToAdmin-introducerPart; } }else{ firstAdminPart = firstAdminPart+introducerPart; } transferToAdmin3(firstAdminPart, msg.sender, level); finalToAdmin = finalToAdmin-firstAdminPart; } /* If referer not exist then transfer amount to admins */ transferToAdmins(finalToAdmin, msg.sender, level); }else{ if(users[referer].levelExpired[level] >= now ){ if(level>1){ if(introducerlevel >= level){ result = address(uint160(introducer)).send(introducerPart); emit getIntroducerMoneyForLevelEvent(introducer, msg.sender, level, now, introducerPart); }else{ firstAdminPart = firstAdminPart+introducerPart; } result = address(uint160(referer)).send(refererPart); transferToAdmin3(firstAdminPart, msg.sender, level); emit getMoneyForLevelEvent(referer, msg.sender, level, now, refererPart); }else{ result = address(uint160(introducer)).send(introducerPart); emit getIntroducerMoneyForLevelEvent(introducer, msg.sender, level, now, introducerPart); result = address(uint160(referer)).send(refererPart); emit getMoneyForLevelEvent(referer, msg.sender, level, now, refererPart); } } else { emit lostMoneyForLevelEvent(referer, msg.sender, level, now, refererPart); payForLevel(level,referer); } } } } function transferToAdmins(uint amount, address _sender, uint _level) public payable returns(bool) { uint firstPart; uint secondPart; firstPart = (amount*70)/100; /* 70% will go to first admin*/ secondPart = amount-firstPart; /* remaining 30% will go to second admin*/ transferToAdmin1(firstPart, _sender, _level); transferToAdmin2(secondPart, _sender, _level); return true; } function transferToAdmin1(uint amount, address _sender, uint _level) public payable returns(bool) { address admin1; bool result1; admin1 = userList[1]; result1 = address(uint160(admin1)).send(amount); emit getMoneyForLevelEvent(admin1, _sender, _level, now, amount); return result1; } function transferToAdmin2(uint amount, address _sender, uint _level) public payable returns(bool) { address admin2; bool result2; admin2 = userList[2]; result2 = address(uint160(admin2)).send(amount); emit getMoneyForLevelEvent(admin2, _sender, _level, now, amount); return result2; } function transferToAdmin3(uint amount, address _sender, uint _level) public payable returns(bool) { address admin2; bool result2; admin2 = userList[3]; result2 = address(uint160(admin2)).send(amount); emit getMoneyForLevelEvent(admin2, _sender, _level, now, amount); return result2; } function findFreeReferrer(address _user) public view returns(address) { if(users[_user].referral.length < REFERRER_1_LEVEL_LIMIT){ return _user; } address[] memory referrals = new address[](363); referrals[0] = users[_user].referral[0]; referrals[1] = users[_user].referral[1]; referrals[2] = users[_user].referral[2]; address freeReferrer; bool noFreeReferrer = true; for(uint i =0; i<363;i++){ if(users[referrals[i]].referral.length == REFERRER_1_LEVEL_LIMIT){ if(i<120){ referrals[(i+1)*3] = users[referrals[i]].referral[0]; referrals[(i+1)*3+1] = users[referrals[i]].referral[1]; referrals[(i+1)*3+2] = users[referrals[i]].referral[2]; } }else{ noFreeReferrer = false; freeReferrer = referrals[i]; break; } } require(!noFreeReferrer, 'No Free Referrer'); return freeReferrer; } function viewUserReferral(address _user) public view returns(address[] memory) { return users[_user].referral; } function viewUserLevelExpired(address _user, uint _level) public view returns(uint) { return users[_user].levelExpired[_level]; } function bytesToAddress(bytes memory bys) private pure returns (address addr ) { assembly { addr := mload(add(bys, 20)) } } }