Address Contract Partially Verified
Address
0xeF07beB03e66533b4862f62a280995Bb84CBAF13
Balance
0 ETH
Nonce
1
Code Size
13635 bytes
Creator
0x791f729d...E58e at tx 0x1f4a83d9...8887f7
Indexed Transactions
0
Contract Bytecode
13635 bytes
0x60806040526004361061014b5760003560e01c80638da5cb5b116100b6578063b2f7543a1161006f578063b2f7543a146106c2578063be389d57146106fe578063e06e8dbd14610726578063ecabdf7914610762578063fa45323d1461078f578063fb005f9c146107cb5761014b565b80638da5cb5b14610507578063979e075f1461051c5780639cc102fc146105465780639d76ea581461063f5780639f54790d14610654578063a87430ba146106695761014b565b80634635fd68116101085780634635fd6814610382578063509222cd146103ac5780636e66f6e9146103df578063797eee24146103f45780637fb2b9171461041a57806383ba31b21461045e5761014b565b806307279e2a146101b757806327e235e31461020757806329c704001461024c5780632a2d0c4714610277578063348d4487146102bd57806343755d41146102d2575b3661016c576005546101679033906001600160a01b031661087d565b6101b5565b6101b5336101b06000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c8492505050565b61087d565b005b3480156101c357600080fd5b506101f3600480360360408110156101da57600080fd5b5080356001600160a01b0316906020013560ff16610c8b565b604080519115158252519081900360200190f35b34801561021357600080fd5b5061023a6004803603602081101561022a57600080fd5b50356001600160a01b0316610cbf565b60408051918252519081900360200190f35b34801561025857600080fd5b50610261610cd1565b6040805160ff9092168252519081900360200190f35b34801561028357600080fd5b506102a16004803603602081101561029a57600080fd5b5035610cd6565b604080516001600160a01b039092168252519081900360200190f35b3480156102c957600080fd5b5061023a610cf1565b3480156102de57600080fd5b5061030d600480360360408110156102f557600080fd5b506001600160a01b0381358116916020013516610cf7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034757818101518382015260200161032f565b50505050905090810190601f1680156103745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038e57600080fd5b506102a1600480360360208110156103a557600080fd5b5035610dcd565b3480156103b857600080fd5b506101f3600480360360208110156103cf57600080fd5b50356001600160a01b0316610de8565b3480156103eb57600080fd5b5061023a610e05565b61030d6004803603602081101561040a57600080fd5b50356001600160a01b0316610e0b565b34801561042657600080fd5b5061030d6004803603606081101561043d57600080fd5b506001600160a01b038135169060ff60208201358116916040013516610e4a565b34801561046a57600080fd5b5061049a6004803603604081101561048157600080fd5b5080356001600160a01b0316906020013560ff16610f24565b604080516001600160a01b0385168152821515918101919091526060602080830182815285519284019290925284516080840191868101910280838360005b838110156104f15781810151838201526020016104d9565b5050505090500194505050505060405180910390f35b34801561051357600080fd5b506102a1610fd1565b34801561052857600080fd5b506101f36004803603602081101561053f57600080fd5b5035610fe0565b34801561055257600080fd5b506105826004803603604081101561056957600080fd5b5080356001600160a01b0316906020013560ff16611101565b604080516001600160a01b03808816825284151560608301528316608082015260a060208083018281528851928401929092528751929391929184019160c0850191898101910280838360005b838110156105e75781810151838201526020016105cf565b50505050905001838103825286818151815260200191508051906020019060200280838360005b8381101561062657818101518382015260200161060e565b5050505090500197505050505050505060405180910390f35b34801561064b57600080fd5b506102a1611220565b34801561066057600080fd5b5061023a61122f565b34801561067557600080fd5b5061069c6004803603602081101561068c57600080fd5b50356001600160a01b0316611235565b604080519384526001600160a01b03909216602084015282820152519081900360600190f35b3480156106ce57600080fd5b506101f3600480360360408110156106e557600080fd5b5080356001600160a01b0316906020013560ff1661125f565b61030d6004803603604081101561071457600080fd5b5060ff8135811691602001351661128e565b34801561073257600080fd5b506102a16004803603604081101561074957600080fd5b5080356001600160a01b0316906020013560ff166112d2565b34801561076e57600080fd5b5061023a6004803603602081101561078557600080fd5b503560ff1661135e565b34801561079b57600080fd5b506102a1600480360360408110156107b257600080fd5b5080356001600160a01b0316906020013560ff16611370565b3480156107d757600080fd5b506107fe600480360360208110156107ee57600080fd5b50356001600160a01b03166113fc565b604051808561018080838360005b8381101561082457818101518382015260200161080c565b5050505090500184600c60200280838360005b8381101561084f578181015183820152602001610837565b505050509050018360ff1660ff1681526020018260ff1660ff16815260200194505050505060405180910390f35b6005546001600160a01b0316331461091157600160005260076020527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828546002023414610911576040805162461bcd60e51b815260206004820152601b60248201527f496e76616c696420726567697374726174696f6e20616d6f756e740000000000604482015290519081900360640190fd5b61091a82610de8565b1561095a576040805162461bcd60e51b815260206004820152600b60248201526a757365722065786973747360a81b604482015290519081900360640190fd5b61096381610de8565b6109aa576040805162461bcd60e51b81526020600482015260136024820152727265666572726572206e6f742065786973747360681b604482015290519081900360640190fd5b6009546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a0157600080fd5b505af1158015610a15573d6000803e3d6000fd5b505050506040513d6020811015610a2b57600080fd5b5051610a73576040805162461bcd60e51b81526020600482015260126024820152711d1bdad95b881cd95b991a5b99c819985a5b60721b604482015290519081900360640190fd5b813b63ffffffff811615610ac5576040805162461bcd60e51b815260206004820152601460248201527318d85b9b9bdd08189948184818dbdb9d1c9858dd60621b604482015290519081900360640190fd5b600480546001019055610ad66133a4565b50604080516060810182526004805482526001600160a01b03808616602080850182815260008688018181528b861680835282855289832089518155935160018086018054929099166001600160a01b03199283161789559251600280870191909155895485528387528b852080548316841790558854821688179098558284526003850186528a8420805460ff19908116851790915583855294890186528a84208054909516831790945596548252858452888220805490931690961790915591825281905293842001805482019055909190610bb5908690611370565b6001600160a01b038681166000908152602081815260408083206001808552600590910190925290912080546001600160a01b03191692841692909217909155909150610c0590869083906114ef565b610c1b85610c148760016112d2565b600161185e565b6001600160a01b038086166000818152602081815260408083205494891680845292819020548151908152349281019290925280519293927fc1df0cc11cc2a40ae327c4da54a7bc5d5007047ac744e37eed7b461a781172159281900390910190a45050505050565b6014015190565b6001600160a01b03821660009081526020818152604080832060ff8086168552600390910190925290912054165b92915050565b60036020526000908152604090205481565b600c81565b6001602052600090815260409020546001600160a01b031681565b60045481565b6005546060906001600160a01b03163314610d49576040805162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2102237b737b960991b604482015290519081900360640190fd5b42600654620151800111610d8e5760405162461bcd60e51b815260040180806020018281038252603281526020018061347a6032913960400191505060405180910390fd5b610d98838361087d565b506040805180820190915260178152761c9959da5cdd1c985d1a5bdb881cdd58d8d95cdcd99d5b604a1b602082015292915050565b6002602052600090815260409020546001600160a01b031681565b6001600160a01b0316600090815260208190526040902054151590565b60085481565b6060610e17338361087d565b50506040805180820190915260178152761c9959da5cdd1c985d1a5bdb881cdd58d8d95cdcd99d5b604a1b602082015290565b6005546060906001600160a01b03163314610e9c576040805162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2102237b737b960991b604482015290519081900360640190fd5b42600654620151800111610ee15760405162461bcd60e51b815260040180806020018281038252603281526020018061347a6032913960400191505060405180910390fd5b610eec8484846121f4565b506040805180820190915260198152784c6576656c20626f75676874207375636365737366756c6c7960381b60208201529392505050565b6001600160a01b0382811660009081526020818152604080832060ff8681168552600590910183528184208054600282015460019092018054855181880281018801909652808652969760609789979390911695919493909316929091849190830182828015610fbd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f9f575b505050505091509250925092509250925092565b6005546001600160a01b031681565b6005546000906001600160a01b03163314611033576040805162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b0b63632b960911b604482015290519081900360640190fd5b6009546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561108757600080fd5b505af115801561109b573d6000803e3d6000fd5b505050506040513d60208110156110b157600080fd5b50516110f9576040805162461bcd60e51b81526020600482015260126024820152711d1bdad95b881cd95b991a5b99c819985a5b60721b604482015290519081900360640190fd5b506001919050565b6001600160a01b0382811660009081526020818152604080832060ff8681168552600690910183528184208054600382015460058301546001840180548751818a0281018a0190985280885298996060998a998c998a999784169894976002909501969094169490921692918691908301828280156111a957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118b575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561120557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111e7575b50505050509250945094509450945094509295509295909350565b6009546001600160a01b031681565b60065481565b60006020819052908152604090208054600182015460029092015490916001600160a01b03169083565b6001600160a01b039190911660009081526020818152604080832060ff94851684526004019091529020541690565b606061129b3384846121f4565b506040805180820190915260198152784c6576656c20626f75676874207375636365737366756c6c7960381b602082015292915050565b60005b6001600160a01b0380841660009081526020818152604080832060010154909316825282822060ff8087168452600490910190915291902054161561133857506001600160a01b0380831660009081526020819052604090206001015416610cb9565b6001600160a01b03928316600090815260208190526040902060010154909216916112d5565b60076020526000908152604090205481565b60005b6001600160a01b0380841660009081526020818152604080832060010154909316825282822060ff808716845260039091019091529190205416156113d657506001600160a01b0380831660009081526020819052604090206001015416610cb9565b6001600160a01b0392831660009081526020819052604090206001015490921691611373565b6114046133ce565b61140c6133ce565b60008060015b600c60ff8216116114e7576001600160a01b03861660009081526020818152604080832060ff808616808652600390920190935292205416908690600c811061145757fe5b911515602090920201528460ff8216600c811061147057fe5b60200201511561147e578092505b6001600160a01b03861660009081526020818152604080832060ff808616808652600490920190935292205416908590600c81106114b857fe5b911515602090920201528360ff8216600c81106114d157fe5b6020020151156114df578091505b600101611412565b509193509193565b6001600160a01b0382811660009081526020818152604080832060ff8616808552600590910183529083206001908101805491820181558085529284200180546001600160a01b0319169488169490941790935591905254600311156115c7576001600160a01b0380831660008181526020818152604080832060ff80881680865260059092018452938290206001908101548351918252938101919091529190921681830152905191928616916000805160206134ac8339815191529181900360600190a36115c2828460018461275f565b611859565b604080516001815260ff8316602082015260038183015290516001600160a01b0380851692908616916000805160206134ac8339815191529181900360600190a360408051600080825260208083018085526001600160a01b038716835282825284832060ff87168452600501909152929020905161164c92600190920191906133ed565b506001600160a01b03821660009081526020818152604080832060ff60018601811685526003909101909252909120541615801561168e575060ff8116600c14155b156116c9576001600160a01b03821660009081526020818152604080832060ff851684526005019091529020600201805460ff191660011790555b6005546001600160a01b038381169116146117d45760006116ea8383611370565b6001600160a01b0384811660009081526020818152604080832060ff8816845260050190915290205491925082811691161461175e576001600160a01b0383811660009081526020818152604080832060ff87168452600501909152902080546001600160a01b0319169183169190911790555b6001600160a01b0380841660008181526020818152604080832060ff8816808552600590910183529281902060030180546001908101909155815190815291820192909252815188851694861693926000805160206134cc833981519152928290030190a46117ce8382846114ef565b50611859565b6005546117ed906001600160a01b03168460018461275f565b600580546001600160a01b0390811660009081526020818152604080832060ff87168085529086018352818420600301805460019081019091559554825196875292860152805188851695939492909216926000805160206134cc833981519152929081900390910190a45b505050565b6001600160a01b03821660009081526020818152604080832060ff8086168552600490910190925290912054166118dc576040805162461bcd60e51b815260206004820152601f60248201527f3530302e205265666572726572206c6576656c20697320696e61637469766500604482015290519081900360640190fd5b6001600160a01b03821660009081526020818152604080832060ff8516845260060190915290206001015460021115611e41576001600160a01b0382811660008181526020818152604080832060ff8781168086526006909201845282852060019081018054918201815580875285872090910180546001600160a01b031916988c169889179055948290529354825160028152938401919091529092168183015290519192916000805160206134ac833981519152916060908290030190a36001600160a01b0383811660009081526020818152604080832060ff86168452600601909152902080546001600160a01b03191684831690811790915560055490911614156119f2576115c2828460028461275f565b6001600160a01b0382811660009081526020818152604080832060ff8616808552600691820184528285205486168086528585528386208287529092018452918420600280820180546001808201835591885295872090950180546001600160a01b031916978b1697909717909655919093520154909181148015611ac357506001600160a01b0382811660009081526020818152604080832060ff881684526006019091528120600101805492871692909190611aac57fe5b6000918252602090912001546001600160a01b0316145b8015611b1f57506001600160a01b0382811660009081526020818152604080832060ff88168452600601909152902060019081018054928716929091908110611b0857fe5b6000918252602090912001546001600160a01b0316145b15611be4576001600160a01b03841660009081526020818152604080832060ff8716845260060190915290206001908101541415611b9d57604080516002815260ff8516602082015260058183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a3611bdf565b604080516002815260ff8516602082015260068183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a35b611e2f565b8060011480611bf35750806002145b8015611c4b57506001600160a01b0382811660009081526020818152604080832060ff881684526006019091528120600101805492871692909190611c3457fe5b6000918252602090912001546001600160a01b0316145b15611d0f576001600160a01b03841660009081526020818152604080832060ff8716845260060190915290206001908101541415611cc957604080516002815260ff8516602082015260038183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a3611bdf565b604080516002815260ff8516602082015260048183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a3611e2f565b806002148015611d6f57506001600160a01b0382811660009081526020818152604080832060ff88168452600601909152902060019081018054928716929091908110611d5857fe5b6000918252602090912001546001600160a01b0316145b15611e2f576001600160a01b03841660009081526020818152604080832060ff8716845260060190915290206001908101541415611ded57604080516002815260ff8516602082015260058183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a3611e2f565b604080516002815260ff8516602082015260068183015290516001600160a01b0380851692908816916000805160206134ac8339815191529181900360600190a35b611e3a85838561285b565b5050611859565b6001600160a01b0382811660009081526020818152604080832060ff86168085526006909101835290832060028101805460018101825590855292842090920180546001600160a01b031916888616179055909152600501541615612025576001600160a01b03821660009081526020818152604080832060ff851684526006019091529020600190810180549091908110611ed957fe5b60009182526020808320909101546001600160a01b038581168452838352604080852060ff87168652600601909352918320600101805492909116929091611f1d57fe5b6000918252602090912001546001600160a01b0316148015611f9257506001600160a01b0382811660009081526020818152604080832060ff86168452600601909152812060058101546001909101805491909316929190611f7b57fe5b6000918252602090912001546001600160a01b0316145b15611faf57611fa48383836001612ca7565b6115c283838361285b565b6001600160a01b0382811660009081526020818152604080832060ff86168452600601909152812060058101546001909101805491909316929190611ff057fe5b6000918252602090912001546001600160a01b0316141561201857611fa48383836001612ca7565b611fa48383836000612ca7565b6001600160a01b0382811660009081526020818152604080832060ff8616845260060190915290206001908101805492861692909190811061206357fe5b6000918252602090912001546001600160a01b0316141561208b57611fa48383836000612ca7565b6001600160a01b0382811660009081526020818152604080832060ff8616845260060190915281206001018054928616929091906120c557fe5b6000918252602090912001546001600160a01b031614156120ed57611fa48383836001612ca7565b6001600160a01b03821660009081526020818152604080832060ff85168452600601909152812060019081018054839290811061212657fe5b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822060ff861680845260069182018352848420600190810154968916855284845285852091855291019091529181209091018054829190829061218c57fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff86168252600601909252902060010154116121dc576121d78383836000612ca7565b6121e9565b6121e98383836001612ca7565b61185983838361285b565b6121fd83610de8565b6122385760405162461bcd60e51b81526004018080602001828103825260238152602001806134ec6023913960400191505060405180910390fd5b8160ff166001148061224d57508160ff166002145b61228f576040805162461bcd60e51b815260206004820152600e60248201526d0d2dcecc2d8d2c840dac2e8e4d2f60931b604482015290519081900360640190fd5b6005546001600160a01b031633146122f75760ff811660009081526007602052604090205434146122f7576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420707269636560981b604482015290519081900360640190fd5b60018160ff1611801561230e5750600c60ff821611155b61234f576040805162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081b195d995b609a1b604482015290519081900360640190fd5b6009546008546040805163a9059cbb60e01b81526001600160a01b03878116600483015260248201939093529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156123a957600080fd5b505af11580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505161241b576040805162461bcd60e51b81526020600482015260126024820152711d1bdad95b881cd95b991a5b99c819985a5b60721b604482015290519081900360640190fd5b8160ff16600114156125d3576001600160a01b03831660009081526020818152604080832060ff808616855260039091019092529091205416156124a0576040805162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526020818152604080832060ff6000198601811685526005909101909252909120600201541615612510576001600160a01b03831660009081526020818152604080832060ff60001986011684526005019091529020600201805460ff191690555b600061251c8483611370565b6001600160a01b0385811660009081526020818152604080832060ff8816845260058101835281842080546001600160a01b031916958716959095179094556003909301905220805460ff19166001179055905061257b8482846114ef565b604080516001815260ff84166020820152348183015290516001600160a01b0380841692908716917f2ac186f095e215dc3ab153a0ce480c2155b22ace0abd4e26591d4d22b379343c9181900360600190a350611859565b6001600160a01b03831660009081526020818152604080832060ff8086168552600490910190925290912054161561264c576040805162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526020818152604080832060ff60001986018116855260069091019092529091206003015416156126bc576001600160a01b03831660009081526020818152604080832060ff60001986011684526006019091529020600301805460ff191690555b60006126c884836112d2565b6001600160a01b03851660009081526020818152604080832060ff871684526004019091529020805460ff19166001179055905061270784828461185e565b604080516002815260ff84166020820152348183015290516001600160a01b0380841692908716917f2ac186f095e215dc3ab153a0ce480c2155b22ace0abd4e26591d4d22b379343c9181900360600190a350505050565b6005546001600160a01b031633146128555760008061278086868686613210565b60ff85166000908152600760205260408082205490519395509193506001600160a01b0385169282156108fc029291818181858888f193505050506127fc576040516001600160a01b038316904780156108fc02916000818181858888f193505050501580156127f4573d6000803e3d6000fd5b505050612855565b8015612852576040805160ff80871682528516602082015281516001600160a01b0380861693908916927ff0ddc65c0d411f042f723dcfa1b7d13e85a35b7b70761d447c6500411cacf328929081900390910190a35b50505b50505050565b6001600160a01b03821660009081526020818152604080832060ff851684526006019091529020600201546004111561289b576115c2828460028461275f565b6001600160a01b0380831660009081526020818152604080832060ff8616808552600691820184528285205490951684528383528184209484529390930181529082902060010180548351818402810184019094528084526060939283018282801561293057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612912575b50505050509050805160021415612a8d57826001600160a01b03168160008151811061295857fe5b60200260200101516001600160a01b0316148061299a5750826001600160a01b03168160018151811061298757fe5b60200260200101516001600160a01b0316145b156129fc576001600160a01b0380841660008181526020818152604080832060ff8816808552600691820184528285205490961684528383528184209584529490940190529190912060050180546001600160a01b0319169091179055612a8d565b805160011415612a8d57826001600160a01b031681600081518110612a1d57fe5b60200260200101516001600160a01b03161415612a8d576001600160a01b0380841660008181526020818152604080832060ff8816808552600691820184528285205490961684528383528184209584529490940190529190912060050180546001600160a01b03191690911790555b60408051600080825260208083018085526001600160a01b038816835282825284832060ff881684526006019091529290209051612ad192600190920191906133ed565b5060408051600080825260208083018085526001600160a01b038816835282825284832060ff881684526006019091529290209051612b1692600290920191906133ed565b506001600160a01b03831660009081526020818152604080832060ff808716855260068201845282852060050180546001600160a01b0319169055600187018116855260049091019092529091205416158015612b77575060ff8216600c14155b15612bb2576001600160a01b03831660009081526020818152604080832060ff861684526006019091529020600301805460ff191660011790555b6001600160a01b0380841660008181526020818152604080832060ff8816845260060190915290206004018054600101905560055490911614612c4d576000612bfb84846112d2565b604080516002815260ff8616602082015281519293506001600160a01b038089169381861693918916926000805160206134cc83398151915292908290030190a4612c4784828561185e565b50612855565b600554604080516002815260ff8516602082015281516001600160a01b03808916946000949116926000805160206134cc833981519152929081900390910190a4600554612855906001600160a01b03168560028561275f565b80612f57576001600160a01b03831660009081526020818152604080832060ff86168452600601909152812060010180548291908290612ce357fe5b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c891617905595891684528383528484209084520190529081209091018054909190612d6557fe5b60009182526020808320909101546001600160a01b038681168452838352604080852060ff88168652600601909352918320600101805491831693928816926000805160206134ac833981519152926002928892918291908290612dc557fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff808c1683526006909101845290829020600101548251958216865293811692850192909252911682820152519081900360600190a36001600160a01b0380841660008181526020818152604080832060ff881684526006019091528120600101805492938816926000805160206134ac8339815191529260029288928291908290612e7557fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff808c168352600690910184529082902060010154825195821686529381169285019290925260029092011682820152519081900360600190a36001600160a01b03831660009081526020818152604080832060ff8616845260060190915281206001018054909190612f0c57fe5b60009182526020808320909101546001600160a01b038781168452838352604080852060ff881686526006019093529190922080546001600160a01b03191691909216179055612855565b6001600160a01b03831660009081526020818152604080832060ff861684526006019091528120600190810180548392908110612f9057fe5b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c891617905595891684528383528484209084520190522081018054909190811061301157fe5b60009182526020808320909101546001600160a01b038681168452838352604080852060ff881686526006019093529183206001908101805492841694938916936000805160206134ac8339815191529360029389938392909190811061307457fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff808c1683526006909101845290829020600101548251958216865293811692850192909252911682820152519081900360600190a36001600160a01b0380841660008181526020818152604080832060ff8816845260060190915281206001908101805493948916936000805160206134ac833981519152936002938993919283929190811061312957fe5b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff808c168352600690910184529082902060010154825195821686529381169285019290925260049092011682820152519081900360600190a36001600160a01b03831660009081526020818152604080832060ff8616845260060190915290206001908101805490919081106131c457fe5b60009182526020808320909101546001600160a01b038781168452838352604080852060ff881686526006019093529190922080546001600160a01b0319169190921617905550505050565b6000808581600160ff871614156132e6575b6001600160a01b03821660009081526020818152604080832060ff808a16855260059091019092529091206002015416156132d757604080516001815260ff8716602082015281516001600160a01b03808b1693908616927ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709929081900390910190a3506001600160a01b0390811660009081526020818152604080832060ff881684526005019091529020541660016132e1565b909250905061339b565b613222565b6001600160a01b03821660009081526020818152604080832060ff808a16855260069091019092529091206003015416156132d757604080516002815260ff8716602082015281516001600160a01b03808b1693908616927ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709929081900390910190a3506001600160a01b0390811660009081526020818152604080832060ff881684526006019091529020541660016132e6565b94509492505050565b60405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b604051806101800160405280600c906020820280388339509192915050565b828054828255906000526020600020908101928215613442579160200282015b8281111561344257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061340d565b5061344e929150613452565b5090565b61347691905b8082111561344e5780546001600160a01b0319168155600101613458565b9056fe546869732066756e6374696f6e206973206f6e6c7920617661696c61626c6520666f7220666972737420323420686f75727368062c5925c4317adf3a7095478d28b33fd8b41458bc7620b61bc46bf1b24d82a00c953eff38ec1b71e7fe060b2ab8df0bbe5354319fbdde4fbdafd6324386a675736572206973206e6f74206578697374732e2052656769737465722066697273742ea265627a7a7231582092e0e1254b0900f58f10e99be3d5d158fc63f8aceb7605237768de640b6acd1b64736f6c63430005100032
Verified Source Code Partial Match
Compiler: v0.5.16+commit.9c3226ce
EVM: istanbul
Optimization: Yes (200 runs)
WealthExchangeNetwork.sol 513 lines
/**
*Submitted for verification at Etherscan.io on 2020-07-25
*/
/**
*
██╗ ██╗███████╗ █████╗ ██╗ ████████╗██╗ ██╗██╗ ██╗
██║ ██║██╔════╝██╔══██╗██║ ╚══██╔══╝██║ ██║╚██╗██╔╝
██║ █╗ ██║█████╗ ███████║██║ ██║ ███████║ ╚███╔╝
██║███╗██║██╔══╝ ██╔══██║██║ ██║ ██╔══██║ ██╔██╗
╚███╔███╔╝███████╗██║ ██║███████╗██║ ██║ ██║██╔╝ ██╗
╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝
*
*
*
* http://wealthx.network/
* (only for WealthX members)
*
**/
pragma solidity >=0.4.23 <0.6.0;
interface tokenInterface
{
function transfer(address _to, uint256 _amount) external returns (bool);
}
contract WealthExchangeNetwork {
struct User {
uint id;
address referrer;
uint partnersCount;
mapping(uint8 => bool) activeX3Levels;
mapping(uint8 => bool) activeX6Levels;
mapping(uint8 => X3) x3Matrix;
mapping(uint8 => X6) x6Matrix;
}
struct X3 {
address currentReferrer;
address[] referrals;
bool blocked;
uint reinvestCount;
}
struct X6 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
bool blocked;
uint reinvestCount;
address closedPart;
}
uint8 public constant LAST_LEVEL = 12;
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;
uint256 public contractDeployTime;
mapping(uint8 => uint) public levelPrice;
uint public tokenReward = 1000 * (10 ** 18);
address public tokenAddress = 0xfA68bfE953efA64b021719bF617aFB5AE73C0d98;
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId, uint amount);
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, uint amount);
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() public {
contractDeployTime = now;
levelPrice[1] = 0.05 ether;
for (uint8 i = 2; i <= LAST_LEVEL; i++) {
levelPrice[i] = levelPrice[i-1] * 2;
}
owner = msg.sender;
User memory user = User({
id: 1,
referrer: address(0),
partnersCount: uint(0)
});
users[owner] = user;
idToAddress[1] = owner;
for (uint8 i = 1; i <= LAST_LEVEL; i++) {
users[owner].activeX3Levels[i] = true;
users[owner].activeX6Levels[i] = true;
}
userIds[1] = owner;
}
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 returns(string memory) {
registration(msg.sender, referrerAddress);
return "registration successful";
}
function registrationCreator(address userAddress, address referrerAddress) external returns(string memory) {
require(msg.sender==owner, 'Invalid Donor');
require(contractDeployTime+86400 > now, 'This function is only available for first 24 hours' );
registration(userAddress, referrerAddress);
return "registration successful";
}
function buyLevelCreator(address userAddress, uint8 matrix, uint8 level) external returns(string memory) {
require(msg.sender==owner, 'Invalid Donor');
require(contractDeployTime+86400 > now, 'This function is only available for first 24 hours' );
buyNewLevelInternal(userAddress, matrix, level);
return "Level bought successfully";
}
function buyNewLevel(uint8 matrix, uint8 level) external payable returns(string memory) {
buyNewLevelInternal(msg.sender, matrix, level);
return "Level bought successfully";
}
function buyNewLevelInternal(address user, uint8 matrix, uint8 level) private {
require(isUserExists(user), "user is not exists. Register first.");
require(matrix == 1 || matrix == 2, "invalid matrix");
if(!(msg.sender==owner)) require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
require(tokenInterface(tokenAddress).transfer(user, tokenReward), "token sending fail" );
if (matrix == 1) {
require(!users[user].activeX3Levels[level], "level already activated");
if (users[user].x3Matrix[level-1].blocked) {
users[user].x3Matrix[level-1].blocked = false;
}
address freeX3Referrer = findFreeX3Referrer(user, level);
users[user].x3Matrix[level].currentReferrer = freeX3Referrer;
users[user].activeX3Levels[level] = true;
updateX3Referrer(user, freeX3Referrer, level);
emit Upgrade(user, freeX3Referrer, 1, level, msg.value);
} else {
require(!users[user].activeX6Levels[level], "level already activated");
if (users[user].x6Matrix[level-1].blocked) {
users[user].x6Matrix[level-1].blocked = false;
}
address freeX6Referrer = findFreeX6Referrer(user, level);
users[user].activeX6Levels[level] = true;
updateX6Referrer(user, freeX6Referrer, level);
emit Upgrade(user, freeX6Referrer, 2, level, msg.value);
}
}
function registration(address userAddress, address referrerAddress) private {
if(!(msg.sender==owner)) require(msg.value == (levelPrice[1]*2), "Invalid registration amount");
require(!isUserExists(userAddress), "user exists");
require(isUserExists(referrerAddress), "referrer not exists");
require(tokenInterface(tokenAddress).transfer(msg.sender, tokenReward), "token sending fail" );
uint32 size;
assembly {
size := extcodesize(userAddress)
}
require(size == 0, "cannot be a contract");
lastUserId++;
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;
userIds[lastUserId] = userAddress;
users[referrerAddress].partnersCount++;
address freeX3Referrer = findFreeX3Referrer(userAddress, 1);
users[userAddress].x3Matrix[1].currentReferrer = freeX3Referrer;
updateX3Referrer(userAddress, freeX3Referrer, 1);
updateX6Referrer(userAddress, findFreeX6Referrer(userAddress, 1), 1);
emit Registration(userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id, msg.value);
}
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 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 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 {
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);
}
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 matrix, uint8 level) private {
if(msg.sender!=owner)
{
(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))
}
}
function viewLevels(address user) public view returns (bool[12] memory x3Levels, bool[12] memory x6Levels,uint8 x3LastTrue, uint8 x6LastTrue)
{
for (uint8 i = 1; i <= LAST_LEVEL; i++) {
x3Levels[i] = users[user].activeX3Levels[i];
if(x3Levels[i]) x3LastTrue = i;
x6Levels[i] = users[user].activeX6Levels[i];
if(x6Levels[i]) x6LastTrue = i;
}
}
function withdrawExtraToken(uint amount) public returns(bool)
{
require(msg.sender == owner, "Invalid caller");
require(tokenInterface(tokenAddress).transfer(msg.sender, amount), "token sending fail" );
return true;
}
}
Read Contract
LAST_LEVEL 0x29c70400 → uint8
balances 0x27e235e3 → uint256
contractDeployTime 0x9f54790d → uint256
findFreeX3Referrer 0xfa45323d → address
findFreeX6Referrer 0xe06e8dbd → address
idToAddress 0x2a2d0c47 → address
isUserExists 0x509222cd → bool
lastUserId 0x348d4487 → uint256
levelPrice 0xecabdf79 → uint256
owner 0x8da5cb5b → address
tokenAddress 0x9d76ea58 → address
tokenReward 0x6e66f6e9 → uint256
userIds 0x4635fd68 → address
users 0xa87430ba → uint256, address, uint256
usersActiveX3Levels 0x07279e2a → bool
usersActiveX6Levels 0xb2f7543a → bool
usersX3Matrix 0x83ba31b2 → address, address[], bool
usersX6Matrix 0x9cc102fc → address, address[], address[], bool, address
viewLevels 0xfb005f9c → bool[12], bool[12], uint8, uint8
Write Contract 5 functions
These functions modify contract state and require a wallet transaction to execute.
buyLevelCreator 0x7fb2b917
address userAddress
uint8 matrix
uint8 level
returns: string
buyNewLevel 0xbe389d57
uint8 matrix
uint8 level
returns: string
registrationCreator 0x43755d41
address userAddress
address referrerAddress
returns: string
registrationExt 0x797eee24
address referrerAddress
returns: string
withdrawExtraToken 0x979e075f
uint256 amount
returns: bool
Recent Transactions
No transactions found for this address