Transaction Hash:
Block:
12695466 at Jun-24-2021 07:09:08 AM +UTC
Transaction Fee:
0.00378024 ETH
$9.09
Gas Used:
378,024 Gas / 10 Gwei
Emitted Events:
76 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0xa9f28356d20ef4af663ec7cc27ab8fd5b12f87c066d9aec3d9dc1abd559eae8f( 0xa9f28356d20ef4af663ec7cc27ab8fd5b12f87c066d9aec3d9dc1abd559eae8f, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000000000000000ab1d, 0000000000000000000000000000000000000000000000000000000000008a99, 0000000000000000000000000000000000000000000000000000000000008a60, 0000000000000000000000000000000000000000000000000000000060d42f94, 000000000000000000000000000000000000000000000000016345785d8a0000, 0000000000000000000000000000000000000000000000000000000000000001 )
|
77 |
OpenAlexaProtocol.Transfer( from=[Receiver] 0xfa54969a776f57b6af8117b6b157b448b6c1ef7f, to=[Sender] 0xd56604bea4188fb61e60edc261923b5450094761, value=9990000000000000000 )
|
78 |
OpenAlexaProtocol.Transfer( from=[Receiver] 0xfa54969a776f57b6af8117b6b157b448b6c1ef7f, to=0xA35E62E5EB729142643Df04838e5C71113564Fbd, value=10000000000000000 )
|
79 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x4fad0f11423e7016ad9c1a43ab6ee598c3289b24e75238e7cad39b2e217f61b6( 0x4fad0f11423e7016ad9c1a43ab6ee598c3289b24e75238e7cad39b2e217f61b6, 0x0000000000000000000000002ec9e15f1e53fe30b030c5585b6257dca52201ba, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 000000000000000000000000000000000000000000000000002386f26fc10000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
80 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414( 0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414, 0x000000000000000000000000a798b797b396f08085758096976dd480a92e3474, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 00000000000000000000000000000000000000000000000000354a6ba7a18000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
81 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414( 0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414, 0x0000000000000000000000002ec9e15f1e53fe30b030c5585b6257dca52201ba, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 00000000000000000000000000000000000000000000000000354a6ba7a18000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
82 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414( 0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414, 0x0000000000000000000000007b769a4e72ab595ee4c0f549b310c80806d9e89d, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 00000000000000000000000000000000000000000000000000354a6ba7a18000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
83 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414( 0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414, 0x000000000000000000000000bfe22d45f9183f4702defe8ffb83f1c8854bd34e, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 00000000000000000000000000000000000000000000000000354a6ba7a18000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
84 |
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414( 0x292dd44515353f6d5d4f039ce4c232849828fd980c1638911050d687330ac414, 0x000000000000000000000000898b4cdaae3d6e638c5c139a3909c1928f63b63c, 0x000000000000000000000000d56604bea4188fb61e60edc261923b5450094761, 000000000000000000000000000000000000000000000000016345785d8a0000, 00000000000000000000000000000000000000000000000000354a6ba7a18000, 0000000000000000000000000000000000000000000000000000000060d42f94 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x17884306...5ddE1A316 | |||||
0x2eC9e15f...cA52201Ba | 0.24231898642878332 Eth | 0.26731898642878332 Eth | 0.025 | ||
0x44b13a9e...EEa45eaCA | |||||
0x629dBB4e...43D7F5575 | (OpenAlexa.io: Deployer) | 5.561753456484081268 Eth | 5.576753456484081268 Eth | 0.015 | |
0x7b769a4e...806D9e89D | 18.0775596028 Eth | 18.0925596028 Eth | 0.015 | ||
0x829BD824...93333A830
Miner
| (F2Pool Old) | 1,887.023365640185993379 Eth | 1,887.027145880185993379 Eth | 0.00378024 | |
0x898b4cDa...28F63B63C | 304.885 Eth | 304.9 Eth | 0.015 | ||
0xA798B797...0a92E3474 | 0.039696742452777205 Eth | 0.054696742452777205 Eth | 0.015 | ||
0xbFe22d45...8854bd34e | 63.546060431 Eth | 63.561060431 Eth | 0.015 | ||
0xD56604BE...450094761 |
0.11839543398630414 Eth
Nonce: 3
|
0.01461519398630414 Eth
Nonce: 4
| 0.10378024 |
Execution Trace
ETH 0.1
0xfa54969a776f57b6af8117b6b157b448b6c1ef7f.985225db( )
-
OpenAlexalO.userList( 35424 ) => ( 0x2eC9e15f1E53fE30b030C5585B6257DcA52201Ba )
-
OpenAlexalO.users( 0xD56604BEa4188FB61e60EdC261923b5450094761 ) => ( isExist=True, id=43805, referrerID=35481, currentLevel=1, totalEarningEth=200000000000000000 )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.7de41a01( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.7de41a01( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.3dbdae4e( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.0ef12aa9( )
-
OpenAlexalO.users( 0xD56604BEa4188FB61e60EdC261923b5450094761 ) => ( isExist=True, id=43805, referrerID=35481, currentLevel=1, totalEarningEth=200000000000000000 )
-
OpenAlexalO.users( 0xD56604BEa4188FB61e60EdC261923b5450094761 ) => ( isExist=True, id=43805, referrerID=35481, currentLevel=1, totalEarningEth=200000000000000000 )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.3dbdae4e( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.b634fb7d( )
-
OpenAlexalO.users( 0xD56604BEa4188FB61e60EdC261923b5450094761 ) => ( isExist=True, id=43805, referrerID=35481, currentLevel=1, totalEarningEth=200000000000000000 )
-
OpenAlexalO.users( 0xD56604BEa4188FB61e60EdC261923b5450094761 ) => ( isExist=True, id=43805, referrerID=35481, currentLevel=1, totalEarningEth=200000000000000000 )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.829886f4( )
-
OpenAlexaProtocol.transfer( _to=0xD56604BEa4188FB61e60EdC261923b5450094761, _value=10000000000000000000 ) => ( True )
-
OpenAlexalO.userList( 35424 ) => ( 0x2eC9e15f1E53fE30b030C5585B6257DcA52201Ba )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.0ef12aa9( )
-
OpenAlexalO.userList( 35424 ) => ( 0x2eC9e15f1E53fE30b030C5585B6257DcA52201Ba )
- ETH 0.01
0x2ec9e15f1e53fe30b030c5585b6257dca52201ba.CALL( )
-
OpenAlexalO.userList( 35424 ) => ( 0x2eC9e15f1E53fE30b030C5585B6257DcA52201Ba )
-
OpenAlexalO.userList( 1 ) => ( 0x629dBB4eCdE5Fa809fDc68cB1b75f6f43D7F5575 )
- ETH 0.015
OpenAlexa.io: Deployer.CALL( )
-
OpenAlexalO.users( 0xA798B797B396f08085758096976dD480a92E3474 ) => ( isExist=True, id=35432, referrerID=35424, currentLevel=1, totalEarningEth=200000000000000000 )
- ETH 0.015
0xa798b797b396f08085758096976dd480a92e3474.CALL( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.5d48f08c( )
-
OpenAlexalO.users( 0x2eC9e15f1E53fE30b030C5585B6257DcA52201Ba ) => ( isExist=True, id=35424, referrerID=35333, currentLevel=1, totalEarningEth=200000000000000000 )
- ETH 0.015
0x2ec9e15f1e53fe30b030c5585b6257dca52201ba.CALL( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.5d48f08c( )
-
OpenAlexalO.users( 0x7b769a4e72AB595Ee4c0F549b310c80806D9e89D ) => ( isExist=True, id=25358, referrerID=25340, currentLevel=2, totalEarningEth=1100000000000000000 )
- ETH 0.015
0x7b769a4e72ab595ee4c0f549b310c80806d9e89d.CALL( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.5d48f08c( )
-
OpenAlexalO.users( 0xbFe22d45f9183f4702DEFe8FfB83f1c8854bd34e ) => ( isExist=True, id=25285, referrerID=25272, currentLevel=1, totalEarningEth=200000000000000000 )
- ETH 0.015
0xbfe22d45f9183f4702defe8ffb83f1c8854bd34e.CALL( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.5d48f08c( )
-
OpenAlexalO.users( 0x898b4cDaAe3d6E638c5C139a3909C1928F63B63C ) => ( isExist=True, id=30, referrerID=15, currentLevel=2, totalEarningEth=60000000000000000 )
- ETH 0.015
0x898b4cdaae3d6e638c5c139a3909c1928f63b63c.CALL( )
-
0x44b13a9ec5bba78a52a1e074e37a690eea45eaca.5d48f08c( )
File 1 of 2: OpenAlexaProtocol
File 2 of 2: OpenAlexalO
pragma solidity 0.5.14; library SafeMath { 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) { // Solidity only automatically asserts when divide by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: Modulo by zero"); return a % b; } } contract ERC20 { function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); function transfer(address to, uint256 value) public returns(bool); function allowance(address owner, address spender) public view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract OpenAlexaProtocol is ERC20 { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; address public burnAddress; address public owner; address public sigAddress; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; mapping (bytes32 => bool) private hashConfirmation; constructor (address _burnAddress, address _sigAddress) public { symbol = "OAP"; name = "Open Alexa Protocol"; decimals = 18; burnAddress = _burnAddress; owner = msg.sender; sigAddress = _sigAddress; } modifier onlyOwner() { require(msg.sender == owner, "Only owner"); _; } /** * @dev Check balance of the holder * @param _owner Token holder address */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } /** * @dev Transfer token to specified address * @param _to Receiver address * @param _value Amount of the tokens */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0), "Invalid address"); require(_value <= balances[msg.sender], "Insufficient balance"); balances[msg.sender] = balances[msg.sender].sub(_value); uint256 burnFee = (_value.mul(0.1 ether)).div(10**20); uint256 balanceFee = _value.sub(burnFee); balances[burnAddress] = balances[burnAddress].add(burnFee); balances[_to] = balances[_to].add(balanceFee); emit Transfer(msg.sender, _to, balanceFee); emit Transfer(msg.sender, burnAddress, burnFee); return true; } /** * @dev Transfer tokens from one address to another * @param _from The holder address * @param _to The Receiver address * @param _value the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_from != address(0), "Invalid from address"); require(_to != address(0), "Invalid to address"); require(_value <= balances[_from], "Invalid balance"); require(_value <= allowed[_from][msg.sender], "Invalid allowance"); balances[_from] = balances[_from].sub(_value); uint256 burnFee = (_value.mul(0.1 ether)).div(10**20); uint256 balanceFee = _value.sub(burnFee); balances[burnAddress] = balances[burnAddress].add(burnFee); balances[msg.sender] = balances[msg.sender].add(balanceFee); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, balanceFee); emit Transfer(_from, burnAddress, burnFee); return true; } /** * @dev Approve respective tokens for spender * @param _spender Spender address * @param _value Amount of tokens to be allowed */ function approve(address _spender, uint256 _value) public returns (bool) { require(_spender != address(0), "Null address"); require(_value > 0, "Invalid value"); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev To view approved balance * @param _owner Holder address * @param _spender Spender address */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev To change burnt Address * @param _newOwner New owner address */ function changeowner(address _newOwner) public onlyOwner returns(bool) { require(_newOwner != address(0), "Invalid Address"); owner = _newOwner; return true; } /** * @dev To change burnt Address * @param _burnAddress New burn address */ function changeburnt(address _burnAddress) public onlyOwner returns(bool) { require(_burnAddress != address(0), "Invalid Address"); burnAddress = _burnAddress; return true; } /** * @dev To change signature Address * @param _newSigAddress New sigOwner address */ function changesigAddress(address _newSigAddress) public onlyOwner returns(bool) { require(_newSigAddress != address(0), "Invalid Address"); sigAddress = _newSigAddress; return true; } /** * @dev To mint OAP Tokens * @param _receiver Reciever address * @param _amount Amount to mint * @param _mrs _mrs[0] - message hash _mrs[1] - r of signature _mrs[2] - s of signature * @param _v v of signature */ function mint(address _receiver, uint256 _amount,bytes32[3] memory _mrs, uint8 _v) public returns (bool) { require(_receiver != address(0), "Invalid address"); require(_amount >= 0, "Invalid amount"); require(hashConfirmation[_mrs[0]] != true, "Hash exists"); require(ecrecover(_mrs[0], _v, _mrs[1], _mrs[2]) == sigAddress, "Invalid Signature"); totalSupply = totalSupply.add(_amount); balances[_receiver] = balances[_receiver].add(_amount); hashConfirmation[_mrs[0]] = true; emit Transfer(address(0), _receiver, _amount); return true; } /** * @dev To mint OAP Tokens * @param _receiver Reciever address * @param _amount Amount to mint */ function ownerMint(address _receiver, uint256 _amount) public onlyOwner returns (bool) { require(_receiver != address(0), "Invalid address"); require(_amount >= 0, "Invalid amount"); totalSupply = totalSupply.add(_amount); balances[_receiver] = balances[_receiver].add(_amount); emit Transfer(address(0), _receiver, _amount); return true; } }
File 2 of 2: OpenAlexalO
/** * * Updated OpenAlexa v1.2 (Fixed) * URL: https://openalexa.io * */ pragma solidity 0.5.14; library SafeMath { 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; } } contract ERC20 { function mint(address reciever, uint256 value, bytes32[3] memory _mrs, uint8 _v) public returns(bool); function transfer(address to, uint256 value) public returns(bool); } contract OpenAlexalO { using SafeMath for uint256; struct UserStruct { bool isExist; uint id; uint referrerID; uint currentLevel; uint totalEarningEth; address[] referral; mapping(uint => uint) levelExpired; } ERC20 Token; OpenAlexalO public oldAlexa; address public ownerAddress; uint public adminFee = 16 ether; uint public currentId = 0; uint public oldAlexaId = 1; uint public PERIOD_LENGTH = 60 days; uint referrer1Limit = 2; bool public lockStatus; mapping (uint => uint) public LEVEL_PRICE; mapping (address => UserStruct) public users; mapping (uint => address) public userList; mapping (address => mapping (uint => uint)) public EarnedEth; mapping (address => uint) public loopCheck; mapping (address => uint) public createdDate; event regLevelEvent(address indexed UserAddress, address indexed ReferrerAddress, uint Time); event buyLevelEvent(address indexed UserAddress, uint Levelno, uint Time); event getMoneyForLevelEvent(address indexed UserAddress, uint UserId, address indexed ReferrerAddress, uint ReferrerId, uint Levelno, uint LevelPrice, uint Time); event lostMoneyForLevelEvent(address indexed UserAddress, uint UserId, address indexed ReferrerAddress, uint ReferrerId, uint Levelno, uint LevelPrice, uint Time); constructor() public { ownerAddress = msg.sender; Token = ERC20(0x1788430620960F9a70e3DC14202a3A35ddE1A316); oldAlexa = OpenAlexalO(0xaB3FB81f8660788997CFD379f7A87e9527F1301b); LEVEL_PRICE[1] = 0.03 ether; LEVEL_PRICE[2] = 0.05 ether; LEVEL_PRICE[3] = 0.1 ether; LEVEL_PRICE[4] = 0.5 ether; LEVEL_PRICE[5] = 1 ether; LEVEL_PRICE[6] = 3 ether; LEVEL_PRICE[7] = 7 ether; LEVEL_PRICE[8] = 12 ether; LEVEL_PRICE[9] = 15 ether; LEVEL_PRICE[10] = 25 ether; LEVEL_PRICE[11] = 30 ether; LEVEL_PRICE[12] = 39 ether; } /** * @dev User registration */ function regUser(uint _referrerID, bytes32[3] calldata _mrs, uint8 _v) external payable { require(lockStatus == false, "Contract Locked"); require(users[msg.sender].isExist == false, "User exist"); require(_referrerID > 0 && _referrerID <= currentId, "Incorrect referrer Id"); require(msg.value == LEVEL_PRICE[1], "Incorrect Value"); if (users[userList[_referrerID]].referral.length >= referrer1Limit) _referrerID = users[findFreeReferrer(userList[_referrerID])].id; UserStruct memory userStruct; currentId++; userStruct = UserStruct({ isExist: true, id: currentId, referrerID: _referrerID, currentLevel: 1, totalEarningEth:0, referral: new address[](0) }); users[msg.sender] = userStruct; userList[currentId] = msg.sender; users[msg.sender].levelExpired[1] = now.add(PERIOD_LENGTH); users[userList[_referrerID]].referral.push(msg.sender); loopCheck[msg.sender] = 0; createdDate[msg.sender] = now; payForLevel(0, 1, msg.sender, ((LEVEL_PRICE[1].mul(adminFee)).div(10**20)), _mrs, _v, msg.value); emit regLevelEvent(msg.sender, userList[_referrerID], now); } /** * @dev To buy the next level by User */ function buyLevel(uint256 _level, bytes32[3] calldata _mrs, uint8 _v) external payable { require(lockStatus == false, "Contract Locked"); require(users[msg.sender].isExist, "User not exist"); require(_level > 0 && _level <= 12, "Incorrect level"); if (_level == 1) { require(msg.value == LEVEL_PRICE[1], "Incorrect Value"); users[msg.sender].levelExpired[1] = users[msg.sender].levelExpired[1].add(PERIOD_LENGTH); users[msg.sender].currentLevel = 1; } else { require(msg.value == LEVEL_PRICE[_level], "Incorrect Value"); users[msg.sender].currentLevel = _level; for (uint i = _level - 1; i > 0; i--) require(users[msg.sender].levelExpired[i] >= 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; } loopCheck[msg.sender] = 0; payForLevel(0, _level, msg.sender, ((LEVEL_PRICE[_level].mul(adminFee)).div(10**20)), _mrs, _v, msg.value); emit buyLevelEvent(msg.sender, _level, now); } /** * @dev Internal function for payment */ function payForLevel(uint _flag, uint _level, address _userAddress, uint _adminPrice, bytes32[3] memory _mrs, uint8 _v, uint256 _amt) internal { address[6] memory referer; if (_flag == 0) { if (_level == 1 || _level == 7) { referer[0] = userList[users[_userAddress].referrerID]; } else if (_level == 2 || _level == 8) { referer[1] = userList[users[_userAddress].referrerID]; referer[0] = userList[users[referer[1]].referrerID]; } else if (_level == 3 || _level == 9) { referer[1] = userList[users[_userAddress].referrerID]; referer[2] = userList[users[referer[1]].referrerID]; referer[0] = userList[users[referer[2]].referrerID]; } else if (_level == 4 || _level == 10) { referer[1] = userList[users[_userAddress].referrerID]; referer[2] = userList[users[referer[1]].referrerID]; referer[3] = userList[users[referer[2]].referrerID]; referer[0] = userList[users[referer[3]].referrerID]; } else if (_level == 5 || _level == 11) { referer[1] = userList[users[_userAddress].referrerID]; referer[2] = userList[users[referer[1]].referrerID]; referer[3] = userList[users[referer[2]].referrerID]; referer[4] = userList[users[referer[3]].referrerID]; referer[0] = userList[users[referer[4]].referrerID]; } else if (_level == 6 || _level == 12) { referer[1] = userList[users[_userAddress].referrerID]; referer[2] = userList[users[referer[1]].referrerID]; referer[3] = userList[users[referer[2]].referrerID]; referer[4] = userList[users[referer[3]].referrerID]; referer[5] = userList[users[referer[4]].referrerID]; referer[0] = userList[users[referer[5]].referrerID]; } } else if (_flag == 1) { referer[0] = userList[users[_userAddress].referrerID]; } if (!users[referer[0]].isExist) referer[0] = userList[1]; if (loopCheck[msg.sender] >= 12) { referer[0] = userList[1]; } if (users[referer[0]].levelExpired[_level] >= now) { uint256 tobeminted = ((_amt).mul(10**18)).div(0.01 ether); // transactions require((address(uint160(referer[0])).send(LEVEL_PRICE[_level].sub(_adminPrice))) && (address(uint160(ownerAddress)).send(_adminPrice)) && Token.mint(msg.sender, tobeminted, _mrs, _v), "Transaction Failure"); users[referer[0]].totalEarningEth = users[referer[0]].totalEarningEth.add(LEVEL_PRICE[_level]); EarnedEth[referer[0]][_level] = EarnedEth[referer[0]][_level].add(LEVEL_PRICE[_level]); emit getMoneyForLevelEvent(msg.sender, users[msg.sender].id, referer[0], users[referer[0]].id, _level, LEVEL_PRICE[_level], now); } else { if (loopCheck[msg.sender] < 12) { loopCheck[msg.sender] = loopCheck[msg.sender].add(1); emit lostMoneyForLevelEvent(msg.sender, users[msg.sender].id, referer[0], users[referer[0]].id, _level, LEVEL_PRICE[_level],now); payForLevel(1, _level, referer[0], _adminPrice, _mrs, _v, _amt); } } } /** * @dev Update old contract data */ function oldAlexaSync(uint limit) public { require(address(oldAlexa) != address(0), "Initialize closed"); require(msg.sender == ownerAddress, "Access denied"); for (uint i = 0; i <= limit; i++) { UserStruct memory olduser; address oldusers = oldAlexa.userList(oldAlexaId); (olduser.isExist, olduser.id, olduser.referrerID, olduser.currentLevel, olduser.totalEarningEth) = oldAlexa.users(oldusers); address ref = oldAlexa.userList(olduser.referrerID); if (olduser.isExist) { if (!users[oldusers].isExist) { users[oldusers].isExist = true; users[oldusers].id = oldAlexaId; users[oldusers].referrerID = olduser.referrerID; users[oldusers].currentLevel = olduser.currentLevel; users[oldusers].totalEarningEth = olduser.totalEarningEth; userList[oldAlexaId] = oldusers; users[ref].referral.push(oldusers); createdDate[oldusers] = now; emit regLevelEvent(oldusers, ref, now); for (uint j = 1; j <= 12; j++) { users[oldusers].levelExpired[j] = oldAlexa.viewUserLevelExpired(oldusers, j); EarnedEth[oldusers][j] = oldAlexa.EarnedEth(oldusers, j); } } oldAlexaId++; } else { currentId = oldAlexaId.sub(1); break; } } } /** * @dev Update old contract data */ function setOldAlexaID(uint _id) public returns(bool) { require(ownerAddress == msg.sender, "Access Denied"); oldAlexaId = _id; return true; } /** * @dev Close old contract interaction */ function oldAlexaSyncClosed() external { require(address(oldAlexa) != address(0), "Initialize already closed"); require(msg.sender == ownerAddress, "Access denied"); oldAlexa = OpenAlexalO(0); } /** * @dev Contract balance withdraw */ function failSafe(address payable _toUser, uint _amount) public returns (bool) { require(msg.sender == ownerAddress, "only Owner Wallet"); require(_toUser != address(0), "Invalid Address"); require(address(this).balance >= _amount, "Insufficient balance"); (_toUser).transfer(_amount); return true; } /** * @dev Update admin fee percentage */ function updateFeePercentage(uint256 _adminFee) public returns (bool) { require(msg.sender == ownerAddress, "only OwnerWallet"); adminFee = _adminFee; return true; } /** * @dev Update level price */ function updatePrice(uint _level, uint _price) public returns (bool) { require(msg.sender == ownerAddress, "only OwnerWallet"); LEVEL_PRICE[_level] = _price; return true; } /** * @dev Update contract status */ function contractLock(bool _lockStatus) public returns (bool) { require(msg.sender == ownerAddress, "Invalid User"); lockStatus = _lockStatus; return true; } /** * @dev Update token contract */ function updateToken(address _newToken) public returns (bool) { require(msg.sender == ownerAddress, "Invalid User"); require(_newToken != address(0), "Invalid Token Address"); Token = ERC20(_newToken); return true; } /** * @dev View free Referrer Address */ function findFreeReferrer(address _userAddress) public view returns (address) { if (users[_userAddress].referral.length < referrer1Limit) return _userAddress; address[] memory referrals = new address[](254); referrals[0] = users[_userAddress].referral[0]; referrals[1] = users[_userAddress].referral[1]; address freeReferrer; bool noFreeReferrer = true; for (uint i = 0; i < 254; i++) { if (users[referrals[i]].referral.length == referrer1Limit) { if (i < 126) { referrals[(i+1)*2] = users[referrals[i]].referral[0]; referrals[(i+1)*2+1] = users[referrals[i]].referral[1]; } } else { noFreeReferrer = false; freeReferrer = referrals[i]; break; } } require(!noFreeReferrer, "No Free Referrer"); return freeReferrer; } /** * @dev Total earned ETH */ function getTotalEarnedEther() public view returns (uint) { uint totalEth; for (uint i = 1; i <= currentId; i++) { totalEth = totalEth.add(users[userList[i]].totalEarningEth); } return totalEth; } /** * @dev View referrals */ function viewUserReferral(address _userAddress) external view returns (address[] memory) { return users[_userAddress].referral; } /** * @dev View level expired time */ function viewUserLevelExpired(address _userAddress,uint _level) external view returns (uint) { return users[_userAddress].levelExpired[_level]; } // fallback function () external payable { revert("Invalid Transaction"); } }