Address Contract Partially Verified
Address
0x0b5dA756938E334c97Ce20715e32a4a8FEa12ba9
Balance
1.3094 ETH
Nonce
1
Code Size
21017 bytes
Creator
0xc3dDc98B...354e at tx 0xa8aa3ce9...d2839d
Indexed Transactions
0
Contract Bytecode
21017 bytes
0x6080604052600436106101c15763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461035f57806306fdde0314610386578063079ce327146104105780630f15f4c01461043057806310f01eba1461044557806311a09ae71461046657806324c33d331461047b5780632660316e146104f25780632ce21999146105215780632e19ebdc14610552578063349cdcac1461056a5780633ccfd60b146105885780633ddd46981461059d57806349cc635d146105f95780635893d48114610623578063624ae5c01461063e5780636306643414610653578063685ffd8314610689578063747dff42146106dc57806382bfc739146107675780638f38f3091461078e5780638f7140ea1461079c578063921dec21146107b757806395d89b411461038657806398a0871d1461080a578063a2bccae914610821578063a65b37a114610862578063c519500e14610870578063c7e284b814610888578063ce89c80c1461089d578063cf808000146108b8578063d53b2679146108d0578063d87574e0146108e5578063de7874f3146108fa578063ed78cf4a14610954578063ee0b5d8b1461095c575b6101c96150f4565b600f5460009060ff16151560011461022d576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015610274576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b34633b9aca008110156102cc576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561031c576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b610325856109b5565b33600090815260066020818152604080842054808552600890925290922001549196509450610358908590600288610c69565b5050505050005b34801561036b57600080fd5b50610374610ea3565b60408051918252519081900360200190f35b34801561039257600080fd5b5061039b610f68565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b5061042e600435602435604435610f9f565b005b34801561043c57600080fd5b5061042e6111ab565b34801561045157600080fd5b50610374600160a060020a03600435166112de565b34801561047257600080fd5b506103746112f0565b34801561048757600080fd5b506104936004356112f6565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b3480156104fe57600080fd5b5061050d600435602435611359565b604080519115158252519081900360200190f35b34801561052d57600080fd5b50610539600435611379565b6040805192835260208301919091528051918290030190f35b34801561055e57600080fd5b50610374600435611392565b34801561057657600080fd5b5061042e6004356024356044356113a4565b34801561059457600080fd5b5061042e61158a565b6040805160206004803580820135601f810184900484028501840190955284845261042e94369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561190b565b34801561060557600080fd5b5061042e600435600160a060020a0360243516604435606435611ac4565b34801561062f57600080fd5b50610374600435602435611cb5565b34801561064a57600080fd5b50610374611cd2565b34801561065f57600080fd5b5061066b600435611cd8565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f810184900484028501840190955284845261042e943694929360249392840191908190840183828082843750949750508435955050505050602001351515611e7e565b3480156106e857600080fd5b506106f1611f5e565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561077357600080fd5b5061042e600160a060020a036004351660243560443561215c565b61042e600435602435612356565b3480156107a857600080fd5b5061042e60043560243561253d565b6040805160206004803580820135601f810184900484028501840190955284845261042e94369492936024939284019190819084018382808284375094975050843595505050505060200135151561261a565b61042e600160a060020a03600435166024356126fa565b34801561082d57600080fd5b5061083c60043560243561290f565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61042e600435602435612941565b34801561087c57600080fd5b50610539600435612b3e565b34801561089457600080fd5b50610374612b57565b3480156108a957600080fd5b50610374600435602435612be6565b3480156108c457600080fd5b50610374600435612c8e565b3480156108dc57600080fd5b5061050d612d40565b3480156108f157600080fd5b50610374612d49565b34801561090657600080fd5b50610912600435612d4f565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61042e612d96565b34801561096857600080fd5b5061097d600160a060020a0360043516612e13565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109bd6150f4565b336000908152600660205260408120549080821515610c6057604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173ba0f428d3cbe8804c4f068ec1a96e2c6b7771f839163e56556a99160248083019260209291908290030181600087803b158015610a4257600080fd5b505af1158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073ba0f428d3cbe8804c4f068ec1a96e2c6b7771f83916382e37b2c916024808201926020929091908290030181600087803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050506040513d6020811015610b0957600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073ba0f428d3cbe8804c4f068ec1a96e2c6b7771f839163e3c08adf916024808201926020929091908290030181600087803b158015610b7c57600080fd5b505af1158015610b90573d6000803e3d6000fd5b505050506040513d6020811015610ba657600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c2f576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c3e5750828114155b15610c585760008381526008602052604090206006018190555b845160010185525b50929392505050565b6005546002546000828152600b602052604090206004015442910181118015610cd457506000828152600b602052604090206002015481111580610cd457506000828152600b602052604090206002015481118015610cd457506000828152600b6020526040902054155b15610cec57610ce7828734888888612ee8565b610e9b565b6000828152600b602052604090206002015481118015610d1e57506000828152600b602052604090206003015460ff16155b15610e66576000828152600b60205260409020600301805460ff19166001179055610d4883613439565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610e88903463ffffffff61381c16565b6000878152600860205260409020600301555b505050505050565b6005546002546000828152600b602052604081206004015490929142910181118015610f1157506000828152600b602052604090206002015481111580610f1157506000828152600b602052604090206002015481118015610f1157506000828152600b6020526040902054155b15610f59576000828152600b6020526040902060050154610f5290670de0b6b3a764000090610f46908263ffffffff61381c16565b9063ffffffff61387d16565b9250610f63565b6544364c5bb00092505b505090565b60408051808201909152600881527f663364756c747261000000000000000000000000000000000000000000000000602082015281565b610fa76150f4565b600f54600090819060ff16151560011461100d576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015611054576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b85633b9aca008110156110ac576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156110fc576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b33600090815260066020526040902054945088158061112b575060008581526008602052604090206001015489145b15611149576000858152600860205260409020600601549350611188565b60008981526007602090815260408083205488845260089092529091206006015490945084146111885760008581526008602052604090206006018490555b611191886138aa565b97506111a085858a8a8a6138cf565b505050505050505050565b600054600160a060020a0316331461120d576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b600f5460ff1615611268576040805160e560020a62461bcd02815260206004820152601c60248201527f464f4d4f2053686f727420616c72656164792061637469766174656400000000604482015290519081900360640190fd5b600f805460ff1916600190811790915560058190556002548154600092909252600b602052429091019081037f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d355610258017f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155565b60066020526000908152604090205481565b60045481565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969860ff90961697949693959294919390928c565b600a60209081526000928352604080842090915290825290205460ff1681565b600d602052600090815260409020805460019091015482565b60076020526000908152604090205481565b6113ac6150f4565b600f5460009060ff161515600114611410576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015611457576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b84633b9aca008110156114af576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156114ff576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b33600090815260066020526040902054935087158061151d57508388145b1561153b576000848152600860205260409020600601549750611568565b60008481526008602052604090206006015488146115685760008481526008602052604090206006018890555b611571876138aa565b965061158084898989896138cf565b5050505050505050565b6000806000806115986150f4565b600f5460ff1615156001146115f9576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015611640576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b60055433600090815260066020908152604080832054848452600b9092529091206002015491985042975095508611801561168d57506000878152600b602052604090206003015460ff16155b80156116a657506000878152600b602052604090205415155b1561184c576000878152600b60205260409020600301805460ff191660011790556116d083613439565b92506116db85613aeb565b9350600084111561172c57600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561172a573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360086000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611902565b61185585613aeb565b935060008411156118a657600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118a4573d6000803e3d6000fd5b505b6000858152600860209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611959576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b6119628b613b72565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073ba0f428d3cbe8804c4f068ec1a96e2c6b7771f839263aa4d490b928a926084808201939182900301818588803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b50505050506040513d6040811015611a1e57600080fd5b508051602091820151600160a060020a03808b1660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b3373ba0f428d3cbe8804c4f068ec1a96e2c6b7771f8314611b55576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600660205260409020548414611b9057600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611bb75760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611c0d576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611c3a5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611c675760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611caf576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600c60209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600b60205260408120600201549091829182919042118015611d1457506000818152600b602052604090206003015460ff16155b8015611d2d57506000818152600b602052604090205415155b15611e4e576000818152600b6020526040902054851415611e12576000818152600b6020526040902060070154611d9b90606490611d7290603063ffffffff61438516565b811515611d7b57fe5b60008881526008602052604090206002015491900463ffffffff61381c16565b6000868152600960209081526040808320858452909152902060020154611df490611dd690611dca89866143fc565b9063ffffffff6144ca16565b6000888152600860205260409020600301549063ffffffff61381c16565b60008781526008602052604090206004015491955093509150611e76565b600085815260086020908152604080832060029081015460098452828520868652909352922090910154611df490611dd690611dca89866143fc565b60008581526008602052604090206002810154600590910154611df490611dd690889061452a565b509193909250565b6000808080808033803b8015611ecc576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b611ed58b613b72565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073ba0f428d3cbe8804c4f068ec1a96e2c6b7771f839263745ea0c1928a926084808201939182900301818588803b1580156119f357600080fd5b60008060008060008060008060008060008060008060006005549050600b60008281526020019081526020016000206009015481600b600084815260200190815260200160002060050154600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060040154600b600087815260200190815260200160002060070154600b600088815260200190815260200160002060000154600a02600b6000898152602001908152602001600020600101540160086000600b60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600b60008c815260200190815260200160002060000154815260200190815260200160002060010154600c60008b8152602001908152602001600020600080815260200190815260200160002054600c60008c815260200190815260200160002060006001815260200190815260200160002054600c60008d815260200190815260200160002060006002815260200190815260200160002054600c60008e8152602001908152602001600020600060038152602001908152602001600020546003546103e802600454019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b6121646150f4565b600f54600090819060ff1615156001146121ca576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015612211576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b85633b9aca00811015612269576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156122b9576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b336000908152600660205260409020549450600160a060020a03891615806122e95750600160a060020a03891633145b15612307576000858152600860205260409020600601549350611188565b600160a060020a038916600090815260066020818152604080842054898552600890925290922001549094508414611188576000858152600860205260409020600601849055611191886138aa565b61235e6150f4565b600f5460009060ff1615156001146123c2576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b8015612409576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b34633b9aca00811015612461576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156124b1576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b6124ba856109b5565b3360009081526006602052604090205490955093508615806124db57508387145b156124f9576000848152600860205260409020600601549650612526565b60008481526008602052604090206006015487146125265760008481526008602052604090206006018790555b61252f866138aa565b955061190284888888610c69565b3373ba0f428d3cbe8804c4f068ec1a96e2c6b7771f83146125ce576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600a6020908152604080832084845290915290205460ff161515612616576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612668576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b6126718b613b72565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073ba0f428d3cbe8804c4f068ec1a96e2c6b7771f839263c0942dfd928a926084808201939182900301818588803b1580156119f357600080fd5b6127026150f4565b600f54600090819060ff161515600114612768576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b80156127af576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b34633b9aca00811015612807576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612857576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b612860866109b5565b336000908152600660205260409020549096509450600160a060020a03881615806128935750600160a060020a03881633145b156128b15760008581526008602052604090206006015493506128f8565b600160a060020a0388166000908152600660208181526040808420548985526008909252909220015490945084146128f85760008581526008602052604090206006018490555b612901876138aa565b965061158085858989610c69565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6129496150f4565b600f54600090819060ff1615156001146129af576040805160e560020a62461bcd028152602060048201526029602482015260008051602061518e833981519152604482015260008051602061514e833981519152606482015290519081900360840190fd5b33803b80156129f6576040805160e560020a62461bcd02815260206004820152601160248201526000805160206151ce833981519152604482015290519081900360640190fd5b34633b9aca00811015612a4e576040805160e560020a62461bcd028152602060048201526021602482015260008051602061516e833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612a9e576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206151ae833981519152604482015290519081900360640190fd5b612aa7866109b5565b336000908152600660205260409020549096509450871580612ad9575060008581526008602052604090206001015488145b15612af75760008581526008602052604090206006015493506128f8565b60008881526007602090815260408083205488845260089092529091206006015490945084146128f8576000858152600860205260409020600601849055612901876138aa565b600e602052600090815260409020805460019091015482565b6005546000818152600b60205260408120600201549091904290811015612bdd576002546000838152600b602052604090206004015401811115612bb7576000828152600b6020526040902060020154610f52908263ffffffff6144ca16565b6002546000838152600b6020526040902060040154610f5291018263ffffffff6144ca16565b60009250610f63565b6002546000838152600b6020526040812060040154909142910181118015612c5057506000848152600b602052604090206002015481111580612c5057506000848152600b602052604090206002015481118015612c5057506000848152600b6020526040902054155b15612c7e576000848152600b6020526040902060060154612c77908463ffffffff61458716565b9150612c87565b612c77836145a8565b5092915050565b6005546002546000828152600b602052604081206004015490929142910181118015612cfc57506000828152600b602052604090206002015481111580612cfc57506000828152600b602052604090206002015481118015612cfc57506000828152600b6020526040902054155b15612d30576000828152600b6020526040902060050154612d29908590610f46908263ffffffff61381c16565b9250612d39565b612d2984614620565b5050919050565b600f5460ff1681565b60035481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600b6020526040902060070154612dbe903463ffffffff61381c16565b6000828152600b6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600554915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612ea990612e8b90869061452a565b6000878152600860205260409020600301549063ffffffff61381c16565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b60008581526009602090815260408083208984529091528120600101548190819081901515612f1e57612f1b898661468d565b94505b60008a8152600b60205260409020600601546802b5e3af16b1880000118015612f78575060008981526009602090815260408083208d84529091529020546714d1120d7b16000090612f76908a63ffffffff61381c16565b115b15612fff5760008981526009602090815260408083208d8452909152902054612fb0906714d1120d7b1600009063ffffffff6144ca16565b9350612fc2888563ffffffff6144ca16565b60008a815260086020526040902060030154909350612fe7908463ffffffff61381c16565b60008a81526008602052604090206003015592965086925b633b9aca0088111561342d5760008a8152600b602052604090206006015461302d908963ffffffff61458716565b9150670de0b6b3a764000082106130a457613048828b6146ec565b60008a8152600b6020526040902054891461306f5760008a8152600b602052604090208990555b60008a8152600b6020526040902060010154861461309c5760008a8152600b602052604090206001018690555b845160640185525b67016345785d8a000088106132e4576004805460010190556130c46147c8565b1515600114156132e457678ac7230489e800008810613165576003546064906130f490604b63ffffffff61438516565b8115156130fd57fe5b60008b8152600860205260409020600201549190049150613124908263ffffffff61381c16565b60008a815260086020526040902060020155600354613149908263ffffffff6144ca16565b60035584516d0eca8847c4129106ce83000000000185526132b9565b670de0b6b3a764000088101580156131845750678ac7230489e8000088105b15613211576003546064906131a090603263ffffffff61438516565b8115156131a957fe5b60008b81526008602052604090206002015491900491506131d0908263ffffffff61381c16565b60008a8152600860205260409020600201556003546131f5908263ffffffff6144ca16565b60035584516d09dc5ada82b70b59df02000000000185526132b9565b67016345785d8a000088101580156132305750670de0b6b3a764000088105b156132b95760035460649061324c90601963ffffffff61438516565b81151561325557fe5b60008b815260086020526040902060020154919004915061327c908263ffffffff61381c16565b60008a8152600860205260409020600201556003546132a1908263ffffffff6144ca16565b60035584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006004555b60045485516103e890910201855260008981526009602090815260408083208d845290915290206001015461332090839063ffffffff61381c16565b60008a81526009602090815260408083208e8452909152902060018101919091555461334d90899061381c565b60008a81526009602090815260408083208e8452825280832093909355600b9052206005015461338490839063ffffffff61381c16565b60008b8152600b602052604090206005810191909155600601546133af90899063ffffffff61381c16565b60008b8152600b6020908152604080832060060193909355600c8152828220898352905220546133e690899063ffffffff61381c16565b60008b8152600c602090815260408083208a845290915290205561340e8a8a8a8a8a8a6149df565b945061341e8a8a8a89868a614be9565b945061342d89878a8589614d57565b50505050505050505050565b6134416150f4565b6005546000818152600b60205260408120805460018201546007909201549092808080808080606461347a89603063ffffffff61438516565b81151561348357fe5b04965060328860008b8152600e602052604090205491900496506064906134b1908a9063ffffffff61438516565b8115156134ba57fe5b60008b8152600e602052604090206001015491900495506064906134e5908a9063ffffffff61438516565b8115156134ee57fe5b04935061350984611dca87818a818e8e63ffffffff6144ca16565b60008c8152600b602052604090206005015490935061353686670de0b6b3a764000063ffffffff61438516565b81151561353f57fe5b60008d8152600b6020526040902060050154919004925061358d90670de0b6b3a76400009061357590859063ffffffff61438516565b81151561357e57fe5b8791900463ffffffff6144ca16565b905060008111156135bd576135a8858263ffffffff6144ca16565b94506135ba838263ffffffff61381c16565b92505b60008a8152600860205260409020600201546135e090889063ffffffff61381c16565b60008b815260086020526040902060029081019190915561361290613605908661357e565b879063ffffffff61381c16565b60008054604051929850600160a060020a03169188156108fc0291899190818181858888f1935050505015801561364d573d6000803e3d6000fd5b506136646002855b8591900463ffffffff61381c16565b60008c8152600b602052604090206008015490935061368a90839063ffffffff61381c16565b600b60008d815260200190815260200160002060080181905550600b60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506005600081548092919060010191905055508a806001019b505042600b60008d8152602001908152602001600020600401819055506137ed6002546137e16102584261381c90919063ffffffff16565b9063ffffffff61381c16565b60008c8152600b6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b81810182811015613877576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b60006138a361389a613895858563ffffffff6144ca16565b614620565b611dca85614620565b9392505050565b6000808210806138ba5750600382115b156138c7575060026138ca565b50805b919050565b6005546002546000828152600b60205260409020600401544291018111801561393a57506000828152600b60205260409020600201548111158061393a57506000828152600b60205260409020600201548111801561393a57506000828152600b6020526040902054155b156139715761394c84611dca89613aeb565b60008881526008602052604090206003015561396c828886898988612ee8565b611902565b6000828152600b6020526040902060020154811180156139a357506000828152600b602052604090206003015460ff16155b15611902576000828152600b60205260409020600301805460ff191660011790556139cd83613439565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600860205260408120600501548190613b0a908490614ec5565b600083815260086020526040902060048101546003820154600290920154613b3c926137e1919063ffffffff61381c16565b90506000811115613b685760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613b8d5750600084115b1515613c09576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613c1857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613c7f57508460018503815181101515613c5757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613cfb576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613d0a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613e4d57846001815181101515613d4457fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613dc1576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613dd057fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613e4d576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b8382101561431d5784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613e8a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613efe575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613edf57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613f6b578482815181101515613f1157fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613f4257fe5b906020010190600160f860020a031916908160001a905350821515613f6657600192505b614312565b8482815181101515613f7957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480614049575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613fd557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614049575084517f7b000000000000000000000000000000000000000000000000000000000000009086908490811061402a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b806140f3575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061407f57fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156140f3575084517f3a00000000000000000000000000000000000000000000000000000000000000908690849081106140d457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561416f576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561417d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141561425c5784826001018151811015156141b957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415151561425c576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015614308575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061429557fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614308575084517f3900000000000000000000000000000000000000000000000000000000000000908690849081106142e957fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561431257600192505b600190910190613e52565b600183151514614377576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600082151561439657506000613877565b508181028183828115156143a657fe5b0414613877576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60008281526009602090815260408083208484528252808320600190810154600b8085528386206005810154938101548752600e8652938620548787529452600790920154670de0b6b3a7640000936144b993926144ad92909161448491879160649161446e9163ffffffff61438516565b81151561447757fe5b049063ffffffff61438516565b81151561448d57fe5b6000888152600b602052604090206008015491900463ffffffff61381c16565b9063ffffffff61438516565b8115156144c257fe5b049392505050565b600082821115614524576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600b909352908320600801546138a392670de0b6b3a76400009161457191614385565b81151561457a57fe5b049063ffffffff6144ca16565b60006138a3614595846145a8565b611dca6145a8868663ffffffff61381c16565b60006309502f906146106d03b2a1d15167e7c5699bfde00000611dca61460b7a0dac7055469777a6122ee4310dd6c14410500f29048400000000006137e16b01027e72f1f12813088000006144ad8a670de0b6b3a764000063ffffffff61438516565b614f5c565b81151561461957fe5b0492915050565b6000614633670de0b6b3a7640000614faf565b614610600261466661465386670de0b6b3a764000063ffffffff61438516565b65886c8f6730709063ffffffff61438516565b81151561466f57fe5b046137e161467c86614faf565b6304a817c89063ffffffff61438516565b6146956150f4565b600083815260086020526040902060050154156146c9576000838152600860205260409020600501546146c9908490614ec5565b506005805460009384526008602052604090932001919091558051600a01815290565b6000818152600b60205260408120600201544291908211801561471b57506000838152600b6020526040902054155b1561473f57614738826137e16001670de0b6b3a764000088614477565b905061476c565b6000838152600b6020526040902060020154614769906137e16001670de0b6b3a764000088614477565b90505b61477e6104b08363ffffffff61381c16565b81101561479e576000838152600b60205260409020600201819055611caf565b6147b06104b08363ffffffff61381c16565b6000848152600b602052604090206002015550505050565b600080614939436137e142336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106148435780518252601f199092019160209182019101614824565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561487957fe5b046137e1456137e142416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106148f25780518252601f1990920191602091820191016148d3565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561492857fe5b046137e1424463ffffffff61381c16565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106149875780518252601f199092019160209182019101614968565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045490945092506103e89150839050046103e802820310156149d657600191506149db565b600091505b5090565b6149e76150f4565b6064850460328604600080806149fd848661381c565b60008054604051929650600160a060020a031691869181818185875af1925050501515614a2a5760009392505b600a8a0491508a8914158015614a50575060008981526008602052604090206001015415155b15614af057600089815260086020526040902060040154614a7890839063ffffffff61381c16565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101849052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614b03565b614b00838363ffffffff61381c16565b92505b6000888152600d6020526040902060010154614b3690606490614b2d908d9063ffffffff61438516565b81151561365557fe5b92506000831115614bd957506000546002830490600160a060020a03166108fc614b6085846144ca565b6040518115909202916000818181858888f19350505050158015614b88573d6000803e3d6000fd5b5060008c8152600b6020526040902060070154614bab908263ffffffff61381c16565b60008d8152600b602052604090206007015560c0870151614bd390849063ffffffff61381c16565b60c08801525b50949a9950505050505050505050565b614bf16150f4565b6000848152600d6020526040812054819081908190606490614c1a908b9063ffffffff61438516565b811515614c2357fe5b049350606489049250614c418360035461381c90919063ffffffff16565b6003556000888152600d6020526040902060010154614cb290614ca590606490614c72908d9063ffffffff61438516565b811515614c7b57fe5b046064614c8f8d600e63ffffffff61438516565b811515614c9857fe5b049063ffffffff61381c16565b8a9063ffffffff6144ca16565b9850614cc4898563ffffffff6144ca16565b9150614cd28b8b868a614fbb565b90506000811115614cf057614ced848263ffffffff6144ca16565b93505b60008b8152600b6020526040902060070154614d16906137e1848463ffffffff61381c16565b60008c8152600b602052604090206007015560e0860151614d3e90859063ffffffff61381c16565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614ed1838361452a565b90506000811115614f5757600083815260086020526040902060030154614eff90829063ffffffff61381c16565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614f3990829063ffffffff61381c16565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614f6c84600161381c565b811515614f7557fe5b0490508291505b81811015613b6c578091506002614f9e8285811515614f9757fe5b048361381c565b811515614fa757fe5b049050614f7c565b60006138778283614385565b6000848152600b602052604081206005015481908190614fe986670de0b6b3a764000063ffffffff61438516565b811515614ff257fe5b6000898152600b6020526040902060080154919004925061501a90839063ffffffff61381c16565b6000888152600b6020526040902060080155670de0b6b3a7640000615045838663ffffffff61438516565b81151561504e57fe5b60008881526009602090815260408083208c8452825280832060020154600b909252909120600801549290910492506150a1916137e1908490670de0b6b3a764000090614571908a63ffffffff61438516565b60008781526009602090815260408083208b8452825280832060020193909355600b905220600501546150e990670de0b6b3a76400009061357590859063ffffffff61438516565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a723058208e27e8307017a51b05b9ca0c6054f55cdee70313c679c9ff1d3633e1884cacdf0029
Verified Source Code Partial Match
Compiler: v0.4.24+commit.e67f0147
EVM: byzantium
Optimization: Yes (200 runs)
F3Dultra.sol 1929 lines
pragma solidity ^0.4.24;
contract F3Devents {
// fired whenever a player registers a name
event onNewName
(
uint256 indexed playerID,
address indexed playerAddress,
bytes32 indexed playerName,
bool isNewPlayer,
uint256 affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 amountPaid,
uint256 timeStamp
);
// fired at end of buy or reload
event onEndTx
(
uint256 compressedData,
uint256 compressedIDs,
bytes32 playerName,
address playerAddress,
uint256 ethIn,
uint256 keysBought,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount,
uint256 potAmount,
uint256 airDropPot
);
// fired whenever theres a withdraw
event onWithdraw
(
uint256 indexed playerID,
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 timeStamp
);
// fired whenever a withdraw forces end round to be ran
event onWithdrawAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// (fomo3d short only) fired whenever a player tries a buy after round timer
// hit zero, and causes end round to be ran.
event onBuyAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethIn,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// (fomo3d short only) fired whenever a player tries a reload after round timer
// hit zero, and causes end round to be ran.
event onReLoadAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// fired whenever an affiliate is paid
event onAffiliatePayout
(
uint256 indexed affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 indexed roundID,
uint256 indexed buyerID,
uint256 amount,
uint256 timeStamp
);
// received pot swap deposit
event onPotSwapDeposit
(
uint256 roundID,
uint256 amountAddedToPot
);
}
//==============================================================================
// _ _ _ _|_ _ _ __|_ _ _ _|_ _ .
// (_(_)| | | | (_|(_ | _\(/_ | |_||_) .
//====================================|=========================================
contract modularShort is F3Devents {}
contract F3Dultra is modularShort {
using SafeMath for *;
using NameFilter for string;
using F3DKeysCalcShort for uint256;
PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x00ba0f428d3cbe8804c4f068ec1a96e2c6b7771f83);
//==============================================================================
// _ _ _ |`. _ _ _ |_ | _ _ .
// (_(_)| |~|~|(_||_|| (_||_)|(/__\ . (game settings)
//=================_|===========================================================
address private admin = msg.sender;
string constant public name = "f3dultra";
string constant public symbol = "f3dultra";
uint256 private rndExtra_ = 0; // length of the very first ICO
uint256 private rndGap_ = 0; // length of ICO phase, set to 1 year for EOS.
uint256 constant private rndInit_ = 10 minutes; // round timer starts at this
uint256 constant private rndInc_ = 1 seconds; // every full key purchased adds this much to the timer
uint256 constant private rndMax_ = 20 minutes; // max length a round timer can be
uint256 constant private preIcoMax_ = 50000000000000000000; // max ico num
uint256 constant private preIcoPerEth_ = 1500000000000000000; // in ico, per addr eth
//==============================================================================
// _| _ _|_ _ _ _ _|_ _ .
// (_|(_| | (_| _\(/_ | |_||_) . (data used to store game info that changes)
//=============================|================================================
uint256 public airDropPot_; // person who gets the airdrop wins part of this pot
uint256 public airDropTracker_ = 0; // incremented each time a "qualified" tx occurs. used to determine winning air drop
uint256 public rID_; // round id number / total rounds that have happened
//****************
// PLAYER DATA
//****************
mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address
mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name
mapping (uint256 => F3Ddatasets.Player) public plyr_; // (pID => data) player data
mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; // (pID => rID => data) player round data by player id & round id
mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amongst any name you own)
//****************
// ROUND DATA
//****************
mapping (uint256 => F3Ddatasets.Round) public round_; // (rID => data) round data
mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; // (rID => tID => data) eth in per team, by round id and team id
//****************
// TEAM FEE DATA
//****************
mapping (uint256 => F3Ddatasets.TeamFee) public fees_; // (team => fees) fee distribution by team
mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; // (team => fees) pot split distribution by team
//==============================================================================
// _ _ _ __|_ _ __|_ _ _ .
// (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy)
//==============================================================================
constructor()
public
{
// Team allocation structures
// 0 = whales
// 1 = bears
// 2 = sneks
// 3 = bulls
// Team allocation percentages
// (F3D, P3D) + (Pot , Referrals, Community)
// Referrals / Community rewards are mathematically designed to come from the winner's share of the pot.
fees_[0] = F3Ddatasets.TeamFee(22,6); //50% to pot, 10% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
fees_[1] = F3Ddatasets.TeamFee(38,0); //43% to pot, 10% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
fees_[2] = F3Ddatasets.TeamFee(68,8); //35% to pot, 10% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
fees_[3] = F3Ddatasets.TeamFee(52,10); //20% to pot, 10% to aff, 2% to com, 1% to pot swap, 1% to air drop pot
// how to split up the final pot based on which team was picked
// (F3D, P3D)
potSplit_[0] = F3Ddatasets.PotSplit(15,10); //48% to winner, 25% to next round, 2% to com
potSplit_[1] = F3Ddatasets.PotSplit(25,0); //48% to winner, 25% to next round, 2% to com
potSplit_[2] = F3Ddatasets.PotSplit(30,10); //48% to winner, 10% to next round, 2% to com
potSplit_[3] = F3Ddatasets.PotSplit(20,20); //48% to winner, 10% to next round, 2% to com
}
//==============================================================================
// _ _ _ _|. |`. _ _ _ .
// | | |(_)(_||~|~|(/_| _\ . (these are safety checks)
//==============================================================================
/**
* @dev used to make sure no one can interact with contract until it has
* been activated.
*/
modifier isActivated() {
require(activated_ == true, "its not ready yet. check ?eta in discord");
_;
}
/**
* @dev prevents contracts from interacting with fomo3d
*/
modifier isHuman() {
address _addr = msg.sender;
uint256 _codeLength;
assembly {_codeLength := extcodesize(_addr)}
require(_codeLength == 0, "sorry humans only");
_;
}
/**
* @dev sets boundaries for incoming tx
*/
modifier isWithinLimits(uint256 _eth) {
require(_eth >= 1000000000, "pocket lint: not a valid currency");
require(_eth <= 100000000000000000000000, "no vitalik, no");
_;
}
//==============================================================================
// _ |_ |. _ |` _ __|_. _ _ _ .
// |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract)
//====|=========================================================================
/**
* @dev emergency buy uses last stored affiliate ID and team snek
*/
function()
isActivated()
isHuman()
isWithinLimits(msg.value)
public
payable
{
// set up our tx event data and determine if player is new or not
F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
// fetch player id
uint256 _pID = pIDxAddr_[msg.sender];
// buy core
buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
}
/**
* @dev converts all incoming ethereum to keys.
* -functionhash- 0x8f38f309 (using ID for affiliate)
* -functionhash- 0x98a0871d (using address for affiliate)
* -functionhash- 0xa65b37a1 (using name for affiliate)
* @param _affCode the ID/address/name of the player who gets the affiliate fee
* @param _team what team is the player playing for?
*/
function buyXid(uint256 _affCode, uint256 _team)
isActivated()
isHuman()
isWithinLimits(msg.value)
public
payable
{
// set up our tx event data and determine if player is new or not
F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
// fetch player id
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == 0 || _affCode == _pID)
{
// use last stored affiliate code
_affCode = plyr_[_pID].laff;
// if affiliate code was given & its not the same as previously stored
} else if (_affCode != plyr_[_pID].laff) {
// update last affiliate
plyr_[_pID].laff = _affCode;
}
// verify a valid team was selected
_team = verifyTeam(_team);
// buy core
buyCore(_pID, _affCode, _team, _eventData_);
}
function buyXaddr(address _affCode, uint256 _team)
isActivated()
isHuman()
isWithinLimits(msg.value)
public
payable
{
// set up our tx event data and determine if player is new or not
F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
// fetch player id
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
uint256 _affID;
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == address(0) || _affCode == msg.sender)
{
// use last stored affiliate code
_affID = plyr_[_pID].laff;
// if affiliate code was given
} else {
// get affiliate ID from aff Code
_affID = pIDxAddr_[_affCode];
// if affID is not the same as previously stored
if (_affID != plyr_[_pID].laff)
{
// update last affiliate
plyr_[_pID].laff = _affID;
}
}
// verify a valid team was selected
_team = verifyTeam(_team);
// buy core
buyCore(_pID, _affID, _team, _eventData_);
}
function buyXname(bytes32 _affCode, uint256 _team)
isActivated()
isHuman()
isWithinLimits(msg.value)
public
payable
{
// set up our tx event data and determine if player is new or not
F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
// fetch player id
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
uint256 _affID;
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == '' || _affCode == plyr_[_pID].name)
{
// use last stored affiliate code
_affID = plyr_[_pID].laff;
// if affiliate code was given
} else {
// get affiliate ID from aff Code
_affID = pIDxName_[_affCode];
// if affID is not the same as previously stored
if (_affID != plyr_[_pID].laff)
{
// update last affiliate
plyr_[_pID].laff = _affID;
}
}
// verify a valid team was selected
_team = verifyTeam(_team);
// buy core
buyCore(_pID, _affID, _team, _eventData_);
}
/**
* @dev essentially the same as buy, but instead of you sending ether
* from your wallet, it uses your unwithdrawn earnings.
* -functionhash- 0x349cdcac (using ID for affiliate)
* -functionhash- 0x82bfc739 (using address for affiliate)
* -functionhash- 0x079ce327 (using name for affiliate)
* @param _affCode the ID/address/name of the player who gets the affiliate fee
* @param _team what team is the player playing for?
* @param _eth amount of earnings to use (remainder returned to gen vault)
*/
function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth)
isActivated()
isHuman()
isWithinLimits(_eth)
public
{
// set up our tx event data
F3Ddatasets.EventReturns memory _eventData_;
// fetch player ID
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == 0 || _affCode == _pID)
{
// use last stored affiliate code
_affCode = plyr_[_pID].laff;
// if affiliate code was given & its not the same as previously stored
} else if (_affCode != plyr_[_pID].laff) {
// update last affiliate
plyr_[_pID].laff = _affCode;
}
// verify a valid team was selected
_team = verifyTeam(_team);
// reload core
reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
}
function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth)
isActivated()
isHuman()
isWithinLimits(_eth)
public
{
// set up our tx event data
F3Ddatasets.EventReturns memory _eventData_;
// fetch player ID
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
uint256 _affID;
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == address(0) || _affCode == msg.sender)
{
// use last stored affiliate code
_affID = plyr_[_pID].laff;
// if affiliate code was given
} else {
// get affiliate ID from aff Code
_affID = pIDxAddr_[_affCode];
// if affID is not the same as previously stored
if (_affID != plyr_[_pID].laff)
{
// update last affiliate
plyr_[_pID].laff = _affID;
}
}
// verify a valid team was selected
_team = verifyTeam(_team);
// reload core
reLoadCore(_pID, _affID, _team, _eth, _eventData_);
}
function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth)
isActivated()
isHuman()
isWithinLimits(_eth)
public
{
// set up our tx event data
F3Ddatasets.EventReturns memory _eventData_;
// fetch player ID
uint256 _pID = pIDxAddr_[msg.sender];
// manage affiliate residuals
uint256 _affID;
// if no affiliate code was given or player tried to use their own, lolz
if (_affCode == '' || _affCode == plyr_[_pID].name)
{
// use last stored affiliate code
_affID = plyr_[_pID].laff;
// if affiliate code was given
} else {
// get affiliate ID from aff Code
_affID = pIDxName_[_affCode];
// if affID is not the same as previously stored
if (_affID != plyr_[_pID].laff)
{
// update last affiliate
plyr_[_pID].laff = _affID;
}
}
// verify a valid team was selected
_team = verifyTeam(_team);
// reload core
reLoadCore(_pID, _affID, _team, _eth, _eventData_);
}
/**
* @dev withdraws all of your earnings.
* -functionhash- 0x3ccfd60b
*/
function withdraw()
isActivated()
isHuman()
public
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
// fetch player ID
uint256 _pID = pIDxAddr_[msg.sender];
// setup temp var for player eth
uint256 _eth;
// check to see if round has ended and no one has run round end yet
if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
{
// set up our tx event data
F3Ddatasets.EventReturns memory _eventData_;
// end the round (distributes pot)
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
// get their earnings
_eth = withdrawEarnings(_pID);
// gib moni
if (_eth > 0)
plyr_[_pID].addr.transfer(_eth);
// build event data
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
// fire withdraw and distribute event
emit F3Devents.onWithdrawAndDistribute
(
msg.sender,
plyr_[_pID].name,
_eth,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.P3DAmount,
_eventData_.genAmount
);
// in any other situation
} else {
// get their earnings
_eth = withdrawEarnings(_pID);
// gib moni
if (_eth > 0)
plyr_[_pID].addr.transfer(_eth);
// fire withdraw event
emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
}
}
/**
* @dev use these to register names. they are just wrappers that will send the
* registration requests to the PlayerBook contract. So registering here is the
* same as registering there. UI will always display the last name you registered.
* but you will still own all previously registered names to use as affiliate
* links.
* - must pay a registration fee.
* - name must be unique
* - names will be converted to lowercase
* - name cannot start or end with a space
* - cannot have more than 1 space in a row
* - cannot be only numbers
* - cannot start with 0x
* - name must be at least 1 char
* - max length of 32 characters long
* - allowed characters: a-z, 0-9, and space
* -functionhash- 0x921dec21 (using ID for affiliate)
* -functionhash- 0x3ddd4698 (using address for affiliate)
* -functionhash- 0x685ffd83 (using name for affiliate)
* @param _nameString players desired name
* @param _affCode affiliate ID, address, or name of who referred you
* @param _all set to true if you want this to push your info to all games
* (this might cost a lot of gas)
*/
function registerNameXID(string _nameString, uint256 _affCode, bool _all)
isHuman()
public
payable
{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
// fire event
emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
}
function registerNameXaddr(string _nameString, address _affCode, bool _all)
isHuman()
public
payable
{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
// fire event
emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
}
function registerNameXname(string _nameString, bytes32 _affCode, bool _all)
isHuman()
public
payable
{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
// fire event
emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
}
//==============================================================================
// _ _ _|__|_ _ _ _ .
// (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan)
//=====_|=======================================================================
/**
* @dev return the price buyer will pay for next 1 individual key.
* -functionhash- 0x018a25e8
* @return price for next key bought (in wei format)
*/
function getBuyPrice()
public
view
returns(uint256)
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
// are we in a round?
if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
else // rounds over. need price for new round
return ( 75000000000000 ); // init
}
/**
* @dev returns time left. dont spam this, you'll ddos yourself from your node
* provider
* -functionhash- 0xc7e284b8
* @return time left in seconds
*/
function getTimeLeft()
public
view
returns(uint256)
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
if (_now < round_[_rID].end)
if (_now > round_[_rID].strt + rndGap_)
return( (round_[_rID].end).sub(_now) );
else
return( (round_[_rID].strt + rndGap_).sub(_now) );
else
return(0);
}
/**
* @dev returns player earnings per vaults
* -functionhash- 0x63066434
* @return winnings vault
* @return general vault
* @return affiliate vault
*/
function getPlayerVaults(uint256 _pID)
public
view
returns(uint256 ,uint256, uint256)
{
// setup local rID
uint256 _rID = rID_;
// if round has ended. but round end has not been run (so contract has not distributed winnings)
if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
{
// if player is winner
if (round_[_rID].plyr == _pID)
{
return
(
(plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ),
(plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ),
plyr_[_pID].aff
);
// if player is not the winner
} else {
return
(
plyr_[_pID].win,
(plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ),
plyr_[_pID].aff
);
}
// if round is still going on, or round has ended and round end has been ran
} else {
return
(
plyr_[_pID].win,
(plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
plyr_[_pID].aff
);
}
}
/**
* solidity hates stack limits. this lets us avoid that hate
*/
function getPlayerVaultsHelper(uint256 _pID, uint256 _rID)
private
view
returns(uint256)
{
return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) );
}
/**
* @dev returns all current round info needed for front end
* -functionhash- 0x747dff42
* @return eth invested during ICO phase
* @return round id
* @return total keys for round
* @return time round ends
* @return time round started
* @return current pot
* @return current team ID & player ID in lead
* @return current player in leads address
* @return current player in leads name
* @return whales eth in for round
* @return bears eth in for round
* @return sneks eth in for round
* @return bulls eth in for round
* @return airdrop tracker # & airdrop pot
*/
function getCurrentRoundInfo()
public
view
returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256)
{
// setup local rID
uint256 _rID = rID_;
return
(
round_[_rID].ico, //0
_rID, //1
round_[_rID].keys, //2
round_[_rID].end, //3
round_[_rID].strt, //4
round_[_rID].pot, //5
(round_[_rID].team + (round_[_rID].plyr * 10)), //6
plyr_[round_[_rID].plyr].addr, //7
plyr_[round_[_rID].plyr].name, //8
rndTmEth_[_rID][0], //9
rndTmEth_[_rID][1], //10
rndTmEth_[_rID][2], //11
rndTmEth_[_rID][3], //12
airDropTracker_ + (airDropPot_ * 1000) //13
);
}
/**
* @dev returns player info based on address. if no address is given, it will
* use msg.sender
* -functionhash- 0xee0b5d8b
* @param _addr address of the player you want to lookup
* @return player ID
* @return player name
* @return keys owned (current round)
* @return winnings vault
* @return general vault
* @return affiliate vault
* @return player round eth
*/
function getPlayerInfoByAddress(address _addr)
public
view
returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256)
{
// setup local rID
uint256 _rID = rID_;
if (_addr == address(0))
{
_addr == msg.sender;
}
uint256 _pID = pIDxAddr_[_addr];
return
(
_pID, //0
plyr_[_pID].name, //1
plyrRnds_[_pID][_rID].keys, //2
plyr_[_pID].win, //3
(plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), //4
plyr_[_pID].aff, //5
plyrRnds_[_pID][_rID].eth //6
);
}
//==============================================================================
// _ _ _ _ | _ _ . _ .
// (_(_)| (/_ |(_)(_||(_ . (this + tools + calcs + modules = our softwares engine)
//=====================_|=======================================================
/**
* @dev logic runs whenever a buy order is executed. determines how to handle
* incoming eth depending on if we are in an active round or not
*/
function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
private
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
// if round is active
if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
{
// call core
core(_rID, _pID, msg.value, _affID, _team, _eventData_);
// if round is not active
} else {
// check to see if end round needs to be ran
if (_now > round_[_rID].end && round_[_rID].ended == false)
{
// end the round (distributes pot) & start new round
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
// build event data
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
// fire buy and distribute event
emit F3Devents.onBuyAndDistribute
(
msg.sender,
plyr_[_pID].name,
msg.value,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.P3DAmount,
_eventData_.genAmount
);
}
// put eth in players vault
plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
}
}
/**
* @dev logic runs whenever a reload order is executed. determines how to handle
* incoming eth depending on if we are in an active round or not
*/
function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_)
private
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
// if round is active
if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
{
// get earnings from all vaults and return unused to gen vault
// because we use a custom safemath library. this will throw if player
// tried to spend more eth than they have.
plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);
// call core
core(_rID, _pID, _eth, _affID, _team, _eventData_);
// if round is not active and end round needs to be ran
} else if (_now > round_[_rID].end && round_[_rID].ended == false) {
// end the round (distributes pot) & start new round
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
// build event data
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
// fire buy and distribute event
emit F3Devents.onReLoadAndDistribute
(
msg.sender,
plyr_[_pID].name,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.P3DAmount,
_eventData_.genAmount
);
}
}
/**
* @dev this is the core logic for any buy/reload that happens while a round
* is live.
*/
function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
private
{
// if player is new to round
if (plyrRnds_[_pID][_rID].keys == 0)
_eventData_ = managePlayer(_pID, _eventData_);
// early round eth limiter
if (round_[_rID].eth < preIcoMax_ && plyrRnds_[_pID][_rID].eth.add(_eth) > preIcoPerEth_)
{
uint256 _availableLimit = (preIcoPerEth_).sub(plyrRnds_[_pID][_rID].eth);
uint256 _refund = _eth.sub(_availableLimit);
plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
_eth = _availableLimit;
}
// if eth left is greater than min eth allowed (sorry no pocket lint)
if (_eth > 1000000000)
{
// mint the new keys
uint256 _keys = (round_[_rID].eth).keysRec(_eth);
// if they bought at least 1 whole key
if (_keys >= 1000000000000000000)
{
updateTimer(_keys, _rID);
// set new leaders
if (round_[_rID].plyr != _pID)
round_[_rID].plyr = _pID;
if (round_[_rID].team != _team)
round_[_rID].team = _team;
// set the new leader bool to true
_eventData_.compressedData = _eventData_.compressedData + 100;
}
// manage airdrops
if (_eth >= 100000000000000000)
{
airDropTracker_++;
if (airdrop() == true)
{
// gib muni
uint256 _prize;
if (_eth >= 10000000000000000000)
{
// calculate prize and give it to winner
_prize = ((airDropPot_).mul(75)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
// adjust airDropPot
airDropPot_ = (airDropPot_).sub(_prize);
// let event know a tier 3 prize was won
_eventData_.compressedData += 300000000000000000000000000000000;
} else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) {
// calculate prize and give it to winner
_prize = ((airDropPot_).mul(50)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
// adjust airDropPot
airDropPot_ = (airDropPot_).sub(_prize);
// let event know a tier 2 prize was won
_eventData_.compressedData += 200000000000000000000000000000000;
} else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) {
// calculate prize and give it to winner
_prize = ((airDropPot_).mul(25)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
// adjust airDropPot
airDropPot_ = (airDropPot_).sub(_prize);
// let event know a tier 3 prize was won
_eventData_.compressedData += 300000000000000000000000000000000;
}
// set airdrop happened bool to true
_eventData_.compressedData += 10000000000000000000000000000000;
// let event know how much was won
_eventData_.compressedData += _prize * 1000000000000000000000000000000000;
// reset air drop tracker
airDropTracker_ = 0;
}
}
// store the air drop tracker number (number of buys since last airdrop)
_eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000);
// update player
plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);
// update round
round_[_rID].keys = _keys.add(round_[_rID].keys);
round_[_rID].eth = _eth.add(round_[_rID].eth);
rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]);
// distribute eth
_eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_);
_eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_);
// call end tx function to fire end tx event.
endTx(_pID, _team, _eth, _keys, _eventData_);
}
}
//==============================================================================
// _ _ | _ | _ _|_ _ _ _ .
// (_(_||(_|_||(_| | (_)| _\ .
//==============================================================================
/**
* @dev calculates unmasked earnings (just calculates, does not update mask)
* @return earnings in wei format
*/
function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast)
private
view
returns(uint256)
{
return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) );
}
/**
* @dev returns the amount of keys you would get given an amount of eth.
* -functionhash- 0xce89c80c
* @param _rID round ID you want price for
* @param _eth amount of eth sent in
* @return keys received
*/
function calcKeysReceived(uint256 _rID, uint256 _eth)
public
view
returns(uint256)
{
// grab time
uint256 _now = now;
// are we in a round?
if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].eth).keysRec(_eth) );
else // rounds over. need keys for new round
return ( (_eth).keys() );
}
/**
* @dev returns current eth price for X keys.
* -functionhash- 0xcf808000
* @param _keys number of keys desired (in 18 decimal format)
* @return amount of eth needed to send
*/
function iWantXKeys(uint256 _keys)
public
view
returns(uint256)
{
// setup local rID
uint256 _rID = rID_;
// grab time
uint256 _now = now;
// are we in a round?
if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
else // rounds over. need price for new round
return ( (_keys).eth() );
}
//==============================================================================
// _|_ _ _ | _ .
// | (_)(_)|_\ .
//==============================================================================
/**
* @dev receives name/player info from names contract
*/
function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff)
external
{
require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
if (pIDxAddr_[_addr] != _pID)
pIDxAddr_[_addr] = _pID;
if (pIDxName_[_name] != _pID)
pIDxName_[_name] = _pID;
if (plyr_[_pID].addr != _addr)
plyr_[_pID].addr = _addr;
if (plyr_[_pID].name != _name)
plyr_[_pID].name = _name;
if (plyr_[_pID].laff != _laff)
plyr_[_pID].laff = _laff;
if (plyrNames_[_pID][_name] == false)
plyrNames_[_pID][_name] = true;
}
/**
* @dev receives entire player name list
*/
function receivePlayerNameList(uint256 _pID, bytes32 _name)
external
{
require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
if(plyrNames_[_pID][_name] == false)
plyrNames_[_pID][_name] = true;
}
/**
* @dev gets existing or registers new pID. use this when a player may be new
* @return pID
*/
function determinePID(F3Ddatasets.EventReturns memory _eventData_)
private
returns (F3Ddatasets.EventReturns)
{
uint256 _pID = pIDxAddr_[msg.sender];
// if player is new to this version of fomo3d
if (_pID == 0)
{
// grab their player ID, name and last aff ID, from player names contract
_pID = PlayerBook.getPlayerID(msg.sender);
bytes32 _name = PlayerBook.getPlayerName(_pID);
uint256 _laff = PlayerBook.getPlayerLAff(_pID);
// set up player account
pIDxAddr_[msg.sender] = _pID;
plyr_[_pID].addr = msg.sender;
if (_name != "")
{
pIDxName_[_name] = _pID;
plyr_[_pID].name = _name;
plyrNames_[_pID][_name] = true;
}
if (_laff != 0 && _laff != _pID)
plyr_[_pID].laff = _laff;
// set the new player bool to true
_eventData_.compressedData = _eventData_.compressedData + 1;
}
return (_eventData_);
}
/**
* @dev checks to make sure user picked a valid team. if not sets team
* to default (sneks)
*/
function verifyTeam(uint256 _team)
private
pure
returns (uint256)
{
if (_team < 0 || _team > 3)
return(2);
else
return(_team);
}
/**
* @dev decides if round end needs to be run & new round started. and if
* player unmasked earnings from previously played rounds need to be moved.
*/
function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_)
private
returns (F3Ddatasets.EventReturns)
{
// if player has played a previous round, move their unmasked earnings
// from that round to gen vault.
if (plyr_[_pID].lrnd != 0)
updateGenVault(_pID, plyr_[_pID].lrnd);
// update player's last round played
plyr_[_pID].lrnd = rID_;
// set the joined round bool to true
_eventData_.compressedData = _eventData_.compressedData + 10;
return(_eventData_);
}
/**
* @dev ends the round. manages paying out winner/splitting up pot
*/
function endRound(F3Ddatasets.EventReturns memory _eventData_)
private
returns (F3Ddatasets.EventReturns)
{
// setup local rID
uint256 _rID = rID_;
// grab our winning player and team id's
uint256 _winPID = round_[_rID].plyr;
uint256 _winTID = round_[_rID].team;
// grab our pot amount
uint256 _pot = round_[_rID].pot;
// calculate our winner share, community rewards, gen share,
// p3d share, and amount reserved for next pot
uint256 _win = (_pot.mul(48)) / 100;
uint256 _com = (_pot / 50);
uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100;
uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d);
// calculate ppt for round mask
uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000);
if (_dust > 0)
{
_gen = _gen.sub(_dust);
_res = _res.add(_dust);
}
// pay our winner
plyr_[_winPID].win = _win.add(plyr_[_winPID].win);
// community rewards
_com = _com.add(_p3d.sub(_p3d / 2));
admin.transfer(_com);
_res = _res.add(_p3d / 2);
// distribute gen portion to key holders
round_[_rID].mask = _ppt.add(round_[_rID].mask);
// prepare event data
_eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000);
_eventData_.winnerAddr = plyr_[_winPID].addr;
_eventData_.winnerName = plyr_[_winPID].name;
_eventData_.amountWon = _win;
_eventData_.genAmount = _gen;
_eventData_.P3DAmount = _p3d;
_eventData_.newPot = _res;
// start next round
rID_++;
_rID++;
round_[_rID].strt = now;
round_[_rID].end = now.add(rndInit_).add(rndGap_);
round_[_rID].pot = _res;
return(_eventData_);
}
/**
* @dev moves any unmasked earnings to gen vault. updates earnings mask
*/
function updateGenVault(uint256 _pID, uint256 _rIDlast)
private
{
uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
if (_earnings > 0)
{
// put in gen vault
plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);
// zero out their earnings by updating mask
plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);
}
}
/**
* @dev updates round timer based on number of whole keys bought.
*/
function updateTimer(uint256 _keys, uint256 _rID)
private
{
// grab time
uint256 _now = now;
// calculate time based on number of keys bought
uint256 _newTime;
if (_now > round_[_rID].end && round_[_rID].plyr == 0)
_newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now);
else
_newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end);
// compare to max and set new end time
if (_newTime < (rndMax_).add(_now))
round_[_rID].end = _newTime;
else
round_[_rID].end = rndMax_.add(_now);
}
/**
* @dev generates a random number between 0-99 and checks to see if thats
* resulted in an airdrop win
* @return do we have a winner?
*/
function airdrop()
private
view
returns(bool)
{
uint256 seed = uint256(keccak256(abi.encodePacked(
(block.timestamp).add
(block.difficulty).add
((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add
(block.gaslimit).add
((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add
(block.number)
)));
if((seed - ((seed / 1000) * 1000)) < airDropTracker_)
return(true);
else
return(false);
}
/**
* @dev distributes eth based on fees to com, aff, and p3d
*/
function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
private
returns(F3Ddatasets.EventReturns)
{
// pay 3% out to community rewards
uint256 _p1 = _eth / 100;
uint256 _com = _eth / 50;
_com = _com.add(_p1);
uint256 _p3d;
if (!address(admin)...
// [truncated — 70422 bytes total]
Read Contract
activated_ 0xd53b2679 → bool
airDropPot_ 0xd87574e0 → uint256
airDropTracker_ 0x11a09ae7 → uint256
calcKeysReceived 0xce89c80c → uint256
fees_ 0x2ce21999 → uint256, uint256
getBuyPrice 0x018a25e8 → uint256
getCurrentRoundInfo 0x747dff42 → uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256
getPlayerInfoByAddress 0xee0b5d8b → uint256, bytes32, uint256, uint256, uint256, uint256, uint256
getPlayerVaults 0x63066434 → uint256, uint256, uint256
getTimeLeft 0xc7e284b8 → uint256
iWantXKeys 0xcf808000 → uint256
name 0x06fdde03 → string
pIDxAddr_ 0x10f01eba → uint256
pIDxName_ 0x2e19ebdc → uint256
plyrNames_ 0x2660316e → bool
plyrRnds_ 0xa2bccae9 → uint256, uint256, uint256, uint256
plyr_ 0xde7874f3 → address, bytes32, uint256, uint256, uint256, uint256, uint256
potSplit_ 0xc519500e → uint256, uint256
rID_ 0x624ae5c0 → uint256
rndTmEth_ 0x5893d481 → uint256
round_ 0x24c33d33 → uint256, uint256, uint256, bool, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256
symbol 0x95d89b41 → string
Write Contract 14 functions
These functions modify contract state and require a wallet transaction to execute.
activate 0x0f15f4c0
No parameters
buyXaddr 0x98a0871d
address _affCode
uint256 _team
buyXid 0x8f38f309
uint256 _affCode
uint256 _team
buyXname 0xa65b37a1
bytes32 _affCode
uint256 _team
potSwap 0xed78cf4a
No parameters
reLoadXaddr 0x82bfc739
address _affCode
uint256 _team
uint256 _eth
reLoadXid 0x349cdcac
uint256 _affCode
uint256 _team
uint256 _eth
reLoadXname 0x079ce327
bytes32 _affCode
uint256 _team
uint256 _eth
receivePlayerInfo 0x49cc635d
uint256 _pID
address _addr
bytes32 _name
uint256 _laff
receivePlayerNameList 0x8f7140ea
uint256 _pID
bytes32 _name
registerNameXID 0x921dec21
string _nameString
uint256 _affCode
bool _all
registerNameXaddr 0x3ddd4698
string _nameString
address _affCode
bool _all
registerNameXname 0x685ffd83
string _nameString
bytes32 _affCode
bool _all
withdraw 0x3ccfd60b
No parameters
Token Balances (1)
View Transfers →Recent Transactions
No transactions found for this address