Address Contract Partially Verified
Address
0x26D76a22859FEc45Da123DbF3e14053a8b5B0831
Balance
0.092327 ETH ($193.11)
Nonce
1
Code Size
21126 bytes
Creator
0x4f574642...a5cF at tx 0xf0dff9ea...aff478
Indexed Transactions
0
Contract Bytecode
21126 bytes
0x6080604052600436106101c15763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461035f57806306fdde0314610386578063079ce327146104105780630f15f4c01461043057806310f01eba1461044557806311a09ae71461046657806324c33d331461047b5780632660316e146104f25780632ce21999146105215780632e19ebdc14610552578063349cdcac1461056a5780633ccfd60b146105885780633ddd46981461059d57806349cc635d146105f95780635893d48114610623578063624ae5c01461063e5780636306643414610653578063685ffd8314610689578063747dff42146106dc57806382bfc739146107675780638f38f3091461078e5780638f7140ea1461079c578063921dec21146107b757806395d89b411461080a57806398a0871d1461081f578063a2bccae914610836578063a65b37a114610877578063c519500e14610885578063c7e284b81461089d578063ce89c80c146108b2578063cf808000146108cd578063d53b2679146108e5578063d87574e0146108fa578063de7874f31461090f578063ed78cf4a14610969578063ee0b5d8b14610971575b6101c9615161565b600f5460009060ff16151560011461022d576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b8015610274576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b34633b9aca008110156102cc576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561031c576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b610325856109ca565b33600090815260066020818152604080842054808552600890925290922001549196509450610358908590600288610c7e565b5050505050005b34801561036b57600080fd5b50610374610eb8565b60408051918252519081900360200190f35b34801561039257600080fd5b5061039b610f7d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b5061042e600435602435604435610fb4565b005b34801561043c57600080fd5b5061042e6111c0565b34801561045157600080fd5b50610374600160a060020a03600435166112f3565b34801561047257600080fd5b50610374611305565b34801561048757600080fd5b5061049360043561130b565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b3480156104fe57600080fd5b5061050d60043560243561136e565b604080519115158252519081900360200190f35b34801561052d57600080fd5b5061053960043561138e565b6040805192835260208301919091528051918290030190f35b34801561055e57600080fd5b506103746004356113a7565b34801561057657600080fd5b5061042e6004356024356044356113b9565b34801561059457600080fd5b5061042e61159f565b6040805160206004803580820135601f810184900484028501840190955284845261042e94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611920565b34801561060557600080fd5b5061042e600435600160a060020a0360243516604435606435611ad9565b34801561062f57600080fd5b50610374600435602435611cca565b34801561064a57600080fd5b50610374611ce7565b34801561065f57600080fd5b5061066b600435611ced565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f810184900484028501840190955284845261042e943694929360249392840191908190840183828082843750949750508435955050505050602001351515611e93565b3480156106e857600080fd5b506106f1611f73565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561077357600080fd5b5061042e600160a060020a0360043516602435604435612171565b61042e60043560243561236b565b3480156107a857600080fd5b5061042e600435602435612552565b6040805160206004803580820135601f810184900484028501840190955284845261042e94369492936024939284019190819084018382808284375094975050843595505050505060200135151561262f565b34801561081657600080fd5b5061039b61270f565b61042e600160a060020a0360043516602435612746565b34801561084257600080fd5b5061085160043560243561295b565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61042e60043560243561298d565b34801561089157600080fd5b50610539600435612b8a565b3480156108a957600080fd5b50610374612ba3565b3480156108be57600080fd5b50610374600435602435612c32565b3480156108d957600080fd5b50610374600435612cda565b3480156108f157600080fd5b5061050d612d8c565b34801561090657600080fd5b50610374612d95565b34801561091b57600080fd5b50610927600435612d9b565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61042e612de2565b34801561097d57600080fd5b50610992600160a060020a0360043516612e5f565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109d2615161565b336000908152600660205260408120549080821515610c7557604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051735a3e43ba22d1590c21ecb364f8fb46c17d6833649163e56556a99160248083019260209291908290030181600087803b158015610a5757600080fd5b505af1158015610a6b573d6000803e3d6000fd5b505050506040513d6020811015610a8157600080fd5b5051604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018390529051919450735a3e43ba22d1590c21ecb364f8fb46c17d683364916382e37b2c916024808201926020929091908290030181600087803b158015610af457600080fd5b505af1158015610b08573d6000803e3d6000fd5b505050506040513d6020811015610b1e57600080fd5b5051604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018690529051919350735a3e43ba22d1590c21ecb364f8fb46c17d6833649163e3c08adf916024808201926020929091908290030181600087803b158015610b9157600080fd5b505af1158015610ba5573d6000803e3d6000fd5b505050506040513d6020811015610bbb57600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c44576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c535750828114155b15610c6d5760008381526008602052604090206006018190555b845160010185525b50929392505050565b6005546002546000828152600b602052604090206004015442910181118015610ce957506000828152600b602052604090206002015481111580610ce957506000828152600b602052604090206002015481118015610ce957506000828152600b6020526040902054155b15610d0157610cfc828734888888612f34565b610eb0565b6000828152600b602052604090206002015481118015610d3357506000828152600b602052604090206003015460ff16155b15610e7b576000828152600b60205260409020600301805460ff19166001179055610d5d83613485565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610e9d903463ffffffff61388916565b6000878152600860205260409020600301555b505050505050565b6005546002546000828152600b602052604081206004015490929142910181118015610f2657506000828152600b602052604090206002015481111580610f2657506000828152600b602052604090206002015481118015610f2657506000828152600b6020526040902054155b15610f6e576000828152600b6020526040902060050154610f6790670de0b6b3a764000090610f5b908263ffffffff61388916565b9063ffffffff6138ea16565b9250610f78565b6544364c5bb00092505b505090565b60408051808201909152600881527f46756c6c466f6d6f000000000000000000000000000000000000000000000000602082015281565b610fbc615161565b600f54600090819060ff161515600114611022576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b8015611069576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b85633b9aca008110156110c1576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611111576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b336000908152600660205260409020549450881580611140575060008581526008602052604090206001015489145b1561115e57600085815260086020526040902060060154935061119d565b600089815260076020908152604080832054888452600890925290912060060154909450841461119d5760008581526008602052604090206006018490555b6111a688613917565b97506111b585858a8a8a61393c565b505050505050505050565b600054600160a060020a03163314611222576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b600f5460ff161561127d576040805160e560020a62461bcd02815260206004820152601c60248201527f464f4d4f2053686f727420616c72656164792061637469766174656400000000604482015290519081900360640190fd5b600f805460ff1916600190811790915560058190556002548154600092909252600b602052429091019081037f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d355610258017f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155565b60066020526000908152604090205481565b60045481565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969860ff90961697949693959294919390928c565b600a60209081526000928352604080842090915290825290205460ff1681565b600d602052600090815260409020805460019091015482565b60076020526000908152604090205481565b6113c1615161565b600f5460009060ff161515600114611425576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b801561146c576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b84633b9aca008110156114c4576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611514576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b33600090815260066020526040902054935087158061153257508388145b1561155057600084815260086020526040902060060154975061157d565b600084815260086020526040902060060154881461157d5760008481526008602052604090206006018890555b61158687613917565b9650611595848989898961393c565b5050505050505050565b6000806000806115ad615161565b600f5460ff16151560011461160e576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b8015611655576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b60055433600090815260066020908152604080832054848452600b909252909120600201549198504297509550861180156116a257506000878152600b602052604090206003015460ff16155b80156116bb57506000878152600b602052604090205415155b15611861576000878152600b60205260409020600301805460ff191660011790556116e583613485565b92506116f085613b58565b9350600084111561174157600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561173f573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360086000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611917565b61186a85613b58565b935060008411156118bb57600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118b9573d6000803e3d6000fd5b505b6000858152600860209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b801561196e576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b6119778b613bdf565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b509950349850735a3e43ba22d1590c21ecb364f8fb46c17d6833649263aa4d490b928a926084808201939182900301818588803b158015611a0857600080fd5b505af1158015611a1c573d6000803e3d6000fd5b50505050506040513d6040811015611a3357600080fd5b508051602091820151600160a060020a03808b1660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b33735a3e43ba22d1590c21ecb364f8fb46c17d68336414611b6a576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600660205260409020548414611ba557600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611bcc5760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611c22576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611c4f5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611c7c5760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611cc4576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600c60209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600b60205260408120600201549091829182919042118015611d2957506000818152600b602052604090206003015460ff16155b8015611d4257506000818152600b602052604090205415155b15611e63576000818152600b6020526040902054851415611e27576000818152600b6020526040902060070154611db090606490611d8790603063ffffffff6143f216565b811515611d9057fe5b60008881526008602052604090206002015491900463ffffffff61388916565b6000868152600960209081526040808320858452909152902060020154611e0990611deb90611ddf8986614469565b9063ffffffff61453716565b6000888152600860205260409020600301549063ffffffff61388916565b60008781526008602052604090206004015491955093509150611e8b565b600085815260086020908152604080832060029081015460098452828520868652909352922090910154611e0990611deb90611ddf8986614469565b60008581526008602052604090206002810154600590910154611e0990611deb908890614597565b509193909250565b6000808080808033803b8015611ee1576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b611eea8b613bdf565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735a3e43ba22d1590c21ecb364f8fb46c17d6833649263745ea0c1928a926084808201939182900301818588803b158015611a0857600080fd5b60008060008060008060008060008060008060008060006005549050600b60008281526020019081526020016000206009015481600b600084815260200190815260200160002060050154600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060040154600b600087815260200190815260200160002060070154600b600088815260200190815260200160002060000154600a02600b6000898152602001908152602001600020600101540160086000600b60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600b60008c815260200190815260200160002060000154815260200190815260200160002060010154600c60008b8152602001908152602001600020600080815260200190815260200160002054600c60008c815260200190815260200160002060006001815260200190815260200160002054600c60008d815260200190815260200160002060006002815260200190815260200160002054600c60008e8152602001908152602001600020600060038152602001908152602001600020546003546103e802600454019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b612179615161565b600f54600090819060ff1615156001146121df576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b8015612226576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b85633b9aca0081101561227e576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156122ce576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b336000908152600660205260409020549450600160a060020a03891615806122fe5750600160a060020a03891633145b1561231c57600085815260086020526040902060060154935061119d565b600160a060020a03891660009081526006602081815260408084205489855260089092529092200154909450841461119d5760008581526008602052604090206006018490556111a688613917565b612373615161565b600f5460009060ff1615156001146123d7576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b801561241e576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b34633b9aca00811015612476576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156124c6576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b6124cf856109ca565b3360009081526006602052604090205490955093508615806124f057508387145b1561250e57600084815260086020526040902060060154965061253b565b600084815260086020526040902060060154871461253b5760008481526008602052604090206006018790555b61254486613917565b955061191784888888610c7e565b33735a3e43ba22d1590c21ecb364f8fb46c17d683364146125e3576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600a6020908152604080832084845290915290205460ff16151561262b576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b801561267d576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b6126868b613bdf565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735a3e43ba22d1590c21ecb364f8fb46c17d6833649263c0942dfd928a926084808201939182900301818588803b158015611a0857600080fd5b60408051808201909152600481527f46554c4c00000000000000000000000000000000000000000000000000000000602082015281565b61274e615161565b600f54600090819060ff1615156001146127b4576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b80156127fb576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b34633b9aca00811015612853576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156128a3576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b6128ac866109ca565b336000908152600660205260409020549096509450600160a060020a03881615806128df5750600160a060020a03881633145b156128fd576000858152600860205260409020600601549350612944565b600160a060020a0388166000908152600660208181526040808420548985526008909252909220015490945084146129445760008581526008602052604090206006018490555b61294d87613917565b965061159585858989610c7e565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612995615161565b600f54600090819060ff1615156001146129fb576040805160e560020a62461bcd02815260206004820152602960248201526000805160206151fb83398151915260448201526000805160206151bb833981519152606482015290519081900360840190fd5b33803b8015612a42576040805160e560020a62461bcd028152602060048201526011602482015260008051602061523b833981519152604482015290519081900360640190fd5b34633b9aca00811015612a9a576040805160e560020a62461bcd02815260206004820152602160248201526000805160206151db833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612aea576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061521b833981519152604482015290519081900360640190fd5b612af3866109ca565b336000908152600660205260409020549096509450871580612b25575060008581526008602052604090206001015488145b15612b43576000858152600860205260409020600601549350612944565b600088815260076020908152604080832054888452600890925290912060060154909450841461294457600085815260086020526040902060060184905561294d87613917565b600e602052600090815260409020805460019091015482565b6005546000818152600b60205260408120600201549091904290811015612c29576002546000838152600b602052604090206004015401811115612c03576000828152600b6020526040902060020154610f67908263ffffffff61453716565b6002546000838152600b6020526040902060040154610f6791018263ffffffff61453716565b60009250610f78565b6002546000838152600b6020526040812060040154909142910181118015612c9c57506000848152600b602052604090206002015481111580612c9c57506000848152600b602052604090206002015481118015612c9c57506000848152600b6020526040902054155b15612cca576000848152600b6020526040902060060154612cc3908463ffffffff6145f416565b9150612cd3565b612cc383614615565b5092915050565b6005546002546000828152600b602052604081206004015490929142910181118015612d4857506000828152600b602052604090206002015481111580612d4857506000828152600b602052604090206002015481118015612d4857506000828152600b6020526040902054155b15612d7c576000828152600b6020526040902060050154612d75908590610f5b908263ffffffff61388916565b9250612d85565b612d758461468d565b5050919050565b600f5460ff1681565b60035481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600b6020526040902060070154612e0a903463ffffffff61388916565b6000828152600b6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600554915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612ef590612ed7908690614597565b6000878152600860205260409020600301549063ffffffff61388916565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b60008581526009602090815260408083208984529091528120600101548190819081901515612f6a57612f6789866146fa565b94505b60008a8152600b602052604090206006015468056bc75e2d63100000118015612fc4575060008981526009602090815260408083208d8452909152902054670de0b6b3a764000090612fc2908a63ffffffff61388916565b115b1561304b5760008981526009602090815260408083208d8452909152902054612ffc90670de0b6b3a76400009063ffffffff61453716565b935061300e888563ffffffff61453716565b60008a815260086020526040902060030154909350613033908463ffffffff61388916565b60008a81526008602052604090206003015592965086925b633b9aca008811156134795760008a8152600b6020526040902060060154613079908963ffffffff6145f416565b9150670de0b6b3a764000082106130f057613094828b614759565b60008a8152600b602052604090205489146130bb5760008a8152600b602052604090208990555b60008a8152600b602052604090206001015486146130e85760008a8152600b602052604090206001018690555b845160640185525b67016345785d8a0000881061333057600480546001019055613110614835565b15156001141561333057678ac7230489e8000088106131b15760035460649061314090604b63ffffffff6143f216565b81151561314957fe5b60008b8152600860205260409020600201549190049150613170908263ffffffff61388916565b60008a815260086020526040902060020155600354613195908263ffffffff61453716565b60035584516d0eca8847c4129106ce8300000000018552613305565b670de0b6b3a764000088101580156131d05750678ac7230489e8000088105b1561325d576003546064906131ec90603263ffffffff6143f216565b8115156131f557fe5b60008b815260086020526040902060020154919004915061321c908263ffffffff61388916565b60008a815260086020526040902060020155600354613241908263ffffffff61453716565b60035584516d09dc5ada82b70b59df0200000000018552613305565b67016345785d8a0000881015801561327c5750670de0b6b3a764000088105b156133055760035460649061329890601963ffffffff6143f216565b8115156132a157fe5b60008b81526008602052604090206002015491900491506132c8908263ffffffff61388916565b60008a8152600860205260409020600201556003546132ed908263ffffffff61453716565b60035584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001855260006004555b60045485516103e890910201855260008981526009602090815260408083208d845290915290206001015461336c90839063ffffffff61388916565b60008a81526009602090815260408083208e84529091529020600181019190915554613399908990613889565b60008a81526009602090815260408083208e8452825280832093909355600b905220600501546133d090839063ffffffff61388916565b60008b8152600b602052604090206005810191909155600601546133fb90899063ffffffff61388916565b60008b8152600b6020908152604080832060060193909355600c81528282208983529052205461343290899063ffffffff61388916565b60008b8152600c602090815260408083208a845290915290205561345a8a8a8a8a8a8a614a4c565b945061346a8a8a8a89868a614c56565b945061347989878a8589614dc4565b50505050505050505050565b61348d615161565b6005546000818152600b6020526040812080546001820154600790920154909280808080808060646134c689603063ffffffff6143f216565b8115156134cf57fe5b04965060328860008b8152600e602052604090205491900496506064906134fd908a9063ffffffff6143f216565b81151561350657fe5b60008b8152600e60205260409020600101549190049550606490613531908a9063ffffffff6143f216565b81151561353a57fe5b04935061355584611ddf87818a818e8e63ffffffff61453716565b60008c8152600b602052604090206005015490935061358286670de0b6b3a764000063ffffffff6143f216565b81151561358b57fe5b60008d8152600b602052604090206005015491900492506135d990670de0b6b3a7640000906135c190859063ffffffff6143f216565b8115156135ca57fe5b8791900463ffffffff61453716565b90506000811115613609576135f4858263ffffffff61453716565b9450613606838263ffffffff61388916565b92505b60008a81526008602052604090206002015461362c90889063ffffffff61388916565b60008b8152600860205260408082206002019290925580549151600160a060020a039092169188156108fc0291899190818181858888f19350505050158015613679573d6000803e3d6000fd5b50600054600160a060020a03166108fc6136968660028104614537565b6040518115909202916000818181858888f193505050501580156136be573d6000803e3d6000fd5b506136cc8860028604613889565b60008c8152600b602052604090206007810191909155600801546136f790839063ffffffff61388916565b600b60008d815260200190815260200160002060080181905550600b60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506005600081548092919060010191905055508a806001019b505042600b60008d81526020019081526020016000206004018190555061385a60025461384e6102584261388990919063ffffffff16565b9063ffffffff61388916565b60008c8152600b6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b818101828110156138e4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613910613907613902858563ffffffff61453716565b61468d565b611ddf8561468d565b9392505050565b6000808210806139275750600382115b1561393457506002613937565b50805b919050565b6005546002546000828152600b6020526040902060040154429101811180156139a757506000828152600b6020526040902060020154811115806139a757506000828152600b6020526040902060020154811180156139a757506000828152600b6020526040902054155b156139de576139b984611ddf89613b58565b6000888152600860205260409020600301556139d9828886898988612f34565b611917565b6000828152600b602052604090206002015481118015613a1057506000828152600b602052604090206003015460ff16155b15611917576000828152600b60205260409020600301805460ff19166001179055613a3a83613485565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600860205260408120600501548190613b77908490614f32565b600083815260086020526040902060048101546003820154600290920154613ba99261384e919063ffffffff61388916565b90506000811115613bd55760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613bfa5750600084115b1515613c76576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613c8557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613cec57508460018503815181101515613cc457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613d68576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613d7757fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613eba57846001815181101515613db157fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613e2e576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613e3d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613eba576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b8382101561438a5784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613ef757fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613f6b575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613f4c57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613fd8578482815181101515613f7e57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613faf57fe5b906020010190600160f860020a031916908160001a905350821515613fd357600192505b61437f565b8482815181101515613fe657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214806140b6575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061404257fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156140b6575084517f7b000000000000000000000000000000000000000000000000000000000000009086908490811061409757fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614160575084517f2f00000000000000000000000000000000000000000000000000000000000000908690849081106140ec57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614160575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061414157fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15156141dc576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84828151811015156141ea57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156142c957848260010181518110151561422657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156142c9576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015614375575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061430257fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614375575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061435657fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561437f57600192505b600190910190613ebf565b6001831515146143e4576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515614403575060006138e4565b5081810281838281151561441357fe5b04146138e4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60008281526009602090815260408083208484528252808320600190810154600b8085528386206005810154938101548752600e8652938620548787529452600790920154670de0b6b3a764000093614526939261451a9290916144f19187916064916144db9163ffffffff6143f216565b8115156144e457fe5b049063ffffffff6143f216565b8115156144fa57fe5b6000888152600b602052604090206008015491900463ffffffff61388916565b9063ffffffff6143f216565b81151561452f57fe5b049392505050565b600082821115614591576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600b9093529083206008015461391092670de0b6b3a7640000916145de916143f2565b8115156145e757fe5b049063ffffffff61453716565b600061391061460284614615565b611ddf614615868663ffffffff61388916565b60006309502f9061467d6d03b2a1d15167e7c5699bfde00000611ddf6146787a0dac7055469777a6122ee4310dd6c14410500f290484000000000061384e6b01027e72f1f128130880000061451a8a670de0b6b3a764000063ffffffff6143f216565b614fc9565b81151561468657fe5b0492915050565b60006146a0670de0b6b3a764000061501c565b61467d60026146d36146c086670de0b6b3a764000063ffffffff6143f216565b65886c8f6730709063ffffffff6143f216565b8115156146dc57fe5b0461384e6146e98661501c565b6304a817c89063ffffffff6143f216565b614702615161565b6000838152600860205260409020600501541561473657600083815260086020526040902060050154614736908490614f32565b506005805460009384526008602052604090932001919091558051600a01815290565b6000818152600b60205260408120600201544291908211801561478857506000838152600b6020526040902054155b156147ac576147a58261384e6016670de0b6b3a7640000886144e4565b90506147d9565b6000838152600b60205260409020600201546147d69061384e6016670de0b6b3a7640000886144e4565b90505b6147eb6102588363ffffffff61388916565b81101561480b576000838152600b60205260409020600201819055611cc4565b61481d6102588363ffffffff61388916565b6000848152600b602052604090206002015550505050565b6000806149a64361384e42336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106148b05780518252601f199092019160209182019101614891565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156148e657fe5b0461384e4561384e42416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061495f5780518252601f199092019160209182019101614940565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561499557fe5b0461384e424463ffffffff61388916565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106149f45780518252601f1990920191602091820191016149d5565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045490945092506103e89150839050046103e80282031015614a435760019150614a48565b600091505b5090565b614a54615161565b606485046032860460008080614a6a8486613889565b60008054604051929650600160a060020a031691869181818185875af1925050501515614a975760009392505b600a8a0491508a8914158015614abd575060008981526008602052604090206001015415155b15614b5d57600089815260086020526040902060040154614ae590839063ffffffff61388916565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101849052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614b61565b8192505b6000888152600d6020526040902060010154614ba390606490614b8b908d9063ffffffff6143f216565b811515614b9457fe5b8591900463ffffffff61388916565b92506000831115614c4657506000546002830490600160a060020a03166108fc614bcd8584614537565b6040518115909202916000818181858888f19350505050158015614bf5573d6000803e3d6000fd5b5060008c8152600b6020526040902060070154614c18908263ffffffff61388916565b60008d8152600b602052604090206007015560c0870151614c4090849063ffffffff61388916565b60c08801525b50949a9950505050505050505050565b614c5e615161565b6000848152600d6020526040812054819081908190606490614c87908b9063ffffffff6143f216565b811515614c9057fe5b049350606489049250614cae8360035461388990919063ffffffff16565b6003556000888152600d6020526040902060010154614d1f90614d1290606490614cdf908d9063ffffffff6143f216565b811515614ce857fe5b046064614cfc8d600e63ffffffff6143f216565b811515614d0557fe5b049063ffffffff61388916565b8a9063ffffffff61453716565b9850614d31898563ffffffff61453716565b9150614d3f8b8b868a615028565b90506000811115614d5d57614d5a848263ffffffff61453716565b93505b60008b8152600b6020526040902060070154614d839061384e848463ffffffff61388916565b60008c8152600b602052604090206007015560e0860151614dab90859063ffffffff61388916565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614f3e8383614597565b90506000811115614fc457600083815260086020526040902060030154614f6c90829063ffffffff61388916565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614fa690829063ffffffff61388916565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614fd9846001613889565b811515614fe257fe5b0490508291505b81811015613bd957809150600261500b828581151561500457fe5b0483613889565b81151561501457fe5b049050614fe9565b60006138e482836143f2565b6000848152600b60205260408120600501548190819061505686670de0b6b3a764000063ffffffff6143f216565b81151561505f57fe5b6000898152600b6020526040902060080154919004925061508790839063ffffffff61388916565b6000888152600b6020526040902060080155670de0b6b3a76400006150b2838663ffffffff6143f216565b8115156150bb57fe5b60008881526009602090815260408083208c8452825280832060020154600b9092529091206008015492909104925061510e9161384e908490670de0b6b3a7640000906145de908a63ffffffff6143f216565b60008781526009602090815260408083208b8452825280832060020193909355600b9052206005015461515690670de0b6b3a7640000906135c190859063ffffffff6143f216565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820fa6e2fb6d5b809185f7130fe6aa8ad85bc9687384ecf461c165df99f2333e38c0029
Verified Source Code Partial Match
Compiler: v0.4.24+commit.e67f0147
EVM: byzantium
Optimization: Yes (200 runs)
FullFOMO.sol 1919 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 FullFOMO is modularShort {
using SafeMath for *;
using NameFilter for string;
using F3DKeysCalcShort for uint256;
PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x5A3e43Ba22D1590C21ecB364f8fb46c17d683364);
address private admin = msg.sender;
string constant public name = "FullFomo";
string constant public symbol = "FULL";
uint256 private rndExtra_ = 10 minutes; // length of the very first ICO
uint256 private rndGap_ = 10 minutes; // 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_ = 22 seconds; // every full key purchased adds this much to the timer
uint256 constant private rndMax_ = 10 minutes; // max length a round timer can be
//==============================================================================
// _| _ _|_ _ _ _ _|_ _ .
// (_|(_| | (_| _\(/_ | |_||_) . (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(60,0); // NO P3D SHARES, ALL TEAM SETTINGS 'BEARS' DEFAULT
fees_[1] = F3Ddatasets.TeamFee(60,0);
fees_[2] = F3Ddatasets.TeamFee(60,0);
fees_[3] = F3Ddatasets.TeamFee(60,0);
// how to split up the final pot based on which team was picked
// (F3D, P3D)
potSplit_[0] = F3Ddatasets.PotSplit(25,0); //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(25,0); //48% to winner, 25% to next round, 2% to com
potSplit_[3] = F3Ddatasets.PotSplit(25,0); //48% to winner, 25% 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 < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000)
{
uint256 _availableLimit = (1000000000000000000).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
admin.transfer(_com);
admin.transfer(_p3d.sub(_p3d / 2));
round_[_rID].pot = _pot.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).call.value(_com)())
{
// This ensures Team Just cannot influence the outcome of FoMo3D with
// bank migrations by breaking outgoing transactions.
// Something we would never do. But that's not the point.
// We spent 2000$ in eth re-deploying just to patch this, we hold the
// highest belief that everything we create should be trustless.
// Team JUST, The name you shouldn't have to trust.
_p3d = _com;
_com = 0;
}
// distribute share to affiliate
uint256 _aff = _eth / 10;
// decide what to do with affiliate share of fees
// affiliate must not be self, and must have a name registered
if (_affID != _pID && plyr_[_affID].name != '') {
plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
emi...
// [truncated — 69522 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
Recent Transactions
No transactions found for this address