Transaction Hash:
Block:
10564242 at Jul-31-2020 12:57:31 AM +UTC
Transaction Fee:
0.009841476323328492 ETH
$18.06
Gas Used:
240,036 Gas / 41.000001347 Gwei
Emitted Events:
| 166 |
Rapido.NewUserPlace( user=[Sender] 0xc2e657eeb6318a157eff89a604c1fe8d567f0d2a, referrer=0x9C3EE67D...05a34B864, matrix=3, level=5, place=1 )
|
| 167 |
Rapido.NewUserPlace( user=[Sender] 0xc2e657eeb6318a157eff89a604c1fe8d567f0d2a, referrer=0xf8ba194b8446d8b3584920b67f2dc9653849c536, matrix=3, level=5, place=5 )
|
| 168 |
Rapido.Upgrade( user=[Sender] 0xc2e657eeb6318a157eff89a604c1fe8d567f0d2a, referrer=0xf8ba194b8446d8b3584920b67f2dc9653849c536, matrix=3, level=5 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x25Cb947e...9739DBdBE | |||||
| 0xc2E657Ee...d567F0D2a |
2.585255116620614043 Eth
Nonce: 23
|
2.375413640297285551 Eth
Nonce: 24
| 0.209841476323328492 | ||
|
0xD224cA0c...503B79f53
Miner
| (UUPool) | 564.792702516936809196 Eth | 564.802543993260137688 Eth | 0.009841476323328492 | |
| 0xF8BA194b...53849C536 | 590.41 Eth | 590.61 Eth | 0.2 |
Execution Trace
ETH 0.2
Rapido.buyNewLevel( matrix=3, level=5 )
- ETH 0.2
0xf8ba194b8446d8b3584920b67f2dc9653849c536.CALL( )
buyNewLevel[Rapido (ln:124)]
isUserExists[Rapido (ln:125)]findFreeX3Referrer[Rapido (ln:137)]updateX3Referrer[Rapido (ln:140)]push[Rapido (ln:217)]NewUserPlace[Rapido (ln:220)]sendETHDividends[Rapido (ln:221)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
NewUserPlace[Rapido (ln:224)]findFreeX3Referrer[Rapido (ln:234)]Reinvest[Rapido (ln:240)]updateX3Referrer[Rapido (ln:241)]sendETHDividends[Rapido (ln:243)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
Reinvest[Rapido (ln:245)]
Upgrade[Rapido (ln:142)]findFreeX6Referrer[Rapido (ln:151)]updateX6Referrer[Rapido (ln:154)]push[Rapido (ln:253)]NewUserPlace[Rapido (ln:254)]sendETHDividends[Rapido (ln:260)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
push[Rapido (ln:264)]NewUserPlace[Rapido (ln:272)]NewUserPlace[Rapido (ln:274)]NewUserPlace[Rapido (ln:279)]NewUserPlace[Rapido (ln:281)]NewUserPlace[Rapido (ln:285)]NewUserPlace[Rapido (ln:287)]updateX6ReferrerSecondLevel[Rapido (ln:291)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
push[Rapido (ln:294)]updateX6[Rapido (ln:302)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:303)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX6[Rapido (ln:306)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:307)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX6[Rapido (ln:309)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:310)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX6[Rapido (ln:315)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:316)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX6[Rapido (ln:318)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:319)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX6[Rapido (ln:324)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6[Rapido (ln:326)]push[Rapido (ln:334)]NewUserPlace[Rapido (ln:335)]NewUserPlace[Rapido (ln:336)]push[Rapido (ln:340)]NewUserPlace[Rapido (ln:341)]NewUserPlace[Rapido (ln:342)]
updateX6ReferrerSecondLevel[Rapido (ln:329)]sendETHDividends[Rapido (ln:350)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX6Referrer[Rapido (ln:377)]Reinvest[Rapido (ln:379)]updateX6Referrer[Rapido (ln:380)]Reinvest[Rapido (ln:382)]sendETHDividends[Rapido (ln:383)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
Upgrade[Rapido (ln:156)]findFreeX12Referrer[Rapido (ln:165)]updateX12Referrer[Rapido (ln:168)]push[Rapido (ln:508)]NewUserPlace[Rapido (ln:509)]sendETHDividends[Rapido (ln:515)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
push[Rapido (ln:519)]push[Rapido (ln:522)]push[Rapido (ln:538)]NewUserPlace[Rapido (ln:539)]NewUserPlace[Rapido (ln:540)]push[Rapido (ln:542)]NewUserPlace[Rapido (ln:543)]NewUserPlace[Rapido (ln:544)]push[Rapido (ln:550)]NewUserPlace[Rapido (ln:551)]NewUserPlace[Rapido (ln:552)]push[Rapido (ln:554)]NewUserPlace[Rapido (ln:555)]NewUserPlace[Rapido (ln:556)]push[Rapido (ln:560)]NewUserPlace[Rapido (ln:561)]NewUserPlace[Rapido (ln:562)]push[Rapido (ln:564)]NewUserPlace[Rapido (ln:565)]NewUserPlace[Rapido (ln:566)]updateX12ReferrerSecondLevel[Rapido (ln:570)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
push[Rapido (ln:573)]updateX12[Rapido (ln:578)]push[Rapido (ln:622)]push[Rapido (ln:623)]NewUserPlace[Rapido (ln:625)]NewUserPlace[Rapido (ln:626)]push[Rapido (ln:628)]NewUserPlace[Rapido (ln:632)]NewUserPlace[Rapido (ln:634)]push[Rapido (ln:640)]push[Rapido (ln:641)]NewUserPlace[Rapido (ln:643)]NewUserPlace[Rapido (ln:644)]push[Rapido (ln:646)]NewUserPlace[Rapido (ln:650)]NewUserPlace[Rapido (ln:652)]
updateX12ReferrerSecondLevel[Rapido (ln:579)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12[Rapido (ln:581)]push[Rapido (ln:622)]push[Rapido (ln:623)]NewUserPlace[Rapido (ln:625)]NewUserPlace[Rapido (ln:626)]push[Rapido (ln:628)]NewUserPlace[Rapido (ln:632)]NewUserPlace[Rapido (ln:634)]push[Rapido (ln:640)]push[Rapido (ln:641)]NewUserPlace[Rapido (ln:643)]NewUserPlace[Rapido (ln:644)]push[Rapido (ln:646)]NewUserPlace[Rapido (ln:650)]NewUserPlace[Rapido (ln:652)]
updateX12ReferrerSecondLevel[Rapido (ln:582)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12[Rapido (ln:587)]push[Rapido (ln:622)]push[Rapido (ln:623)]NewUserPlace[Rapido (ln:625)]NewUserPlace[Rapido (ln:626)]push[Rapido (ln:628)]NewUserPlace[Rapido (ln:632)]NewUserPlace[Rapido (ln:634)]push[Rapido (ln:640)]push[Rapido (ln:641)]NewUserPlace[Rapido (ln:643)]NewUserPlace[Rapido (ln:644)]push[Rapido (ln:646)]NewUserPlace[Rapido (ln:650)]NewUserPlace[Rapido (ln:652)]
updateX12[Rapido (ln:589)]push[Rapido (ln:622)]push[Rapido (ln:623)]NewUserPlace[Rapido (ln:625)]NewUserPlace[Rapido (ln:626)]push[Rapido (ln:628)]NewUserPlace[Rapido (ln:632)]NewUserPlace[Rapido (ln:634)]push[Rapido (ln:640)]push[Rapido (ln:641)]NewUserPlace[Rapido (ln:643)]NewUserPlace[Rapido (ln:644)]push[Rapido (ln:646)]NewUserPlace[Rapido (ln:650)]NewUserPlace[Rapido (ln:652)]
updateX12ReferrerSecondLevel[Rapido (ln:592)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
push[Rapido (ln:597)]updateX12Fromsecond[Rapido (ln:600)]push[Rapido (ln:660)]push[Rapido (ln:661)]NewUserPlace[Rapido (ln:667)]NewUserPlace[Rapido (ln:669)]push[Rapido (ln:670)]NewUserPlace[Rapido (ln:672)]push[Rapido (ln:673)]NewUserPlace[Rapido (ln:675)]
updateX12ReferrerSecondLevel[Rapido (ln:601)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12Fromsecond[Rapido (ln:603)]push[Rapido (ln:660)]push[Rapido (ln:661)]NewUserPlace[Rapido (ln:667)]NewUserPlace[Rapido (ln:669)]push[Rapido (ln:670)]NewUserPlace[Rapido (ln:672)]push[Rapido (ln:673)]NewUserPlace[Rapido (ln:675)]
updateX12ReferrerSecondLevel[Rapido (ln:604)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12Fromsecond[Rapido (ln:606)]push[Rapido (ln:660)]push[Rapido (ln:661)]NewUserPlace[Rapido (ln:667)]NewUserPlace[Rapido (ln:669)]push[Rapido (ln:670)]NewUserPlace[Rapido (ln:672)]push[Rapido (ln:673)]NewUserPlace[Rapido (ln:675)]
updateX12ReferrerSecondLevel[Rapido (ln:607)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12Fromsecond[Rapido (ln:609)]push[Rapido (ln:660)]push[Rapido (ln:661)]NewUserPlace[Rapido (ln:667)]NewUserPlace[Rapido (ln:669)]push[Rapido (ln:670)]NewUserPlace[Rapido (ln:672)]push[Rapido (ln:673)]NewUserPlace[Rapido (ln:675)]
updateX12ReferrerSecondLevel[Rapido (ln:610)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
updateX12ReferrerSecondLevel[Rapido (ln:616)]sendETHDividends[Rapido (ln:685)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
sendETHDividends[Rapido (ln:688)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
findFreeX12Referrer[Rapido (ln:717)]Reinvest[Rapido (ln:719)]updateX12Referrer[Rapido (ln:720)]Reinvest[Rapido (ln:722)]sendETHDividends[Rapido (ln:723)]findEthReceiver[Rapido (ln:485)]MissedEthReceive[Rapido (ln:453)]MissedEthReceive[Rapido (ln:463)]MissedEthReceive[Rapido (ln:473)]
send[Rapido (ln:487)]transfer[Rapido (ln:488)]SentExtraEthDividends[Rapido (ln:492)]
Upgrade[Rapido (ln:170)]
/**
* Rapido.run hybrid matrix (x3,x4,x8)
* https://rapido.run
* (only for rapido.run members)
*
**/
pragma solidity >=0.4.23 <0.6.0;
contract Rapido {
struct User {
uint id;
address referrer;
uint partnersCount;
mapping(uint8 => bool) activeX3Levels;
mapping(uint8 => bool) activeX6Levels;
mapping(uint8 => bool) activeX12Levels;
mapping(uint8 => X3) x3Matrix;
mapping(uint8 => X6) x6Matrix;
mapping(uint8 => X12) x12Matrix;
}
struct X3 {
address currentReferrer;
address[] referrals;
bool blocked;
uint reinvestCount;
}
struct X6 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
bool blocked;
uint reinvestCount;
address closedPart;
}
struct X12 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
uint[] place;
address[] thirdlevelreferrals;
bool blocked;
uint reinvestCount;
address closedPart;
}
uint8 public constant LAST_LEVEL = 15;
mapping(address => User) public users;
mapping(uint => address) public idToAddress;
mapping(uint => address) public userIds;
mapping(address => uint) public balances;
uint public lastUserId = 2;
address public owner;
mapping(uint8 => uint) public levelPrice;
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId);
event Reinvest(address indexed user, address indexed currentReferrer, address indexed caller, uint8 matrix, uint8 level);
event Upgrade(address indexed user, address indexed referrer, uint8 matrix, uint8 level);
event NewUserPlace(address indexed user, address indexed referrer, uint8 matrix, uint8 level, uint8 place);
event MissedEthReceive(address indexed receiver, address indexed from, uint8 matrix, uint8 level);
event SentExtraEthDividends(address indexed from, address indexed receiver, uint8 matrix, uint8 level);
constructor(address ownerAddress) public {
levelPrice[1] = 0.01 ether;
levelPrice[2] = 0.02 ether;
levelPrice[3] = 0.05 ether;
levelPrice[4] = 0.1 ether;
levelPrice[5] = 0.2 ether;
levelPrice[6] = 0.3 ether;
levelPrice[7] = 0.5 ether;
levelPrice[8] = 1 ether;
levelPrice[9] = 2 ether;
levelPrice[10] = 3 ether;
levelPrice[11] = 5 ether;
levelPrice[12] = 10 ether;
levelPrice[13] = 20 ether;
levelPrice[14] = 30 ether;
levelPrice[15] = 50 ether;
owner = ownerAddress;
User memory user = User({
id: 1,
referrer: address(0),
partnersCount: uint(0)
});
users[ownerAddress] = user;
idToAddress[1] = ownerAddress;
for (uint8 i = 1; i <= LAST_LEVEL; i++) {
users[ownerAddress].activeX3Levels[i] = true;
users[ownerAddress].activeX6Levels[i] = true;
users[ownerAddress].activeX12Levels[i] = true;
}
userIds[1] = ownerAddress;
}
function() external payable {
if(msg.data.length == 0) {
return registration(msg.sender, owner);
}
registration(msg.sender, bytesToAddress(msg.data));
}
function registrationExt(address referrerAddress) external payable {
registration(msg.sender, referrerAddress);
}
function buyNewLevel(uint8 matrix, uint8 level) external payable {
require(isUserExists(msg.sender), "user is not exists. Register first.");
require(matrix == 1 || matrix == 2 || matrix==3, "invalid matrix");
require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
if (matrix == 1) {
require(!users[msg.sender].activeX3Levels[level], "level already activated");
if (users[msg.sender].x3Matrix[level-1].blocked) {
users[msg.sender].x3Matrix[level-1].blocked = false;
}
address freeX3Referrer = findFreeX3Referrer(msg.sender, level);
users[msg.sender].x3Matrix[level].currentReferrer = freeX3Referrer;
users[msg.sender].activeX3Levels[level] = true;
updateX3Referrer(msg.sender, freeX3Referrer, level);
emit Upgrade(msg.sender, freeX3Referrer, 1, level);
} else if (matrix == 2){
require(!users[msg.sender].activeX6Levels[level], "level already activated");
if (users[msg.sender].x6Matrix[level-1].blocked) {
users[msg.sender].x6Matrix[level-1].blocked = false;
}
address freeX6Referrer = findFreeX6Referrer(msg.sender, level);
users[msg.sender].activeX6Levels[level] = true;
updateX6Referrer(msg.sender, freeX6Referrer, level);
emit Upgrade(msg.sender, freeX6Referrer, 2, level);
}
else{
require(!users[msg.sender].activeX12Levels[level], "level already activated");
if (users[msg.sender].x12Matrix[level-1].blocked) {
users[msg.sender].x12Matrix[level-1].blocked = false;
}
address freeX12Referrer = findFreeX12Referrer(msg.sender, level);
users[msg.sender].activeX12Levels[level] = true;
updateX12Referrer(msg.sender, freeX12Referrer, level);
emit Upgrade(msg.sender, freeX12Referrer, 3, level);
}
}
function registration(address userAddress, address referrerAddress) private {
require(msg.value == 0.03 ether, "registration cost 0.05");
require(!isUserExists(userAddress), "user exists");
require(isUserExists(referrerAddress), "referrer not exists");
uint32 size;
assembly {
size := extcodesize(userAddress)
}
require(size == 0, "cannot be a contract");
User memory user = User({
id: lastUserId,
referrer: referrerAddress,
partnersCount: 0
});
users[userAddress] = user;
idToAddress[lastUserId] = userAddress;
users[userAddress].referrer = referrerAddress;
users[userAddress].activeX3Levels[1] = true;
users[userAddress].activeX6Levels[1] = true;
users[userAddress].activeX12Levels[1] = true;
userIds[lastUserId] = userAddress;
lastUserId++;
users[referrerAddress].partnersCount++;
address freeX3Referrer = findFreeX3Referrer(userAddress, 1);
users[userAddress].x3Matrix[1].currentReferrer = freeX3Referrer;
updateX3Referrer(userAddress, freeX3Referrer, 1);
updateX6Referrer(userAddress, findFreeX6Referrer(userAddress, 1), 1);
updateX12Referrer(userAddress, findFreeX12Referrer(userAddress, 1), 1);
emit Registration(userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id);
}
function updateX3Referrer(address userAddress, address referrerAddress, uint8 level) private {
users[referrerAddress].x3Matrix[level].referrals.push(userAddress);
if (users[referrerAddress].x3Matrix[level].referrals.length < 3) {
emit NewUserPlace(userAddress, referrerAddress, 1, level, uint8(users[referrerAddress].x3Matrix[level].referrals.length));
return sendETHDividends(referrerAddress, userAddress, 1, level);
}
emit NewUserPlace(userAddress, referrerAddress, 1, level, 3);
//close matrix
users[referrerAddress].x3Matrix[level].referrals = new address[](0);
if (!users[referrerAddress].activeX3Levels[level+1] && level != LAST_LEVEL) {
users[referrerAddress].x3Matrix[level].blocked = true;
}
//create new one by recursion
if (referrerAddress != owner) {
//check referrer active level
address freeReferrerAddress = findFreeX3Referrer(referrerAddress, level);
if (users[referrerAddress].x3Matrix[level].currentReferrer != freeReferrerAddress) {
users[referrerAddress].x3Matrix[level].currentReferrer = freeReferrerAddress;
}
users[referrerAddress].x3Matrix[level].reinvestCount++;
emit Reinvest(referrerAddress, freeReferrerAddress, userAddress, 1, level);
updateX3Referrer(referrerAddress, freeReferrerAddress, level);
} else {
sendETHDividends(owner, userAddress, 1, level);
users[owner].x3Matrix[level].reinvestCount++;
emit Reinvest(owner, address(0), userAddress, 1, level);
}
}
function updateX6Referrer(address userAddress, address referrerAddress, uint8 level) private {
require(users[referrerAddress].activeX6Levels[level], "500. Referrer level is inactive");
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length < 2) {
users[referrerAddress].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, referrerAddress, 2, level, uint8(users[referrerAddress].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = referrerAddress;
if (referrerAddress == owner) {
return sendETHDividends(referrerAddress, userAddress, 2, level);
}
address ref = users[referrerAddress].x6Matrix[level].currentReferrer;
users[ref].x6Matrix[level].secondLevelReferrals.push(userAddress);
uint len = users[ref].x6Matrix[level].firstLevelReferrals.length;
if ((len == 2) &&
(users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress) &&
(users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress)) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 5);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 6);
}
} else if ((len == 1 || len == 2) &&
users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 3);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 4);
}
} else if (len == 2 && users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 5);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 6);
}
}
return updateX6ReferrerSecondLevel(userAddress, ref, level);
}
users[referrerAddress].x6Matrix[level].secondLevelReferrals.push(userAddress);
if (users[referrerAddress].x6Matrix[level].closedPart != address(0)) {
if ((users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]) &&
(users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].closedPart)) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].closedPart) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else {
updateX6(userAddress, referrerAddress, level, false);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
}
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[1] == userAddress) {
updateX6(userAddress, referrerAddress, level, false);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] == userAddress) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
if (users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length <=
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length) {
updateX6(userAddress, referrerAddress, level, false);
} else {
updateX6(userAddress, referrerAddress, level, true);
}
updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
function updateX6(address userAddress, address referrerAddress, uint8 level, bool x2) private {
if (!x2) {
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[0], 2, level, uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 2, level, 2 + uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = users[referrerAddress].x6Matrix[level].firstLevelReferrals[0];
} else {
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[1], 2, level, uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 2, level, 4 + uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = users[referrerAddress].x6Matrix[level].firstLevelReferrals[1];
}
}
function updateX6ReferrerSecondLevel(address userAddress, address referrerAddress, uint8 level) private {
if (users[referrerAddress].x6Matrix[level].secondLevelReferrals.length < 4) {
return sendETHDividends(referrerAddress, userAddress, 2, level);
}
address[] memory x6 = users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].firstLevelReferrals;
if (x6.length == 2) {
if (x6[0] == referrerAddress ||
x6[1] == referrerAddress) {
users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].closedPart = referrerAddress;
} else if (x6.length == 1) {
if (x6[0] == referrerAddress) {
users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].closedPart = referrerAddress;
}
}
}
users[referrerAddress].x6Matrix[level].firstLevelReferrals = new address[](0);
users[referrerAddress].x6Matrix[level].secondLevelReferrals = new address[](0);
users[referrerAddress].x6Matrix[level].closedPart = address(0);
if (!users[referrerAddress].activeX6Levels[level+1] && level != LAST_LEVEL) {
users[referrerAddress].x6Matrix[level].blocked = true;
}
users[referrerAddress].x6Matrix[level].reinvestCount++;
if (referrerAddress != owner) {
address freeReferrerAddress = findFreeX6Referrer(referrerAddress, level);
emit Reinvest(referrerAddress, freeReferrerAddress, userAddress, 2, level);
updateX6Referrer(referrerAddress, freeReferrerAddress, level);
} else {
emit Reinvest(owner, address(0), userAddress, 2, level);
sendETHDividends(owner, userAddress, 2, level);
}
}
function findFreeX3Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX3Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function findFreeX6Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX6Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function usersActiveX3Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX3Levels[level];
}
function usersActiveX6Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX6Levels[level];
}
function usersActiveX12Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX12Levels[level];
}
function usersX3Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, bool) {
return (users[userAddress].x3Matrix[level].currentReferrer,
users[userAddress].x3Matrix[level].referrals,
users[userAddress].x3Matrix[level].blocked);
}
function usersX6Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, address[] memory, bool, address) {
return (users[userAddress].x6Matrix[level].currentReferrer,
users[userAddress].x6Matrix[level].firstLevelReferrals,
users[userAddress].x6Matrix[level].secondLevelReferrals,
users[userAddress].x6Matrix[level].blocked,
users[userAddress].x6Matrix[level].closedPart);
}
function usersX12Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, address[] memory,address[] memory, bool, address) {
return (users[userAddress].x12Matrix[level].currentReferrer,
users[userAddress].x12Matrix[level].firstLevelReferrals,
users[userAddress].x12Matrix[level].secondLevelReferrals,
users[userAddress].x12Matrix[level].thirdlevelreferrals,
users[userAddress].x12Matrix[level].blocked,
users[userAddress].x12Matrix[level].closedPart);
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function findEthReceiver(address userAddress, address _from, uint8 matrix, uint8 level) private returns(address, bool) {
address receiver = userAddress;
bool isExtraDividends;
if (matrix == 1) {
while (true) {
if (users[receiver].x3Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 1, level);
isExtraDividends = true;
receiver = users[receiver].x3Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
} else if (matrix == 2){
while (true) {
if (users[receiver].x6Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 2, level);
isExtraDividends = true;
receiver = users[receiver].x6Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
} else{
while (true) {
if (users[receiver].x12Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 3, level);
isExtraDividends = true;
receiver = users[receiver].x12Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 matrix, uint8 level) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, matrix, level);
if (!address(uint160(receiver)).send(levelPrice[level])) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, matrix, level);
}
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
/* 12X */
function updateX12Referrer(address userAddress, address referrerAddress, uint8 level) private {
require(users[referrerAddress].activeX12Levels[level], "500. Referrer level is inactive");
if (users[referrerAddress].x12Matrix[level].firstLevelReferrals.length < 2) {
users[referrerAddress].x12Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, referrerAddress, 3, level, uint8(users[referrerAddress].x12Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x12Matrix[level].currentReferrer = referrerAddress;
if (referrerAddress == owner) {
return sendETHDividends(referrerAddress, userAddress, 3, level);
}
address ref = users[referrerAddress].x12Matrix[level].currentReferrer;
users[ref].x12Matrix[level].secondLevelReferrals.push(userAddress);
address ref1 = users[ref].x12Matrix[level].currentReferrer;
users[ref1].x12Matrix[level].thirdlevelreferrals.push(userAddress);
uint len = users[ref].x12Matrix[level].firstLevelReferrals.length;
uint8 toppos=2;
if(ref1!=address(0x0)){
if(ref==users[ref1].x12Matrix[level].firstLevelReferrals[0]){
toppos=1;
}else
{
toppos=2;
}
}
if ((len == 2) &&
(users[ref].x12Matrix[level].firstLevelReferrals[0] == referrerAddress) &&
(users[ref].x12Matrix[level].firstLevelReferrals[1] == referrerAddress)) {
if (users[referrerAddress].x12Matrix[level].firstLevelReferrals.length == 1) {
users[ref].x12Matrix[level].place.push(5);
emit NewUserPlace(userAddress, ref, 3, level, 5);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+5);
} else {
users[ref].x12Matrix[level].place.push(6);
emit NewUserPlace(userAddress, ref, 3, level, 6);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+5);
}
} else
if ((len == 1 || len == 2) &&
users[ref].x12Matrix[level].firstLevelReferrals[0] == referrerAddress) {
if (users[referrerAddress].x12Matrix[level].firstLevelReferrals.length == 1) {
users[ref].x12Matrix[level].place.push(3);
emit NewUserPlace(userAddress, ref, 3, level, 3);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+3);
} else {
users[ref].x12Matrix[level].place.push(4);
emit NewUserPlace(userAddress, ref, 3, level, 4);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+4);
}
} else if (len == 2 && users[ref].x12Matrix[level].firstLevelReferrals[1] == referrerAddress) {
if (users[referrerAddress].x12Matrix[level].firstLevelReferrals.length == 1) {
users[ref].x12Matrix[level].place.push(5);
emit NewUserPlace(userAddress, ref, 3, level, 5);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+5);
} else {
users[ref].x12Matrix[level].place.push(6);
emit NewUserPlace(userAddress, ref, 3, level, 6);
emit NewUserPlace(userAddress, ref1, 3, level, (4*toppos)+6);
}
}
return updateX12ReferrerSecondLevel(userAddress, ref1, level);
}
if (users[referrerAddress].x12Matrix[level].secondLevelReferrals.length < 4) {
users[referrerAddress].x12Matrix[level].secondLevelReferrals.push(userAddress);
address secondref = users[referrerAddress].x12Matrix[level].currentReferrer;
if(secondref==address(0x0))
secondref=owner;
if (users[referrerAddress].x12Matrix[level].firstLevelReferrals[1] == userAddress) {
updateX12(userAddress, referrerAddress, level, false);
return updateX12ReferrerSecondLevel(userAddress, secondref, level);
} else if (users[referrerAddress].x12Matrix[level].firstLevelReferrals[0] == userAddress) {
updateX12(userAddress, referrerAddress, level, true);
return updateX12ReferrerSecondLevel(userAddress, secondref, level);
}
if (users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length <
2) {
updateX12(userAddress, referrerAddress, level, false);
} else {
updateX12(userAddress, referrerAddress, level, true);
}
updateX12ReferrerSecondLevel(userAddress, secondref, level);
}
else if (users[referrerAddress].x12Matrix[level].thirdlevelreferrals.length < 8) {
users[referrerAddress].x12Matrix[level].thirdlevelreferrals.push(userAddress);
if (users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length<2) {
updateX12Fromsecond(userAddress, referrerAddress, level, 0);
return updateX12ReferrerSecondLevel(userAddress, referrerAddress, level);
} else if (users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length<2) {
updateX12Fromsecond(userAddress, referrerAddress, level, 1);
return updateX12ReferrerSecondLevel(userAddress, referrerAddress, level);
}else if (users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[2]].x12Matrix[level].firstLevelReferrals.length<2) {
updateX12Fromsecond(userAddress, referrerAddress, level, 2);
return updateX12ReferrerSecondLevel(userAddress, referrerAddress, level);
}else if (users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[3]].x12Matrix[level].firstLevelReferrals.length<2) {
updateX12Fromsecond(userAddress, referrerAddress, level, 3);
return updateX12ReferrerSecondLevel(userAddress, referrerAddress, level);
}
//updateX12Fromsecond(userAddress, referrerAddress, level, users[referrerAddress].x12Matrix[level].secondLevelReferrals.length);
updateX12ReferrerSecondLevel(userAddress, referrerAddress, level);
}
}
function updateX12(address userAddress, address referrerAddress, uint8 level, bool x2) private {
if (!x2) {
users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.push(userAddress);
users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].thirdlevelreferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].firstLevelReferrals[0], 3, level, uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 3, level, 2 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length));
users[referrerAddress].x12Matrix[level].place.push(2 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length));
if(referrerAddress!=address(0x0) && referrerAddress!=owner){
if(users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].firstLevelReferrals[0]==referrerAddress)
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].currentReferrer, 3, level,6 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length));
else
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].currentReferrer, 3, level, (10 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[0]].x12Matrix[level].firstLevelReferrals.length)));
//set current level
}
users[userAddress].x12Matrix[level].currentReferrer = users[referrerAddress].x12Matrix[level].firstLevelReferrals[0];
} else {
users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.push(userAddress);
users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].thirdlevelreferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].firstLevelReferrals[1], 3, level, uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 3, level, 4 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length));
users[referrerAddress].x12Matrix[level].place.push(4 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length));
if(referrerAddress!=address(0x0) && referrerAddress!=owner){
if(users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].firstLevelReferrals[0]==referrerAddress)
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].currentReferrer, 3, level, 8 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length));
else
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].currentReferrer, 3, level, 12 + uint8(users[users[referrerAddress].x12Matrix[level].firstLevelReferrals[1]].x12Matrix[level].firstLevelReferrals.length));
}
//set current level
users[userAddress].x12Matrix[level].currentReferrer = users[referrerAddress].x12Matrix[level].firstLevelReferrals[1];
}
}
function updateX12Fromsecond(address userAddress, address referrerAddress, uint8 level,uint pos) private {
users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].firstLevelReferrals.push(userAddress);
users[users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].currentReferrer].x12Matrix[level].secondLevelReferrals.push(userAddress);
uint8 len=uint8(users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].firstLevelReferrals.length);
uint temppos=users[referrerAddress].x12Matrix[level].place[pos];
emit NewUserPlace(userAddress, referrerAddress, 3, level,uint8(((temppos)*2)+len)); //third position
if(temppos<5){
emit NewUserPlace(userAddress, users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].currentReferrer, 3, level,uint8((((temppos-3)+1)*2)+len));
users[users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].currentReferrer].x12Matrix[level].place.push((((temppos-3)+1)*2)+len);
}else{
emit NewUserPlace(userAddress, users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].currentReferrer, 3, level,uint8((((temppos-3)-1)*2)+len));
users[users[users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos]].x12Matrix[level].currentReferrer].x12Matrix[level].place.push((((temppos-3)-1)*2)+len);
}
emit NewUserPlace(userAddress, users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos], 3, level, len); //first position
//set current level
users[userAddress].x12Matrix[level].currentReferrer = users[referrerAddress].x12Matrix[level].secondLevelReferrals[pos];
}
function updateX12ReferrerSecondLevel(address userAddress, address referrerAddress, uint8 level) private {
if(referrerAddress==address(0x0)){
return sendETHDividends(owner, userAddress, 3, level);
}
if (users[referrerAddress].x12Matrix[level].thirdlevelreferrals.length < 8) {
return sendETHDividends(referrerAddress, userAddress, 3, level);
}
address[] memory x12 = users[users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].currentReferrer].x12Matrix[level].firstLevelReferrals;
if (x12.length == 2) {
if (x12[0] == referrerAddress ||
x12[1] == referrerAddress) {
users[users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].currentReferrer].x12Matrix[level].closedPart = referrerAddress;
} else if (x12.length == 1) {
if (x12[0] == referrerAddress) {
users[users[users[referrerAddress].x12Matrix[level].currentReferrer].x12Matrix[level].currentReferrer].x12Matrix[level].closedPart = referrerAddress;
}
}
}
users[referrerAddress].x12Matrix[level].firstLevelReferrals = new address[](0);
users[referrerAddress].x12Matrix[level].secondLevelReferrals = new address[](0);
users[referrerAddress].x12Matrix[level].thirdlevelreferrals = new address[](0);
users[referrerAddress].x12Matrix[level].closedPart = address(0);
users[referrerAddress].x12Matrix[level].place=new uint[](0);
if (!users[referrerAddress].activeX12Levels[level+1] && level != LAST_LEVEL) {
users[referrerAddress].x12Matrix[level].blocked = true;
}
users[referrerAddress].x12Matrix[level].reinvestCount++;
if (referrerAddress != owner) {
address freeReferrerAddress = findFreeX12Referrer(referrerAddress, level);
emit Reinvest(referrerAddress, freeReferrerAddress, userAddress, 3, level);
updateX12Referrer(referrerAddress, freeReferrerAddress, level);
} else {
emit Reinvest(owner, address(0), userAddress, 3, level);
sendETHDividends(owner, userAddress, 3, level);
}
}
function findFreeX12Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX12Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
}