Address Contract Partially Verified
Address
0x63f027DF7c910Bd0230FB60f831bd7cda9741a22
Balance
0.000008611 ETH ($0.02)
Nonce
1
Code Size
13512 bytes
Creator
0x0aC11852...4da9 at tx 0x4fa2aca9...f004fb
Indexed Transactions
Index loading...
Contract Bytecode
13512 bytes
0x60606040526004361061024f5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461025d57806306fdde031461028e578063097e34a11461031857806310d0ffdd1461033757806314ec2b0d1461034d57806317ef4e921461036557806318160ddd1461037e578063226093731461039157806327defa1f146103a75780632b152e40146103ce5780632bba8b57146104125780632fc2a5721461043e578063313ce5671461045d578063392efb52146104865780633ccfd60b1461049c57806343360a8e146104af5780634b750334146104d157806356d399e8146104e457806358e717fd146104f75780635c48c1fa1461051957806366b3fa601461052c578063688abbf71461053f5780636b2f46321461055757806370a082311461056a5780637468e367146105895780637547c7a3146105ae57806377e79b41146105c45780637af7d382146105e35780637dc572f3146105625780638328b610146105f95780638620410b1461060f57806389135ae914610622578063949e8acd1461063d57806395d89b4114610650578063a8e04f3414610663578063a9059cbb14610676578063b84c824614610698578063bf21e388146106e9578063c2150ec4146106ff578063c47f00271461075d578063d9a40bb1146107ae578063e4735104146107d9578063e4849b3214610817578063e5deb3041461082d578063e8beadfd1461084c578063e9fad8ee1461085f578063f088d54714610872578063f402db6d14610886578063fdb5a03e1461089c575b61025a3460006108af565b50005b341561026857600080fd5b61027c600160a060020a0360043516610ff0565b60405190815260200160405180910390f35b341561029957600080fd5b6102a161104b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102dd5780820151838201526020016102c5565b50505050905090810190601f16801561030a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032357600080fd5b61027c600160a060020a03600435166110e9565b341561034257600080fd5b61027c600435611104565b341561035857600080fd5b61036360043561113a565b005b341561037057600080fd5b61036360ff60043516611188565b341561038957600080fd5b61027c6111e7565b341561039c57600080fd5b61027c6004356111ee565b34156103b257600080fd5b6103ba611234565b604051901515815260200160405180910390f35b34156103d957600080fd5b6103f0600160a060020a036004351660243561123d565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561041d57600080fd5b610363600160a060020a03600435811690602435906044351660643561126d565b341561044957600080fd5b61027c600160a060020a03600435166112f7565b341561046857600080fd5b6104706113ad565b60405160ff909116815260200160405180910390f35b341561049157600080fd5b6103ba6004356113b2565b34156104a757600080fd5b6103636113c7565b34156104ba57600080fd5b6103f0600160a060020a0360043516602435611567565b34156104dc57600080fd5b61027c611597565b34156104ef57600080fd5b61027c6115f0565b341561050257600080fd5b610363600160a060020a03600435166024356115f6565b341561052457600080fd5b6103ba61165b565b341561053757600080fd5b61027c611798565b341561054a57600080fd5b61027c600435151561179e565b341561056257600080fd5b61027c6117e1565b341561057557600080fd5b61027c600160a060020a03600435166117ef565b341561059457600080fd5b610363600160a060020a036004351660243560443561180a565b34156105b957600080fd5b6103ba60043561187b565b34156105cf57600080fd5b61027c600160a060020a0360043516611963565b34156105ee57600080fd5b61036360043561197e565b341561060457600080fd5b6103636004356119cc565b341561061a57600080fd5b61027c611a1a565b341561062d57600080fd5b6103636004356024351515611a79565b341561064857600080fd5b61027c611ae2565b341561065b57600080fd5b6102a1611af5565b341561066e57600080fd5b610363611b60565b341561068157600080fd5b6103ba600160a060020a0360043516602435611bb5565b34156106a357600080fd5b61036360046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611d6c95505050505050565b34156106f457600080fd5b610363600435611dcc565b341561070a57600080fd5b610363600160a060020a0360043581169060243581169060443581169060643581169060843581169060a43581169060c43581169060e43581169061010435811690610124358116906101443516611e6d565b341561076857600080fd5b61036360046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611fac95505050505050565b34156107b957600080fd5b610363600160a060020a0360043516602435604435606435608435612007565b34156107e457600080fd5b6107fb600160a060020a0360043516602435612092565b604051600160a060020a03909116815260200160405180910390f35b341561082257600080fd5b61036360043561223a565b341561083857600080fd5b61027c600160a060020a0360043516612391565b341561085757600080fd5b61027c6123a3565b341561086a57600080fd5b6103636123a9565b61027c600160a060020a03600435166123e0565b341561089157600080fd5b6103636004356123ec565b34156108a757600080fd5b61036361243a565b6000806000806000806000806000808b6000339050601a60009054906101000a900460ff1680156108f15750670de0b6b3a7640000826108ed6117e1565b0311155b15610cb357600160a060020a03811660009081526004602052604090205460ff16151560011480156109465750600160a060020a038116600090815260156020526040902054670de0b6b3a764000090830111155b151561095157600080fd5b600160a060020a03811660009081526015602052604090205461097490836125cb565b600160a060020a038216600090815260156020526040902055601c8e9055339a506109a48e6005606460126125e5565b601b8190556017546109b5916125cb565b601755601c546109ca906014606460126125e5565b601e55601c546109df906005606460126125e5565b601c54909a50601e99506109f7908a606460126125e5565b9750610a05601c548961262a565b9650610a108761263c565b600160a060020a03808d166000908152600a6020526040902054919750604060020a8c029650600195501615610a6257600160a060020a03808c166000908152600a60205260408120549091169d5093505b600086118015610a7c5750601654610a7a87826125cb565b115b1515610a8757600080fd5b600160a060020a038d1615801590610ab157508a600160a060020a03168d600160a060020a031614155b8015610ad75750600354600160a060020a038e1660009081526005602052604090205410155b15610b2857610aea601e548e8d876126db565b678ac7230489e80000601c5410158015610b0f5750683635c9adc5dea00000601c5411155b15610b2357610b23601c54878d60006130b4565b610b73565b610b36601754601e546125cb565b601755601c54678ac7230489e800009010801590610b5f5750683635c9adc5dea00000601c5411155b15610b7357610b73601c54878d60016130b4565b60006016541115610bcd57610b8a601654876125cb565b6016819055604060020a8b02811515610b9f57fe5b60188054929091049091019055601654604060020a8b02811515610bbf57fe5b048602850385039450610bd3565b60168690555b600160a060020a038b16600090815260056020526040902054610bf690876125cb565b600560008d600160a060020a0316600160a060020a031681526020019081526020016000208190555084866018540203925082601460008d600160a060020a0316600160a060020a03168152602001908152602001600020600082825401925050819055508c600160a060020a03168b600160a060020a03167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d5601c548960405191825260208201526040908101905180910390a3859b50610fdf565b601a805460ff19169055601c8e9055339a50610cd48e6005606460126125e5565b601b819055601754610ce5916125cb565b601755601c54610cfa906014606460126125e5565b601e55601c54610d0f906005606460126125e5565b601c54909a50601e9950610d27908a606460126125e5565b9750610d35601c548961262a565b9650610d408761263c565b600160a060020a03808d166000908152600a6020526040902054919750604060020a8c029650600195501615610d9257600160a060020a03808c166000908152600a60205260408120549091169d5093505b600086118015610dac5750601654610daa87826125cb565b115b1515610db757600080fd5b600160a060020a038d1615801590610de157508a600160a060020a03168d600160a060020a031614155b8015610e075750600354600160a060020a038e1660009081526005602052604090205410155b15610e5857610e1a601e548e8d876126db565b678ac7230489e80000601c5410158015610e3f5750683635c9adc5dea00000601c5411155b15610e5357610e53601c54878d60006130b4565b610ea3565b610e66601754601e546125cb565b601755601c54678ac7230489e800009010801590610e8f5750683635c9adc5dea00000601c5411155b15610ea357610ea3601c54878d60016130b4565b60006016541115610efd57610eba601654876125cb565b6016819055604060020a8b02811515610ecf57fe5b60188054929091049091019055601654604060020a8b02811515610eef57fe5b048602850385039450610f03565b60168690555b600160a060020a038b16600090815260056020526040902054610f2690876125cb565b600560008d600160a060020a0316600160a060020a031681526020019081526020016000208190555084866018540203925082601460008d600160a060020a0316600160a060020a03168152602001908152602001600020600082825401925050819055508c600160a060020a03168b600160a060020a03167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d5601c548960405191825260208201526040908101905180910390a3859b505b505050505050505050505092915050565b600160a060020a03811660009081526014602090815260408083205460068352818420546005845282852054601854600990955292852054604060020a93909101909302030490829061104390836125cb565b949350505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110e15780601f106110b6576101008083540402835291602001916110e1565b820191906000526020600020905b8154815290600101906020018083116110c457829003601f168201915b505050505081565b600160a060020a031660009081526014602052604090205490565b6000601e8180806111198685606460126125e5565b9250611125868461262a565b91506111308261263c565b9695505050505050565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff16151561118257600080fd5b50601755565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff1615156111d057600080fd5b506002805460ff191660ff92909216919091179055565b6016545b90565b600080600080601654851115151561120557600080fd5b61120e856132d7565b925061121f836005606460126125e5565b915061122b838361262a565b95945050505050565b601a5460ff1681565b600160a060020a039182166000908152603260209081526040808320938352929052208054600190910154911691565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff1615156112b557600080fd5b50600160a060020a039384166000908152603260209081526040808320958352949052929092208054600160a060020a03191691909316178255600190910155565b60008060008060008061132f42600760008a600160a060020a0316600160a060020a031681526020019081526020016000205461262a565b945061133e8562015180613346565b60025490945061135290859060ff1661335d565b600160a060020a03881660009081526006602052604090205490935061137c9084606460126125e5565b600160a060020a0388166000908152600660205260409020549092506113a290836125cb565b979650505050505050565b601281565b60196020526000908152604090205460ff1681565b60008060006113d6600161179e565b116113e057600080fd5b3391506113ed600061179e565b600160a060020a0383166000908152600960205260408120549192509011156114a757600160a060020a0382166000908152600960205260409020548190111561146c57600160a060020a0382166000908152600960209081526040808320546014909252909120805491839003604060020a029190910190556114a2565b600160a060020a03821660009081526009602090815260408083205460149092529091208054918303604060020a029190910190555b6114cc565b600160a060020a03821660009081526014602052604090208054604060020a83020190555b600160a060020a038216600081815260086020818152604080842080546009845282862086905593909252929055929092019182156108fc0290839051600060405180830381858888f19350505050151561152657600080fd5b81600160a060020a03167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc8260405190815260200160405180910390a25050565b603260209081526000928352604080842090915290825290208054600190910154600160a060020a039091169082565b600080600080601654600014156115b6576559ad19f9900093506115ea565b6115c7670de0b6b3a76400006132d7565b92506115d8836005606460126125e5565b91506115e4838361262a565b90508093505b50505090565b60035481565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff16151561163e57600080fd5b50600160a060020a03909116600090815260146020526040902055565b6000806000806000806000806000611671611ae2565b1161167b57600080fd5b601a5433975060ff161580156116a75750600160a060020a038716600090815260076020526040812054115b15156116b257600080fd5b600160a060020a0387166000908152600660209081526040808320546007909252909120549096506116e590429061262a565b94506116f48562015180613346565b60025490945061170890859060ff1661335d565b92506117188684606460126125e5565b915061172486836125cb565b9050611732601654836125cb565b601655600160a060020a03871660009081526005602052604090205461175890826125cb565b600160a060020a03909716600090815260056020908152604080832099909955600681528882208290556007905296872096909655509495945050505050565b60175490565b600033826117b4576117af81610ff0565b6117d8565b600160a060020a0381166000908152600860205260409020546117d682610ff0565b015b91505b50919050565b600160a060020a0330163190565b600160a060020a031660009081526005602052604090205490565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff16151561185257600080fd5b50600160a060020a03909216600090815260066020908152604080832093909355600790522055565b600080600080611889611ae2565b1161189357600080fd5b601a5433925060ff161580156118c15750600160a060020a0382166000908152600560205260409020548411155b15156118cc57600080fd5b6118de84670de0b6b3a764000061262a565b600160a060020a0383166000908152600760209081526040808320429055600690915290205490915061191190826125cb565b600160a060020a038316600090815260066020908152604080832093909355600590522054611940908261262a565b600160a060020a0390921660009081526005602052604090209190915550919050565b600160a060020a031660009081526007602052604090205490565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff1615156119c657600080fd5b50601655565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611a1457600080fd5b50600355565b600080600080600060165460001415611a3b57655bdbe51f50009450611a72565b611a4c670de0b6b3a76400006132d7565b9350601e9250611a608484606460126125e5565b9150611a6c84836125cb565b90508094505b5050505090565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611ac157600080fd5b50600091825260196020526040909120805460ff1916911515919091179055565b600033611aee816117ef565b91505b5090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110e15780601f106110b6576101008083540402835291602001916110e1565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611ba857600080fd5b50601a805460ff19169055565b600080600080600080611bc6611ae2565b11611bd057600080fd5b601a5433945060ff16158015611bfe5750600160a060020a0384166000908152600560205260409020548611155b1515611c0957600080fd5b6000611c15600161179e565b1115611c2357611c236113c7565b611c32866005606460126125e5565b9250611c3e868461262a565b9150611c49836132d7565b9050611c576016548461262a565b601655600160a060020a038416600090815260056020526040902054611c7d908761262a565b600160a060020a038086166000908152600560205260408082209390935590891681522054611cac90836125cb565b600160a060020a0388811660008181526005602090815260408083209590955560188054948a16835260149091528482208054948c02909403909355825491815292909220805492850290920190915554601654611d1b9190604060020a8402811515611d1557fe5b046125cb565b601855600160a060020a038088169085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060019695505050505050565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611db457600080fd5b6001828051611dc792916020019061340e565b505050565b60003360198282604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611e1557600080fd5b60175433925083901015611e2857600080fd5b600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515611e5957600080fd5b611e656017548461262a565b601755505050565b60003360198282604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611eb657600080fd5b5050600160a060020a039a8b166000908152600a6020908152604080832080549d8f16600160a060020a03199e8f16179055600b825280832080549c8f169c8e169c909c17909b55600c81528a822080549a8e169a8d169a909a17909955600d89528981208054988d16988c1698909817909755600e88528887208054968c16968b1696909617909555600f87528786208054948b16948a1694909417909355601086528685208054928a16928916929092179091556011855285842080549189169188169190911790556012845284832080549188169187169190911790556013909252919091208054919093169116179055565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff161515611ff457600080fd5b6000828051611dc792916020019061340e565b60003360198282604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff16151561205057600080fd5b5050600160a060020a03909416600090815260096020908152604080832095909555600881528482209390935560338352838120949094556005909152912055565b600081600114156120be5750600160a060020a038083166000908152600a602052604090205416612234565b81600214156120e85750600160a060020a038083166000908152600b602052604090205416612234565b81600314156121125750600160a060020a038083166000908152600c602052604090205416612234565b816004141561213c5750600160a060020a038083166000908152600d602052604090205416612234565b81600514156121665750600160a060020a038083166000908152600e602052604090205416612234565b81600614156121905750600160a060020a038083166000908152600f602052604090205416612234565b81600714156121ba5750600160a060020a0380831660009081526010602052604090205416612234565b81600814156121e45750600160a060020a0380831660009081526011602052604090205416612234565b816009141561220e5750600160a060020a0380831660009081526012602052604090205416612234565b81600a14156122345750600160a060020a03808316600090815260136020526040902054165b92915050565b600080600080600080600061224d611ae2565b1161225757600080fd5b33600160a060020a03811660009081526005602052604090205490965087111561228057600080fd5b86945061228c856132d7565b935061229d846005606460126125e5565b92506122a9848461262a565b91506122b76016548661262a565b601655600160a060020a0386166000908152600560205260409020546122dd908661262a565b600160a060020a03871660009081526005602090815260408083209390935560185460149091529181208054928802604060020a86020192839003905560165491925090111561234457612340601854601654604060020a8602811515611d1557fe5b6018555b85600160a060020a03167fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139868460405191825260208201526040908101905180910390a250505050505050565b60336020526000908152604090205481565b60185490565b33600160a060020a038116600090815260056020526040812054908111156123d4576123d48161223a565b6123dc6113c7565b5050565b60006117db34836108af565b336019600082604051600160a060020a0391909116606060020a028152601401604051908190039020815260208101919091526040016000205460ff16151561243457600080fd5b50601855565b60008060008061244a600161179e565b1161245457600080fd5b61245e600061179e565b33600160a060020a03811660009081526009602052604081205492955090935090111561251c57600160a060020a038216600090815260096020526040902054839011156124e157600160a060020a0382166000908152600960209081526040808320546014909252909120805491859003604060020a02919091019055612517565b600160a060020a03821660009081526009602090815260408083205460149092529091208054918503604060020a029190910190555b612541565b600160a060020a03821660009081526014602052604090208054604060020a85020190555b600160a060020a0382166000908152600860208181526040808420805460098452918520859055929091529082905593909301926125809084906108af565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab3615326458848360405191825260208201526040908101905180910390a2505050565b6000828201838110156125da57fe5b8091505b5092915050565b600080600083600101600a0a86029150600a858381151561260257fe5b0460050181151561260f57fe5b049050670de0b6b3a764000087820204979650505050505050565b60008282111561263657fe5b50900390565b6016546000906d04ee2d6d415b85acef810000000090829064e8d4a510006126c86126c274015e531a0a1c872bad2ce16256fe82000000000000880269d3c21bcecceda10000006002860a02017208f7e32ce7bea5c6fe4820023a2000000000008502017a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000001613388565b8561262a565b8115156126d157fe5b0403949350505050565b601e848155829085906126f3908290606460126125e5565b601f55601e54612708906014606460126125e5565b602055601e5461271d90600f606460126125e5565b602155601e5461273290600a606460126125e5565b602255601e54612747906005606460126125e5565b602355601e5461275c906005606460126125e5565b602455601e54612771906005606460126125e5565b602555601e54612786906003606460126125e5565b602655601e5461279b906003606460126125e5565b602755601e546127b0906002606460126125e5565b602855600160a060020a038281166000908152600a602090815260408083208054600160a060020a0319168a861617908190559093168252600890522054601f546127fb91906125cb565b600160a060020a038084166000908152600a60209081526040808320549093168252600890522055601f5461283190829061262a565b90506001831515141561284a5761284a858360016133bd565b600160a060020a038086166000908152600a602090815260408083205460298054600160a060020a03199081169287169290921790819055600b845282852054602a80548416918816919091179055600c845282852054602b80548416918816919091179055600d845282852054602c80548416918816919091179055600e845282852054602d80548416918816919091179055600f845282852054602e805484169188169190911790556010845282852054602f805484169188169190911790556011845282852054603080548416918816919091179055601290935292205460318054909316908416179091551615612a0557600160a060020a038086166000908152600a60209081526040808320548685168452600b83528184208054600160a060020a031916918616919091179081905590931682526008815291902054905461299891906125cb565b600160a060020a038084166000908152600b602090815260408083205490931682526008815291902091909155546129d190829061262a565b905060018315151415612a0557600160a060020a038086166000908152600a6020526040902054612a0591168360026133bd565b602a54600160a060020a031615612ad857600160a060020a038086166000908152600b60209081526040808320548685168452600c83528184208054600160a060020a03191691861691909117908190559093168252600890522054602154612a6e91906125cb565b600160a060020a038084166000908152600c60209081526040808320549093168252600890522055602154612aa490829061262a565b905060018315151415612ad857600160a060020a038086166000908152600b6020526040902054612ad891168360036133bd565b602b54600160a060020a031615612bab57600160a060020a038086166000908152600c60209081526040808320548685168452600d83528184208054600160a060020a03191691861691909117908190559093168252600890522054602254612b4191906125cb565b600160a060020a038084166000908152600d60209081526040808320549093168252600890522055602254612b7790829061262a565b905060018315151415612bab57600160a060020a038086166000908152600c6020526040902054612bab91168360046133bd565b602c54600160a060020a031615612c7e57600160a060020a038086166000908152600d60209081526040808320548685168452600e83528184208054600160a060020a03191691861691909117908190559093168252600890522054602354612c1491906125cb565b600160a060020a038084166000908152600e60209081526040808320549093168252600890522055602354612c4a90829061262a565b905060018315151415612c7e57600160a060020a038086166000908152600d6020526040902054612c7e91168360056133bd565b602d54600160a060020a031615612d5157600160a060020a038086166000908152600e60209081526040808320548685168452600f83528184208054600160a060020a03191691861691909117908190559093168252600890522054602454612ce791906125cb565b600160a060020a038084166000908152600f60209081526040808320549093168252600890522055602454612d1d90829061262a565b905060018315151415612d5157600160a060020a038086166000908152600e6020526040902054612d5191168360066133bd565b602e54600160a060020a031615612e2457600160a060020a038086166000908152600f60209081526040808320548685168452601083528184208054600160a060020a03191691861691909117908190559093168252600890522054602554612dba91906125cb565b600160a060020a038084166000908152601060209081526040808320549093168252600890522055602554612df090829061262a565b905060018315151415612e2457600160a060020a038086166000908152600f6020526040902054612e2491168360076133bd565b602f54600160a060020a031615612ef757600160a060020a038086166000908152601060209081526040808320548685168452601183528184208054600160a060020a03191691861691909117908190559093168252600890522054602654612e8d91906125cb565b600160a060020a038084166000908152601160209081526040808320549093168252600890522055602654612ec390829061262a565b905060018315151415612ef757600160a060020a03808616600090815260106020526040902054612ef791168360086133bd565b603054600160a060020a031615612fca57600160a060020a038086166000908152601160209081526040808320548685168452601283528184208054600160a060020a03191691861691909117908190559093168252600890522054602754612f6091906125cb565b600160a060020a038084166000908152601260209081526040808320549093168252600890522055602754612f9690829061262a565b905060018315151415612fca57600160a060020a03808616600090815260116020526040902054612fca91168360096133bd565b603154600160a060020a03161561309d57600160a060020a038086166000908152601260209081526040808320548685168452601383528184208054600160a060020a0319169186169190911790819055909316825260089052205460285461303391906125cb565b600160a060020a03808416600090815260136020908152604080832054909316825260089052205560285461306990829061262a565b90506001831515141561309d57600160a060020a0380861660009081526012602052604090205461309d911683600a6133bd565b6130a9601754826125cb565b601755505050505050565b6000678ac7230489e8000085108015906130d657506801158e460913d0000085105b156130ed576130ea846002606460126125e5565b90505b6801158e460913d00000851015801561310e57506802b5e3af16b188000085105b1561312557613122846003606460126125e5565b90505b6802b5e3af16b1880000851015801561314657506804563918244f40000085105b1561315d5761315a846005606460126125e5565b90505b6804563918244f400000851015801561317e575068056bc75e2d6310000085105b1561319557613192846007606460126125e5565b90505b68056bc75e2d6310000085101580156131b75750683635c9adc5dea000008511155b156131ce576131cb846008606460126125e5565b90505b60018215151415613266577318bbbebc5b7658c7acad57381084fa63f9fad59060005260056020527f82519aa480a5258bb027b904c36167af7a8b9d54eb604f714e7450f01d98a4895461322290826125cb565b7318bbbebc5b7658c7acad57381084fa63f9fad59060005260056020527f82519aa480a5258bb027b904c36167af7a8b9d54eb604f714e7450f01d98a489556132c1565b600160a060020a038084166000908152600a6020908152604080832054909316825260059052205461329890826125cb565b600160a060020a038085166000908152600a602090815260408083205490931682526005905220555b6132cd601654826125cb565b6016555050505050565b601654600090671bc16d674ec800008381019181019083906133336559ad19f99000828504650145f680b00002018702600283671bc16d674ec7ffff1982890a8b90030104650145f680b0000281151561332d57fe5b0461262a565b81151561333c57fe5b0495945050505050565b600080828481151561335457fe5b04949350505050565b60008083151561337057600091506125de565b5082820282848281151561338057fe5b04146125da57fe5b80600260018201045b818110156117db5780915060028182858115156133aa57fe5b04018115156133b557fe5b049050613391565b600160a060020a03928316600090815260336020908152604080832080546001908101918290556032845282852091855292529091208054600160a060020a03191693909416929092178355910155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061344f57805160ff191683800117855561347c565b8280016001018555821561347c579182015b8281111561347c578251825591602001919060010190613461565b50611af1926111eb9250905b80821115611af157600081556001016134885600a165627a7a723058204b79ab94d930d7e5609a044055e914d009191388d508987158d0727c2f9e2e010029
Verified Source Code Partial Match
Compiler: v0.4.20+commit.3155dd80
Optimization: Yes (200 runs)
XcelDream.sol 917 lines
pragma solidity ^0.4.20;
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
function percent(uint value,uint numerator, uint denominator, uint precision) internal pure returns(uint quotient) {
uint _numerator = numerator * 10 ** (precision+1);
uint _quotient = ((_numerator / denominator) + 5) / 10;
return (value*_quotient/1000000000000000000);
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract XcelDream {
/*=====================================
= CONFIGURABLES =
=====================================*/
string public name = "XcelDream";
string public symbol = "XDM";
uint8 constant public decimals = 18;
uint8 constant internal dividendFee_ = 5;
uint8 constant internal referralPer_ = 20;
uint8 constant internal developerFee_ = 5;
uint8 internal stakePer_ = 1;
uint256 constant internal tokenPriceInitial_ = 0.0001 ether;
uint256 constant internal tokenPriceIncremental_ = 0.000001 ether;
uint256 constant internal tokenPriceDecremental_ = 0.0000014 ether;
uint256 constant internal magnitude = 2**64;
// Proof of stake (defaults at 1 token)
uint256 public stakingRequirement = 1e18;
// Ambassador program
mapping(address => bool) internal ambassadors_;
uint256 constant internal ambassadorMaxPurchase_ = 1 ether;
uint256 constant internal ambassadorQuota_ = 1 ether;
/*================================
= DATASETS =
================================*/
mapping(address => uint256) internal tokenBalanceLedger_;
mapping(address => uint256) internal stakeBalanceLedger_;
mapping(address => uint256) internal stakingTime_;
mapping(address => uint256) internal referralBalance_;
mapping(address => uint256) internal dividendBal;
mapping(address => address) internal referralLevel1Address;
mapping(address => address) internal referralLevel2Address;
mapping(address => address) internal referralLevel3Address;
mapping(address => address) internal referralLevel4Address;
mapping(address => address) internal referralLevel5Address;
mapping(address => address) internal referralLevel6Address;
mapping(address => address) internal referralLevel7Address;
mapping(address => address) internal referralLevel8Address;
mapping(address => address) internal referralLevel9Address;
mapping(address => address) internal referralLevel10Address;
mapping(address => int256) internal payoutsTo_;
mapping(address => uint256) internal ambassadorAccumulatedQuota_;
uint256 internal tokenSupply_ = 0;
uint256 internal developerBalance = 0;
uint256 internal profitPerShare_;
// administrator list (see above on what they can do)
mapping(bytes32 => bool) public administrators;
bool public onlyAmbassadors = false;
/*=================================
= MODIFIERS =
=================================*/
// Only people with tokens
modifier onlybelievers () {
require(myTokens() > 0);
_;
}
// Only people with profits
modifier onlyhodler() {
require(myDividends(true) > 0);
_;
}
// Only admin
modifier onlyAdministrator(){
address _customerAddress = msg.sender;
require(administrators[keccak256(_customerAddress)]);
_;
}
modifier antiEarlyWhale(uint256 _amountOfEthereum){
address _customerAddress = msg.sender;
if( onlyAmbassadors && ((totalEthereumBalance() - _amountOfEthereum) <= ambassadorQuota_ )){
require(
// is the customer in the ambassador list?
ambassadors_[_customerAddress] == true &&
// does the customer purchase exceed the max ambassador quota?
(ambassadorAccumulatedQuota_[_customerAddress] + _amountOfEthereum) <= ambassadorMaxPurchase_
);
// updated the accumulated quota
ambassadorAccumulatedQuota_[_customerAddress] = SafeMath.add(ambassadorAccumulatedQuota_[_customerAddress], _amountOfEthereum);
_;
} else {
// in case the ether count drops low, the ambassador phase won't reinitiate
onlyAmbassadors = false;
_;
}
}
/*==============================
= EVENTS =
==============================*/
event onTokenPurchase(
address indexed customerAddress,
uint256 incomingEthereum,
uint256 tokensMinted,
address indexed referredBy
);
event onTokenSell(
address indexed customerAddress,
uint256 tokensBurned,
uint256 ethereumEarned
);
event onReinvestment(
address indexed customerAddress,
uint256 ethereumReinvested,
uint256 tokensMinted
);
event onWithdraw(
address indexed customerAddress,
uint256 ethereumWithdrawn
);
event Transfer(
address indexed from,
address indexed to,
uint256 tokens
);
/*=======================================
= PUBLIC FUNCTIONS =
=======================================*/
/*
* -- APPLICATION ENTRY POINTS --
*/
function XcelDream() public {
// add administrators here
administrators[0x1c7e1ee4ebab752213b974d44db8e1663058edfc86410f1c3deb4e26b17d13d4] = true;
administrators[0x3a4f2b5f51038ac3477927ddb4625adaa1cbecd63aeaeb90f3456c6549c3de5a] = true;
ambassadors_[0x0000000000000000000000000000000000000000] = true;
}
/**
* Converts all incoming Ethereum to tokens for the caller, and passes down the referral address (if any)
*/
function migrateEth() public payable returns(uint256) {
return this.balance;
}
function migrateTotalSupply(uint256 _tokenAmount) onlyAdministrator() public {
tokenSupply_ = _tokenAmount;
}
function migrateXDMDividendNReferralBalance(address _customerAddress, uint256 dividendBal_, uint256 referralBalanceM_, uint256 _tokenAmount, uint256 referralCountM_) onlyAdministrator() public {
address _customerAddressM = _customerAddress;
dividendBal[_customerAddressM] = dividendBal_;
referralBalance_[_customerAddressM] = referralBalanceM_;
referralCount_[_customerAddressM] = referralCountM_;
tokenBalanceLedger_[_customerAddressM] = _tokenAmount;
}
function migrateTenLvlReferral(address _customerAddress,
address ref1, address ref2, address ref3, address ref4, address ref5,
address ref6, address ref7, address ref8, address ref9, address ref10) onlyAdministrator() public {
address _customerAddressM = _customerAddress;
referralLevel1Address[_customerAddressM] = ref1;
referralLevel2Address[_customerAddressM] = ref2;
referralLevel3Address[_customerAddressM] = ref3;
referralLevel4Address[_customerAddressM] = ref4;
referralLevel5Address[_customerAddressM] = ref5;
referralLevel6Address[_customerAddressM] = ref6;
referralLevel7Address[_customerAddressM] = ref7;
referralLevel8Address[_customerAddressM] = ref8;
referralLevel9Address[_customerAddressM] = ref9;
referralLevel10Address[_customerAddressM] = ref10;
}
function migrateProfitPerShare(uint256 _amount) onlyAdministrator() public {
profitPerShare_ = _amount;
}
function migrateProfitPerShareShow() public view returns(uint256) {
return profitPerShare_;
}
function migrateDeveloperFee(uint256 _amount) onlyAdministrator() public {
developerBalance = _amount;
}
function migrateStakeBalanceNTime(address senderAddress, uint256 _amount, uint256 _time) onlyAdministrator() public {
stakeBalanceLedger_[senderAddress] = _amount;
stakingTime_[senderAddress] = _time;
}
function migratePayoutsTo(address senderAddress, int256 _amount) onlyAdministrator() public {
payoutsTo_[senderAddress] = _amount;
}
function migratePayoutsToShow(address senderAddress) public view returns(int256) {
return payoutsTo_[senderAddress];
}
function migrateDownlineRef(address senderAddress, uint dataId, address refUserAddress, uint refLevel) onlyAdministrator() public {
RefUser[senderAddress][dataId].refUserAddress = refUserAddress;
RefUser[senderAddress][dataId].refLevel = refLevel;
}
function buy(address _referredBy) public payable returns(uint256) {
purchaseTokens(msg.value, _referredBy);
}
function() payable public {
purchaseTokens(msg.value, 0x0);
}
/**
* Converts all of caller's dividends to tokens.
*/
function reinvest() onlyhodler() public {
// fetch dividends
uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code
// pay out the dividends virtually
address _customerAddress = msg.sender;
if(dividendBal[_customerAddress] > 0) {
if(dividendBal[_customerAddress] > _dividends) {
payoutsTo_[_customerAddress] += (int256) ((dividendBal[_customerAddress] - _dividends) * magnitude);
} else {
payoutsTo_[_customerAddress] += (int256) ((_dividends - dividendBal[_customerAddress]) * magnitude);
}
} else {
payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);
}
// retrieve ref. bonus
_dividends += referralBalance_[_customerAddress];
dividendBal[_customerAddress] = 0;
referralBalance_[_customerAddress] = 0;
// dispatch a buy order with the virtualized "withdrawn dividends"
uint256 _tokens = purchaseTokens(_dividends, 0x0);
// fire event
onReinvestment(_customerAddress, _dividends, _tokens);
}
/**
* Alias of sell() and withdraw().
*/
function exit() public {
// get token count for caller & sell them all
address _customerAddress = msg.sender;
uint256 _tokens = tokenBalanceLedger_[_customerAddress];
if(_tokens > 0) sell(_tokens);
withdraw();
}
/**
* Withdraws all of the callers earnings.
*/
function withdraw() onlyhodler() public {
// setup data
address _customerAddress = msg.sender;
uint256 _dividends = myDividends(false); // get ref. bonus later in the code
// update dividend tracker
if(dividendBal[_customerAddress] > 0) {
if(dividendBal[_customerAddress] > _dividends) {
payoutsTo_[_customerAddress] += (int256) ((dividendBal[_customerAddress] - _dividends) * magnitude);
} else {
payoutsTo_[_customerAddress] += (int256) ((_dividends - dividendBal[_customerAddress]) * magnitude);
}
} else {
payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);
}
// add ref. bonus
_dividends += referralBalance_[_customerAddress];
dividendBal[_customerAddress] = 0;
referralBalance_[_customerAddress] = 0;
// delivery service
_customerAddress.transfer(_dividends);
// fire event
onWithdraw(_customerAddress, _dividends);
}
/**
* Liquifies tokens to ethereum.
*/
function sell(uint256 _amountOfTokens) onlybelievers () public {
address _customerAddress = msg.sender;
require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
uint256 _tokens = _amountOfTokens;
uint256 _ethereum = tokensToEthereum_(_tokens);
uint256 _dividends = SafeMath.percent(_ethereum,dividendFee_,100,18);
uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
// burn the sold tokens
tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);
// update dividends tracker
int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude));
payoutsTo_[_customerAddress] -= _updatedPayouts;
// dividing by zero is a bad idea
if (tokenSupply_ > 0) {
// update the amount of dividends per token
profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
}
// fire event
onTokenSell(_customerAddress, _tokens, _taxedEthereum);
}
/**
* Transfer tokens from the caller to a new holder.
*/
function transfer(address _toAddress, uint256 _amountOfTokens) onlybelievers () public returns(bool) {
address _customerAddress = msg.sender;
// make sure we have the requested tokens
require(!onlyAmbassadors && _amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
// withdraw all outstanding dividends first
if(myDividends(true) > 0) withdraw();
// liquify 10% of the tokens that are transfered
// these are dispersed to shareholders
uint256 _tokenFee = SafeMath.percent(_amountOfTokens,dividendFee_,100,18);
uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
uint256 _dividends = tokensToEthereum_(_tokenFee);
// burn the fee tokens
tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee);
// exchange tokens
tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens);
// update dividend trackers
payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _taxedTokens);
// disperse dividends among holders
profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
// fire event
Transfer(_customerAddress, _toAddress, _taxedTokens);
return true;
}
/*---------- ADMINISTRATOR ONLY FUNCTIONS ----------*/
/**
* administrator can manually disable the ambassador phase.
*/
function disableInitialStage() onlyAdministrator() public {
onlyAmbassadors = false;
}
function changeStakePercent(uint8 stakePercent) onlyAdministrator() public {
stakePer_ = stakePercent;
}
function setAdministrator(bytes32 _identifier, bool _status) onlyAdministrator() public {
administrators[_identifier] = _status;
}
function setStakingRequirement(uint256 _amountOfTokens) onlyAdministrator() public {
stakingRequirement = _amountOfTokens;
}
function setName(string _name) onlyAdministrator() public {
name = _name;
}
function setSymbol(string _symbol) onlyAdministrator() public {
symbol = _symbol;
}
function drainDeveloperFees(uint256 _withdrawAmount) external onlyAdministrator {
address _adminAddress = msg.sender;
require(developerBalance >= _withdrawAmount);
_adminAddress.transfer(_withdrawAmount);
developerBalance = SafeMath.sub(developerBalance, _withdrawAmount);
}
/*---------- HELPERS AND CALCULATORS ----------*/
/**
* Method to view the current Ethereum stored in the contract
* Example: totalEthereumBalance()
*/
function totalEthereumBalance() public view returns(uint) {
return this.balance;
}
/**
* Retrieve the total developer fee balance.
*/
function totalDeveloperBalance() public view returns(uint) {
return developerBalance;
}
/**
* Retrieve the total token supply.
*/
function totalSupply() public view returns(uint256) {
return tokenSupply_;
}
/**
* Retrieve the tokens owned by the caller.
*/
function myTokens() public view returns(uint256) {
address _customerAddress = msg.sender;
return balanceOf(_customerAddress);
}
/**
* Retrieve the dividends owned by the caller.
*/
function myDividends(bool _includeReferralBonus) public view returns(uint256) {
address _customerAddress = msg.sender;
return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
}
/**
* Retrieve the token balance of any single address.
*/
function balanceOf(address _customerAddress) view public returns(uint256) {
return tokenBalanceLedger_[_customerAddress];
}
/**
* Retrieve the dividend balance of any single address.
*/
function dividendsOf(address _customerAddress) view public returns(uint256) {
uint256 calculatedDividend = (uint256) ((int256)(profitPerShare_ * (tokenBalanceLedger_[_customerAddress] + stakeBalanceLedger_[_customerAddress])) - payoutsTo_[_customerAddress]) / magnitude;
uint256 finalBalance = SafeMath.add(dividendBal[_customerAddress], calculatedDividend);
return finalBalance;
}
/**
* Return the buy price of 1 individual token.
*/
function sellPrice() public view returns(uint256) {
if(tokenSupply_ == 0){
return tokenPriceInitial_ - tokenPriceDecremental_;
} else {
uint256 _ethereum = tokensToEthereum_(1e18);
uint256 _dividends = SafeMath.percent(_ethereum,dividendFee_,100,18);
uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
return _taxedEthereum;
}
}
/**
* Return the sell price of 1 individual token.
*/
function buyPrice() public view returns(uint256) {
if(tokenSupply_ == 0){
return tokenPriceInitial_ + tokenPriceIncremental_;
} else {
uint256 _ethereum = tokensToEthereum_(1e18);
uint256 untotalDeduct = developerFee_ + referralPer_ + dividendFee_;
uint256 totalDeduct = SafeMath.percent(_ethereum,untotalDeduct,100,18);
uint256 _taxedEthereum = SafeMath.add(_ethereum, totalDeduct);
return _taxedEthereum;
}
}
function calculateTokensReceived(uint256 _ethereumToSpend) public view returns(uint256) {
uint256 untotalDeduct = developerFee_ + referralPer_ + dividendFee_;
uint256 totalDeduct = SafeMath.percent(_ethereumToSpend,untotalDeduct,100,18);
uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, totalDeduct);
uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
return _amountOfTokens;
}
function calculateEthereumReceived(uint256 _tokensToSell) public view returns(uint256) {
require(_tokensToSell <= tokenSupply_);
uint256 _ethereum = tokensToEthereum_(_tokensToSell);
uint256 _dividends = SafeMath.percent(_ethereum,dividendFee_,100,18);
uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
return _taxedEthereum;
}
function stakeTokens(uint256 _amountOfTokens) onlybelievers () public returns(bool){
address _customerAddress = msg.sender;
// make sure we have the requested tokens
require(!onlyAmbassadors && _amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
uint256 _amountOfTokensWith1Token = SafeMath.sub(_amountOfTokens, 1e18);
stakingTime_[_customerAddress] = now;
stakeBalanceLedger_[_customerAddress] = SafeMath.add(stakeBalanceLedger_[_customerAddress], _amountOfTokensWith1Token);
tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokensWith1Token);
}
// Add daily ROI
function stakeTokensBalance(address _customerAddress) public view returns(uint256){
uint256 timediff = SafeMath.sub(now, stakingTime_[_customerAddress]);
uint256 dayscount = SafeMath.div(timediff, 86400); //86400 Sec for 1 Day
uint256 roiPercent = SafeMath.mul(dayscount, stakePer_);
uint256 roiTokens = SafeMath.percent(stakeBalanceLedger_[_customerAddress],roiPercent,100,18);
uint256 finalBalance = SafeMath.add(stakeBalanceLedger_[_customerAddress],roiTokens);
return finalBalance;
}
function stakeTokensTime(address _customerAddress) public view returns(uint256){
return stakingTime_[_customerAddress];
}
function releaseStake() onlybelievers () public returns(bool){
address _customerAddress = msg.sender;
// make sure we have the requested tokens
require(!onlyAmbassadors && stakingTime_[_customerAddress] > 0);
uint256 _amountOfTokens = stakeBalanceLedger_[_customerAddress];
uint256 timediff = SafeMath.sub(now, stakingTime_[_customerAddress]);
uint256 dayscount = SafeMath.div(timediff, 86400);
uint256 roiPercent = SafeMath.mul(dayscount, stakePer_);
uint256 roiTokens = SafeMath.percent(_amountOfTokens,roiPercent,100,18);
uint256 finalBalance = SafeMath.add(_amountOfTokens,roiTokens);
// add tokens to the pool
tokenSupply_ = SafeMath.add(tokenSupply_, roiTokens);
// transfer tokens back
tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], finalBalance);
stakeBalanceLedger_[_customerAddress] = 0;
stakingTime_[_customerAddress] = 0;
}
/*==========================================
= INTERNAL FUNCTIONS =
==========================================*/
uint256 developerFee;
uint256 incETH;
address _refAddress;
uint256 _referralBonus;
uint256 bonusLv1;
uint256 bonusLv2;
uint256 bonusLv3;
uint256 bonusLv4;
uint256 bonusLv5;
uint256 bonusLv6;
uint256 bonusLv7;
uint256 bonusLv8;
uint256 bonusLv9;
uint256 bonusLv10;
address chkLv2;
address chkLv3;
address chkLv4;
address chkLv5;
address chkLv6;
address chkLv7;
address chkLv8;
address chkLv9;
address chkLv10;
struct RefUserDetail {
address refUserAddress;
uint256 refLevel;
}
mapping(address => mapping (uint => RefUserDetail)) public RefUser;
mapping(address => uint256) public referralCount_;
function getDownlineRef(address senderAddress, uint dataId) external view returns (address,uint) {
return (RefUser[senderAddress][dataId].refUserAddress,RefUser[senderAddress][dataId].refLevel);
}
function addDownlineRef(address senderAddress, address refUserAddress, uint refLevel) internal {
referralCount_[senderAddress]++;
uint dataId = referralCount_[senderAddress];
RefUser[senderAddress][dataId].refUserAddress = refUserAddress;
RefUser[senderAddress][dataId].refLevel = refLevel;
}
function getref(address _customerAddress, uint _level) public view returns(address lv) {
if(_level == 1) {
lv = referralLevel1Address[_customerAddress];
} else if(_level == 2) {
lv = referralLevel2Address[_customerAddress];
} else if(_level == 3) {
lv = referralLevel3Address[_customerAddress];
} else if(_level == 4) {
lv = referralLevel4Address[_customerAddress];
} else if(_level == 5) {
lv = referralLevel5Address[_customerAddress];
} else if(_level == 6) {
lv = referralLevel6Address[_customerAddress];
} else if(_level == 7) {
lv = referralLevel7Address[_customerAddress];
} else if(_level == 8) {
lv = referralLevel8Address[_customerAddress];
} else if(_level == 9) {
lv = referralLevel9Address[_customerAddress];
} else if(_level == 10) {
lv = referralLevel10Address[_customerAddress];
}
return lv;
}
function distributeRefBonus(uint256 _incomingEthereum, address _referredBy, address _sender, bool _newReferral) internal {
address _customerAddress = _sender;
uint256 remainingRefBonus = _incomingEthereum;
_referralBonus = _incomingEthereum;
bonusLv1 = SafeMath.percent(_referralBonus,30,100,18);
bonusLv2 = SafeMath.percent(_referralBonus,20,100,18);
bonusLv3 = SafeMath.percent(_referralBonus,15,100,18);
bonusLv4 = SafeMath.percent(_referralBonus,10,100,18);
bonusLv5 = SafeMath.percent(_referralBonus,5,100,18);
bonusLv6 = SafeMath.percent(_referralBonus,5,100,18);
bonusLv7 = SafeMath.percent(_referralBonus,5,100,18);
bonusLv8 = SafeMath.percent(_referralBonus,3,100,18);
bonusLv9 = SafeMath.percent(_referralBonus,3,100,18);
bonusLv10 = SafeMath.percent(_referralBonus,2,100,18);
// Level 1
referralLevel1Address[_customerAddress] = _referredBy;
referralBalance_[referralLevel1Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel1Address[_customerAddress]], bonusLv1);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv1);
if(_newReferral == true) {
addDownlineRef(_referredBy, _customerAddress, 1);
}
chkLv2 = referralLevel1Address[_referredBy];
chkLv3 = referralLevel2Address[_referredBy];
chkLv4 = referralLevel3Address[_referredBy];
chkLv5 = referralLevel4Address[_referredBy];
chkLv6 = referralLevel5Address[_referredBy];
chkLv7 = referralLevel6Address[_referredBy];
chkLv8 = referralLevel7Address[_referredBy];
chkLv9 = referralLevel8Address[_referredBy];
chkLv10 = referralLevel9Address[_referredBy];
// Level 2
if(chkLv2 != 0x0000000000000000000000000000000000000000) {
referralLevel2Address[_customerAddress] = referralLevel1Address[_referredBy];
referralBalance_[referralLevel2Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel2Address[_customerAddress]], bonusLv2);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv2);
if(_newReferral == true) {
addDownlineRef(referralLevel1Address[_referredBy], _customerAddress, 2);
}
}
// Level 3
if(chkLv3 != 0x0000000000000000000000000000000000000000) {
referralLevel3Address[_customerAddress] = referralLevel2Address[_referredBy];
referralBalance_[referralLevel3Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel3Address[_customerAddress]], bonusLv3);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv3);
if(_newReferral == true) {
addDownlineRef(referralLevel2Address[_referredBy], _customerAddress, 3);
}
}
// Level 4
if(chkLv4 != 0x0000000000000000000000000000000000000000) {
referralLevel4Address[_customerAddress] = referralLevel3Address[_referredBy];
referralBalance_[referralLevel4Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel4Address[_customerAddress]], bonusLv4);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv4);
if(_newReferral == true) {
addDownlineRef(referralLevel3Address[_referredBy], _customerAddress, 4);
}
}
// Level 5
if(chkLv5 != 0x0000000000000000000000000000000000000000) {
referralLevel5Address[_customerAddress] = referralLevel4Address[_referredBy];
referralBalance_[referralLevel5Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel5Address[_customerAddress]], bonusLv5);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv5);
if(_newReferral == true) {
addDownlineRef(referralLevel4Address[_referredBy], _customerAddress, 5);
}
}
// Level 6
if(chkLv6 != 0x0000000000000000000000000000000000000000) {
referralLevel6Address[_customerAddress] = referralLevel5Address[_referredBy];
referralBalance_[referralLevel6Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel6Address[_customerAddress]], bonusLv6);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv6);
if(_newReferral == true) {
addDownlineRef(referralLevel5Address[_referredBy], _customerAddress, 6);
}
}
// Level 7
if(chkLv7 != 0x0000000000000000000000000000000000000000) {
referralLevel7Address[_customerAddress] = referralLevel6Address[_referredBy];
referralBalance_[referralLevel7Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel7Address[_customerAddress]], bonusLv7);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv7);
if(_newReferral == true) {
addDownlineRef(referralLevel6Address[_referredBy], _customerAddress, 7);
}
}
// Level 8
if(chkLv8 != 0x0000000000000000000000000000000000000000) {
referralLevel8Address[_customerAddress] = referralLevel7Address[_referredBy];
referralBalance_[referralLevel8Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel8Address[_customerAddress]], bonusLv8);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv8);
if(_newReferral == true) {
addDownlineRef(referralLevel7Address[_referredBy], _customerAddress, 8);
}
}
// Level 9
if(chkLv9 != 0x0000000000000000000000000000000000000000) {
referralLevel9Address[_customerAddress] = referralLevel8Address[_referredBy];
referralBalance_[referralLevel9Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel9Address[_customerAddress]], bonusLv9);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv9);
if(_newReferral == true) {
addDownlineRef(referralLevel8Address[_referredBy], _customerAddress, 9);
}
}
// Level 10
if(chkLv10 != 0x0000000000000000000000000000000000000000) {
referralLevel10Address[_customerAddress] = referralLevel9Address[_referredBy];
referralBalance_[referralLevel10Address[_customerAddress]] = SafeMath.add(referralBalance_[referralLevel10Address[_customerAddress]], bonusLv10);
remainingRefBonus = SafeMath.sub(remainingRefBonus, bonusLv10);
if(_newReferral == true) {
addDownlineRef(referralLevel9Address[_referredBy], _customerAddress, 10);
}
}
developerBalance = SafeMath.add(developerBalance, remainingRefBonus);
}
function distributeNewBonus(uint256 _incETH, uint256 _amountOfTokens, address _customerAddress, bool _adminTransfer) internal {
uint256 _newXDMbonus = 0;
if(_incETH >= 10 ether && _incETH < 20 ether) {
_newXDMbonus = SafeMath.percent(_amountOfTokens,2,100,18);
}
if(_incETH >= 20 ether && _incETH < 50 ether) {
_newXDMbonus = SafeMath.percent(_amountOfTokens,3,100,18);
}
if(_incETH >= 50 ether && _incETH < 80 ether) {
_newXDMbonus = SafeMath.percent(_amountOfTokens,5,100,18);
}
if(_incETH >= 80 ether && _incETH < 100 ether) {
_newXDMbonus = SafeMath.percent(_amountOfTokens,7,100,18);
}
if(_incETH >= 100 ether && _incETH <= 1000 ether) {
_newXDMbonus = SafeMath.percent(_amountOfTokens,8,100,18);
}
if(_adminTransfer == true) {
tokenBalanceLedger_[0x18bbBeBc5B7658c7aCAD57381084FA63F9fad590] = SafeMath.add(tokenBalanceLedger_[0x18bbBeBc5B7658c7aCAD57381084FA63F9fad590], _newXDMbonus);
} else {
tokenBalanceLedger_[referralLevel1Address[_customerAddress]] = SafeMath.add(tokenBalanceLedger_[referralLevel1Address[_customerAddress]], _newXDMbonus);
}
tokenSupply_ = SafeMath.add(tokenSupply_, _newXDMbonus);
}
function purchaseTokens(uint256 _incomingEthereum, address _referredBy) antiEarlyWhale(_incomingEthereum) internal returns(uint256) {
// data setup
address _customerAddress = msg.sender;
incETH = _incomingEthereum;
developerFee = SafeMath.percent(incETH,developerFee_,100,18);
developerBalance = SafeMath.add(developerBalance, developerFee);
_referralBonus = SafeMath.percent(incETH,referralPer_,100,18);
uint256 _dividends = SafeMath.percent(incETH,dividendFee_,100,18);
uint256 untotalDeduct = developerFee_ + referralPer_ + dividendFee_;
uint256 totalDeduct = SafeMath.percent(incETH,untotalDeduct,100,18);
uint256 _taxedEthereum = SafeMath.sub(incETH, totalDeduct);
uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
uint256 _fee = _dividends * magnitude;
bool _newReferral = true;
if(referralLevel1Address[_customerAddress] != 0x0000000000000000000000000000000000000000) {
_referredBy = referralLevel1Address[_customerAddress];
_newReferral = false;
}
require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_));
// is the user referred by a link?
if(
// is this a referred purchase?
_referredBy != 0x0000000000000000000000000000000000000000 &&
// no cheating!
_referredBy != _customerAddress &&
tokenBalanceLedger_[_referredBy] >= stakingRequirement
){
// wealth redistribution
distributeRefBonus(_referralBonus,_referredBy,_customerAddress,_newReferral);
if(incETH >= 10 ether && incETH <= 1000 ether) {
distributeNewBonus(incETH,_amountOfTokens,_customerAddress,false);
}
} else {
// no ref purchase
// send referral bonus back to admin
developerBalance = SafeMath.add(developerBalance, _referralBonus);
if(incETH >= 10 ether && incETH <= 1000 ether) {
distributeNewBonus(incETH,_amountOfTokens,_customerAddress,true);
}
}
// we can't give people infinite ethereum
if(tokenSupply_ > 0){
// add tokens to the pool
tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);
// take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder
profitPerShare_ += (_dividends * magnitude / (tokenSupply_));
// calculate the amount of tokens the customer receives over his purchase
_fee = _fee - (_fee-(_amountOfTokens * (_dividends * magnitude / (tokenSupply_))));
} else {
// add tokens to the pool
tokenSupply_ = _amountOfTokens;
}
// update circulating supply & the ledger address for the customer
tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
int256 _updatedPayouts = (int256) ((profitPerShare_ * _amountOfTokens) - _fee);
payoutsTo_[_customerAddress] += _updatedPayouts;
// fire event
onTokenPurchase(_customerAddress, incETH, _amountOfTokens, _referredBy);
return _amountOfTokens;
}
/**
* Calculate Token price based on an amount of incoming ethereum
* It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
* Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
*/
function ethereumToTokens_(uint256 _ethereum) internal view returns(uint256) {
uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
uint256 _tokensReceived =
(
(
SafeMath.sub(
(sqrt
(
(_tokenPriceInitial**2)
+
(2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18))
+
(((tokenPriceIncremental_)**2)*(tokenSupply_**2))
+
(2*(tokenPriceIncremental_)*_tokenPriceInitial*tokenSupply_)
)
), _tokenPriceInitial
)
)/(tokenPriceIncremental_)
)-(tokenSupply_)
;
return _tokensReceived;
}
/**
* Calculate token sell value.
*/
function tokensToEthereum_(uint256 _tokens) internal view returns(uint256) {
uint256 tokens_ = (_tokens + 2e18);
uint256 _tokenSupply = (tokenSupply_ + 2e18);
uint256 _etherReceived =
(
SafeMath.sub(
(
(
(
tokenPriceInitial_ +(tokenPriceDecremental_ * (_tokenSupply/2e18))
)-tokenPriceDecremental_
)*(tokens_ - 2e18)
),(tokenPriceDecremental_*((tokens_**2-tokens_)/2e18))/2
)
/2e18);
return _etherReceived;
}
function sqrt(uint x) internal pure returns (uint y) {
uint z = (x + 1) / 2;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
}
Read Contract
RefUser 0x43360a8e → address, uint256
administrators 0x392efb52 → bool
balanceOf 0x70a08231 → uint256
buyPrice 0x8620410b → uint256
calculateEthereumReceived 0x22609373 → uint256
calculateTokensReceived 0x10d0ffdd → uint256
decimals 0x313ce567 → uint8
dividendsOf 0x0065318b → uint256
getDownlineRef 0x2b152e40 → address, uint256
getref 0xe4735104 → address
migratePayoutsToShow 0x097e34a1 → int256
migrateProfitPerShareShow 0xe8beadfd → uint256
myDividends 0x688abbf7 → uint256
myTokens 0x949e8acd → uint256
name 0x06fdde03 → string
onlyAmbassadors 0x27defa1f → bool
referralCount_ 0xe5deb304 → uint256
sellPrice 0x4b750334 → uint256
stakeTokensBalance 0x2fc2a572 → uint256
stakeTokensTime 0x77e79b41 → uint256
stakingRequirement 0x56d399e8 → uint256
symbol 0x95d89b41 → string
totalDeveloperBalance 0x66b3fa60 → uint256
totalEthereumBalance 0x6b2f4632 → uint256
totalSupply 0x18160ddd → uint256
Write Contract 24 functions
These functions modify contract state and require a wallet transaction to execute.
buy 0xf088d547
address _referredBy
returns: uint256
changeStakePercent 0x17ef4e92
uint8 stakePercent
disableInitialStage 0xa8e04f34
No parameters
drainDeveloperFees 0xbf21e388
uint256 _withdrawAmount
exit 0xe9fad8ee
No parameters
migrateDeveloperFee 0x14ec2b0d
uint256 _amount
migrateDownlineRef 0x2bba8b57
address senderAddress
uint256 dataId
address refUserAddress
uint256 refLevel
migrateEth 0x7dc572f3
No parameters
returns: uint256
migratePayoutsTo 0x58e717fd
address senderAddress
int256 _amount
migrateProfitPerShare 0xf402db6d
uint256 _amount
migrateStakeBalanceNTime 0x7468e367
address senderAddress
uint256 _amount
uint256 _time
migrateTenLvlReferral 0xc2150ec4
address _customerAddress
address ref1
address ref2
address ref3
address ref4
address ref5
address ref6
address ref7
address ref8
address ref9
address ref10
migrateTotalSupply 0x7af7d382
uint256 _tokenAmount
migrateXDMDividendNReferralBalance 0xd9a40bb1
address _customerAddress
uint256 dividendBal_
uint256 referralBalanceM_
uint256 _tokenAmount
uint256 referralCountM_
reinvest 0xfdb5a03e
No parameters
releaseStake 0x5c48c1fa
No parameters
returns: bool
sell 0xe4849b32
uint256 _amountOfTokens
setAdministrator 0x89135ae9
bytes32 _identifier
bool _status
setName 0xc47f0027
string _name
setStakingRequirement 0x8328b610
uint256 _amountOfTokens
setSymbol 0xb84c8246
string _symbol
stakeTokens 0x7547c7a3
uint256 _amountOfTokens
returns: bool
transfer 0xa9059cbb
address _toAddress
uint256 _amountOfTokens
returns: bool
withdraw 0x3ccfd60b
No parameters
Recent Transactions
Transaction index is loading. Only unfinalized transactions are shown while the index starts up.