Address Contract Partially Verified
Address
0xD83f623a0a77e09DfC586B831012118Bdf3B4141
Balance
0 ETH
Nonce
1
Code Size
12419 bytes
Creator
0xBCF01832...7Fb1 at tx 0x84af6b73...2cf70c
Indexed Transactions
0
Contract Bytecode
12419 bytes
0x6080604052600436106101bb5760003560e01c8063707bc4b2116100ec578063cd055bb71161008a578063ea1b28e011610064578063ea1b28e0146104d7578063f2fde38b146104ed578063fe6f1b051461050d578063ff1b636d1461052357600080fd5b8063cd055bb714610481578063ce8500df146104a1578063e2bbb158146104b757600080fd5b80638b53ccb3116100c65780638b53ccb314610401578063958e2d3114610421578063b08f205e14610441578063c5b57d8f1461046157600080fd5b8063707bc4b2146103b0578063817b1cd2146103cb57806382bfefc8146103e157600080fd5b8063375b3c0a1161015957806367a8083c1161013357806367a8083c1461032257806368efee2a14610342578063695464e9146103625780636bbfff001461037857600080fd5b8063375b3c0a146102cc5780635fd13a46146102e25780635ffd532d1461030257600080fd5b80632398175c116101955780632398175c1461023e5780632bdd00161461025957806330d66afa14610289578063317d9453146102a957600080fd5b806302f715ce146101c757806307aa56dd146101e95780630c506e961461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e2366004612bc8565b610543565b005b3480156101f557600080fd5b50600c54600d54610204919082565b604080519283526020830191909152015b60405180910390f35b34801561022a57600080fd5b506101e7610239366004612bf9565b610a60565b34801561024a57600080fd5b50600854600954610204919082565b34801561026557600080fd5b50610279610274366004612bf9565b610b00565b6040519015158152602001610215565b34801561029557600080fd5b506101e76102a4366004612c25565b610bdc565b3480156102b557600080fd5b506102be610c28565b604051908152602001610215565b3480156102d857600080fd5b506102be60015481565b3480156102ee57600080fd5b506101e76102fd366004612bc8565b610c9a565b34801561030e57600080fd5b506101e761031d366004612c42565b6110c2565b34801561032e57600080fd5b506101e761033d366004612bc8565b61112b565b34801561034e57600080fd5b506102be61035d366004612bf9565b61115a565b34801561036e57600080fd5b506102be60035481565b34801561038457600080fd5b50600754610398906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156103bc57600080fd5b50600a54600b54610204919082565b3480156103d757600080fd5b506102be60025481565b3480156103ed57600080fd5b50600554610398906001600160a01b031681565b34801561040d57600080fd5b506102be61041c366004612bf9565b611468565b34801561042d57600080fd5b506101e761043c366004612bc8565b61151d565b34801561044d57600080fd5b506102be61045c366004612c6e565b6115b9565b34801561046d57600080fd5b506101e761047c366004612d74565b611635565b34801561048d57600080fd5b506101e761049c366004612bc8565b6121b3565b3480156104ad57600080fd5b506102be60045481565b3480156104c357600080fd5b506101e76104d2366004612e5b565b6121e2565b3480156104e357600080fd5b506102be60005481565b3480156104f957600080fd5b506101e7610508366004612c25565b6126b9565b34801561051957600080fd5b506102be6103e881565b34801561052f57600080fd5b50600654610398906001600160a01b031681565b8060018110158015610556575060038111155b61057b5760405162461bcd60e51b815260040161057290612e7d565b60405180910390fd5b60005460035411156105c85760405162461bcd60e51b815260206004820152601660248201527513585e14dd185ad9481b1a5b5a5d081c995858da195960521b6044820152606401610572565b6105d2338361115a565b6002546105df9190612ebe565b6002556105ec338361115a565b6003546105f99190612ebe565b6003556000610608338461115a565b1115610695576005546007546001600160a01b03918216916323b872dd911630610632338761115a565b6040518463ffffffff1660e01b815260040161065093929190612ed6565b6020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190612efa565b505b81600114156107d257336000908152600e60205260409020546106e85760405162461bcd60e51b815260206004820152600b60248201526a6e6f74207374616b65643160a81b6044820152606401610572565b6106f2338361115a565b336000908152600e602052604090205461070c9190612ebe565b336000908152600e60205260409020819055600854610744916103e89161073291612f1c565b61073c9190612f3b565b600954612705565b336000908152600e60205260409020600481019190915560085490546103e89161076d91612f1c565b6107779190612f3b565b336000908152600e602052604090206003810191909155426005820181905560079091018190556009546107aa91612ebe565b336000908152600e602052604081206006810192909255600282018190556001909101555050565b816002141561090f57336000908152600f60205260409020546108255760405162461bcd60e51b815260206004820152600b60248201526a3737ba1039ba30b5b2b21960a91b6044820152606401610572565b61082f338361115a565b336000908152600f60205260409020546108499190612ebe565b336000908152600f60205260409020819055600a54610881916103e89161086f91612f1c565b6108799190612f3b565b600b54612705565b336000908152600f602052604090206004810191909155600a5490546103e8916108aa91612f1c565b6108b49190612f3b565b336000908152600f60205260409020600381019190915542600582018190556007909101819055600b546108e791612ebe565b336000908152600f602052604081206006810192909255600282018190556001909101555050565b8160031415610a5c57336000908152601060205260409020546109625760405162461bcd60e51b815260206004820152600b60248201526a6e6f74207374616b65643360a81b6044820152606401610572565b3360008181526010602052604081206002015561097f908361115a565b336000908152601060205260409020546109999190612ebe565b336000908152601060205260409020819055600c546109d1916103e8916109bf91612f1c565b6109c99190612f3b565b600d54612705565b3360009081526010602052604090206004810191909155600c5490546103e8916109fa91612f1c565b610a049190612f3b565b336000908152601060205260409020600381019190915542600582018190556007909101819055600d54610a3791612ebe565b3360009081526010602052604081206006810192909255600282018190556001909101555b5050565b6006546001600160a01b03163314610a8a5760405162461bcd60e51b815260040161057290612f5d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afb9190612efa565b505050565b60008160018110158015610b15575060038111155b610b315760405162461bcd60e51b815260040161057290612e7d565b8260011415610b6f576001600160a01b0384166000908152600e6020526040902060060154421115610b665760019150610bd5565b60009150610bd5565b8260021415610ba4576001600160a01b0384166000908152600f6020526040902060060154421115610b665760019150610bd5565b8260031415610bd5576001600160a01b038416600090815260106020526040902060060154421115610b6657600191505b5092915050565b6006546001600160a01b03163314610c065760405162461bcd60e51b815260040161057290612f5d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190612f8a565b905090565b8060018110158015610cad575060038111155b610cc95760405162461bcd60e51b815260040161057290612e7d565b8160011415610e1c57336000908152600e60205260409020600601544211610d275760405162461bcd60e51b8152602060048201526011602482015270151a5b594c481b9bdd081c995858da1959607a1b6044820152606401610572565b600554336000818152600e60205260409081902054905163a9059cbb60e01b8152600481019290925260248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad9190612efa565b50336000908152600e6020526040902054600354610dcb9190612fa3565b600355610dd83383612727565b336000908152600e60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600701555050565b8160021415610f6f57336000908152600f60205260409020600601544211610e7a5760405162461bcd60e51b8152602060048201526011602482015270151a5b594c881b9bdd081c995858da1959607a1b6044820152606401610572565b600554336000818152600f60205260409081902054905163a9059cbb60e01b8152600481019290925260248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f009190612efa565b50336000908152600f6020526040902054600354610f1e9190612fa3565b600355610f2b3383612727565b336000908152600f60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600701555050565b8160031415610a5c57336000908152601060205260409020600601544211610fcd5760405162461bcd60e51b8152602060048201526011602482015270151a5b594cc81b9bdd081c995858da1959607a1b6044820152606401610572565b600554336000818152601060205260409081902054905163a9059cbb60e01b8152600481019290925260248201526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561102f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110539190612efa565b50336000908152601060205260409020546003546110719190612fa3565b60035561107e3383612727565b336000908152601060205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600701555050565b6006546001600160a01b031633146110ec5760405162461bcd60e51b815260040161057290612f5d565b82600114156111015760089190915560095550565b826002141561111657600a91909155600b5550565b8260031415610afb57600c91909155600d5550565b6006546001600160a01b031633146111555760405162461bcd60e51b815260040161057290612f5d565b600055565b6000816001811015801561116f575060038111155b61118b5760405162461bcd60e51b815260040161057290612e7d565b8260011415611286576004546001600160a01b0385166000908152600e60205260408120600501549091906111c09042612fa3565b6111ca9190612f3b565b6001600160a01b0386166000908152600e60205260409020600401546111f09190612f1c565b6001600160a01b0386166000908152600e60205260409020600201549091506112199082612ebe565b6001600160a01b0386166000908152600e60205260409020600181015460039091015491925061124891612fa3565b81111561127f576001600160a01b0385166000908152600e60205260409020600181015460039091015461127c9190612fa3565b90505b9150610bd5565b8260021415611377576004546001600160a01b0385166000908152600f60205260408120600501549091906112bb9042612fa3565b6112c59190612f3b565b6001600160a01b0386166000908152600f60205260409020600401546112eb9190612f1c565b6001600160a01b0386166000908152600f60205260409020600201549091506113149082612ebe565b6001600160a01b0386166000908152600f60205260409020600181015460039091015491925061134391612fa3565b81111561127f576001600160a01b0385166000908152600f60205260409020600181015460039091015461127c9190612fa3565b8260031415610bd5576004546001600160a01b0385166000908152601060205260408120600501549091906113ac9042612fa3565b6113b69190612f3b565b6001600160a01b0386166000908152601060205260409020600401546113dc9190612f1c565b6001600160a01b0386166000908152601060205260409020600201549091506114059082612ebe565b6001600160a01b0386166000908152601060205260409020600181015460039091015491925061143491612fa3565b81111561127f576001600160a01b0385166000908152601060205260409020600181015460039091015461127c9190612fa3565b6000816001811015801561147d575060038111155b6114995760405162461bcd60e51b815260040161057290612e7d565b82600114156114c5576001600160a01b0384166000908152600e60205260409020600701549150610bd5565b82600214156114f1576001600160a01b0384166000908152600f60205260409020600701549150610bd5565b8260031415610bd5576001600160a01b0384166000908152601060205260409020600701549150610bd5565b8060018110158015611530575060038111155b61154c5760405162461bcd60e51b815260040161057290612e7d565b6000611558338461115a565b116115af5760405162461bcd60e51b815260206004820152602160248201527f6e6f20636c61696d61626c6520616d6f756e7420617661696c61626c652079656044820152601d60fa1b6064820152608401610572565b610a5c3383612727565b600082600114156115e357506001600160a01b0381166000908152600e602052604090205461162f565b826002141561160b57506001600160a01b0381166000908152600f602052604090205461162f565b826003141561162f57506001600160a01b0381166000908152601060205260409020545b92915050565b6006546001600160a01b0316331461165f5760405162461bcd60e51b815260040161057290612f5d565b82518251148015611671575080518351145b6116bd5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e756d626572206f6620617267756d656e747300000000006044820152606401610572565b60005b83518110156121ad578281815181106116db576116db612fba565b60200260200101516002546116f09190612ebe565b600255825183908290811061170757611707612fba565b602002602001015160035461171c9190612ebe565b600355835184908290811061173357611733612fba565b602002602001015160011415611ac85761177f82828151811061175857611758612fba565b602002602001015185838151811061177257611772612fba565b602002602001015161115a565b600e600084848151811061179557611795612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600201819055506117f46103e86008600001548584815181106117e2576117e2612fba565b60200260200101516107329190612f1c565b600e600084848151811061180a5761180a612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600401546118409190612ebe565b600e600084848151811061185657611856612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600401819055506103e86008600001548483815181106118a0576118a0612fba565b60200260200101516118b29190612f1c565b6118bc9190612f3b565b600e60008484815181106118d2576118d2612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600301546119089190612ebe565b600e600084848151811061191e5761191e612fba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206003018190555042600e600084848151811061196457611964612fba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206005018190555042600e60008484815181106119aa576119aa612fba565b6020908102919091018101516001600160a01b03168252810191909152604001600020600701556009546119de9042612ebe565b600e60008484815181106119f4576119f4612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060060181905550828181518110611a3557611a35612fba565b6020026020010151600e6000848481518110611a5357611a53612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000154611a899190612ebe565b600e6000848481518110611a9f57611a9f612fba565b6020908102919091018101516001600160a01b031682528101919091526040016000205561219b565b838181518110611ada57611ada612fba565b602002602001015160021415611e1f57611aff82828151811061175857611758612fba565b600f6000848481518110611b1557611b15612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020181905550611b746103e8600a60000154858481518110611b6257611b62612fba565b602002602001015161086f9190612f1c565b600f6000848481518110611b8a57611b8a612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060040154611bc09190612ebe565b600f6000848481518110611bd657611bd6612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600401819055506103e8600a60000154848381518110611c2057611c20612fba565b6020026020010151611c329190612f1c565b611c3c9190612f3b565b600f6000848481518110611c5257611c52612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060030154611c889190612ebe565b600f6000848481518110611c9e57611c9e612fba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206003018190555042600f6000848481518110611ce457611ce4612fba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206005018190555042600f6000848481518110611d2a57611d2a612fba565b6020908102919091018101516001600160a01b0316825281019190915260400160002060070155600b54611d5e9042612ebe565b600f6000848481518110611d7457611d74612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060060181905550828181518110611db557611db5612fba565b6020026020010151600f6000848481518110611dd357611dd3612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000154611e099190612ebe565b600f6000848481518110611a9f57611a9f612fba565b838181518110611e3157611e31612fba565b60200260200101516003141561219b57611e5682828151811061175857611758612fba565b60106000848481518110611e6c57611e6c612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060020181905550611ecb6103e8600c60000154858481518110611eb957611eb9612fba565b60200260200101516109bf9190612f1c565b60106000848481518110611ee157611ee1612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060040154611f179190612ebe565b60106000848481518110611f2d57611f2d612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600401819055506103e8600c60000154848381518110611f7757611f77612fba565b6020026020010151611f899190612f1c565b611f939190612f3b565b60106000848481518110611fa957611fa9612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060030154611fdf9190612ebe565b60106000848481518110611ff557611ff5612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060030181905550426010600084848151811061203b5761203b612fba565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060050181905550426010600084848151811061208157612081612fba565b6020908102919091018101516001600160a01b0316825281019190915260400160002060070155600d546120b59042612ebe565b601060008484815181106120cb576120cb612fba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206006018190555082818151811061210c5761210c612fba565b60200260200101516010600084848151811061212a5761212a612fba565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001546121609190612ebe565b6010600084848151811061217657612176612fba565b6020908102919091018101516001600160a01b03168252810191909152604001600020555b806121a581612fd0565b9150506116c0565b50505050565b6006546001600160a01b031633146121dd5760405162461bcd60e51b815260040161057290612f5d565b600155565b81600181101580156121f5575060038111155b6122115760405162461bcd60e51b815260040161057290612e7d565b600054600354111561225e5760405162461bcd60e51b815260206004820152601660248201527513585e14dd185ad9481b1a5b5a5d081c995858da195960521b6044820152606401610572565b6001548210156122b05760405162461bcd60e51b815260206004820152601860248201527f4465706f736974206d6f7265207468616e2031305f30303000000000000000006044820152606401610572565b6005546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906122e490339030908790600401612ed6565b6020604051808303816000875af1158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123279190612efa565b50816002546123369190612ebe565b600255600354612347908390612ebe565b600355600183141561246f5761235d338461115a565b336000908152600e60205260409020600281019190915554612380908390612ebe565b336000818152600e60205260409020919091556123d5906123a1908561115a565b600854336000908152600e60205260409020546103e8916123c191612f1c565b6123cb9190612f3b565b61073c9190612ebe565b336000908152600e6020526040902060048101919091556002810154600854915490916103e8916124069190612f1c565b6124109190612f3b565b61241a9190612ebe565b336000908152600e6020526040902060038101919091554260058201819055600790910181905560095461244d91612ebe565b336000908152600e602052604081206006810192909255600190910155505050565b826002141561259457612482338461115a565b336000908152600f602052604090206002810191909155546124a5908390612ebe565b336000818152600f60205260409020919091556124fa906124c6908561115a565b600a54336000908152600f60205260409020546103e8916124e691612f1c565b6124f09190612f3b565b6108799190612ebe565b336000908152600f6020526040902060048101919091556002810154600a54915490916103e89161252b9190612f1c565b6125359190612f3b565b61253f9190612ebe565b336000908152600f60205260409020600381019190915542600582018190556007909101819055600b5461257291612ebe565b336000908152600f602052604081206006810192909255600190910155505050565b8260031415610afb576125a7338461115a565b3360009081526010602052604090206002810191909155546125ca908390612ebe565b3360008181526010602052604090209190915561261f906125eb908561115a565b600c54336000908152601060205260409020546103e89161260b91612f1c565b6126159190612f3b565b6109c99190612ebe565b33600090815260106020526040902060048101919091556002810154600c54915490916103e8916126509190612f1c565b61265a9190612f3b565b6126649190612ebe565b336000908152601060205260409020600381019190915542600582018190556007909101819055600d5461269791612ebe565b3360009081526010602052604081206006810192909255600190910155505050565b6006546001600160a01b031633146126e35760405162461bcd60e51b815260040161057290612f5d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600081600454846127169190612f1c565b6127209190612f3b565b9392505050565b806001811015801561273a575060038111155b6127565760405162461bcd60e51b815260040161057290612e7d565b81600114156128d0576001600160a01b0383166000908152600e60205260409020600381015460019091015411156127a05760405162461bcd60e51b815260040161057290612feb565b6001600160a01b0383166000908152600e602052604090206005015442116127da5760405162461bcd60e51b815260040161057290613022565b60006127e6848461115a565b1115612873576005546007546001600160a01b03918216916323b872dd911685612810818761115a565b6040518463ffffffff1660e01b815260040161282e93929190612ed6565b6020604051808303816000875af115801561284d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128719190612efa565b505b61287d838361115a565b6001600160a01b0384166000908152600e60205260409020600101546128a39190612ebe565b6001600160a01b0384166000908152600e6020526040812060018101929092554260058301556002909101555b8160021415612a4a576001600160a01b0383166000908152600f602052604090206003810154600190910154111561291a5760405162461bcd60e51b815260040161057290612feb565b6001600160a01b0383166000908152600f602052604090206005015442116129545760405162461bcd60e51b815260040161057290613022565b6000612960848461115a565b11156129ed576005546007546001600160a01b03918216916323b872dd91168561298a818761115a565b6040518463ffffffff1660e01b81526004016129a893929190612ed6565b6020604051808303816000875af11580156129c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129eb9190612efa565b505b6129f7838361115a565b6001600160a01b0384166000908152600f6020526040902060010154612a1d9190612ebe565b6001600160a01b0384166000908152600f6020526040812060018101929092554260058301556002909101555b8160031415610afb576001600160a01b038316600090815260106020526040902060038101546001909101541115612a945760405162461bcd60e51b815260040161057290612feb565b6001600160a01b0383166000908152601060205260409020600501544211612ace5760405162461bcd60e51b815260040161057290613022565b6000612ada848461115a565b1115612b67576005546007546001600160a01b03918216916323b872dd911685612b04818761115a565b6040518463ffffffff1660e01b8152600401612b2293929190612ed6565b6020604051808303816000875af1158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b659190612efa565b505b612b71838361115a565b6001600160a01b038416600090815260106020526040902060010154612b979190612ebe565b6001600160a01b03841660009081526010602052604081206001810192909255426005830155600290910155505050565b600060208284031215612bda57600080fd5b5035919050565b6001600160a01b0381168114612bf657600080fd5b50565b60008060408385031215612c0c57600080fd5b8235612c1781612be1565b946020939093013593505050565b600060208284031215612c3757600080fd5b813561272081612be1565b600080600060608486031215612c5757600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612c8157600080fd5b823591506020830135612c9381612be1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cdd57612cdd612c9e565b604052919050565b600067ffffffffffffffff821115612cff57612cff612c9e565b5060051b60200190565b600082601f830112612d1a57600080fd5b81356020612d2f612d2a83612ce5565b612cb4565b82815260059290921b84018101918181019086841115612d4e57600080fd5b8286015b84811015612d695780358352918301918301612d52565b509695505050505050565b600080600060608486031215612d8957600080fd5b833567ffffffffffffffff80821115612da157600080fd5b612dad87838801612d09565b9450602091508186013581811115612dc457600080fd5b612dd088828901612d09565b945050604086013581811115612de557600080fd5b86019050601f81018713612df857600080fd5b8035612e06612d2a82612ce5565b81815260059190911b82018301908381019089831115612e2557600080fd5b928401925b82841015612e4c578335612e3d81612be1565b82529284019290840190612e2a565b80955050505050509250925092565b60008060408385031215612e6e57600080fd5b50508035926020909101359150565b602080825260119082015270125b9d985b1a590819195c1bdcda5d1259607a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612ed157612ed1612ea8565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215612f0c57600080fd5b8151801515811461272057600080fd5b6000816000190483118215151615612f3657612f36612ea8565b500290565b600082612f5857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526013908201527229ba30b5b29d102737ba1030b71020b236b4b760691b604082015260600190565b600060208284031215612f9c57600080fd5b5051919050565b600082821015612fb557612fb5612ea8565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612fe457612fe4612ea8565b5060010190565b6020808252601e908201527f6e6f20636c61696d61626c6520616d6f756e7420617661696c61626c65330000604082015260600190565b60208082526011908201527074696d65206e6f7420726561636865643360781b60408201526060019056fea264697066735822122060a8d8e67a4a8b7d99992a415853d0aab55c7d3233901ffb177aee0f4b8ada0b64736f6c634300080a0033
Verified Source Code Partial Match
Compiler: v0.8.10+commit.fc410830
EVM: london
Optimization: Yes (200 runs)
LifeStake.sol 601 lines
pragma solidity ^0.8.10;
// SPDX-License-Identifier: MIT
contract LifeStake {
//constant
uint256 public constant percentDivider = 1_000;
uint256 public maxStake = 2_500_000_000;
uint256 public minStake = 10_000;
uint256 public totalStaked;
uint256 public currentStaked;
uint256 public TimeStep = 1 days;
//address
IERC20 public TOKEN;
address payable public Admin;
address payable public RewardAddress;
// structures
struct Stake {
uint256 StakePercent;
uint256 StakePeriod;
}
struct Staker {
uint256 Amount;
uint256 Claimed;
uint256 Claimable;
uint256 MaxClaimable;
uint256 TokenPerDay;
uint256 LastClaimTime;
uint256 UnStakeTime;
uint256 StakeTime;
}
Stake public StakeI;
Stake public StakeII;
Stake public StakeIII;
// mapping & array
mapping(address => Staker) private PlanI;
mapping(address => Staker) private PlanII;
mapping(address => Staker) private PlanIII;
modifier onlyAdmin() {
require(msg.sender == Admin, "Stake: Not an Admin");
_;
}
modifier validDepositId(uint256 _depositId) {
require(_depositId >= 1 && _depositId <= 3, "Invalid depositId");
_;
}
constructor(address _TOKEN) {
Admin = payable(msg.sender);
RewardAddress = payable(msg.sender);
TOKEN = IERC20(_TOKEN);
StakeI.StakePercent = 25;
StakeI.StakePeriod = 30 days;
StakeII.StakePercent = 175;
StakeII.StakePeriod = 180 days;
StakeIII.StakePercent = 390;
StakeIII.StakePeriod = 360 days;
maxStake = maxStake * (10**TOKEN.decimals());
minStake = minStake * (10**TOKEN.decimals());
}
receive() external payable {}
// to buy token during Stake time => for web3 use
function deposit(uint256 _depositId, uint256 _amount)
public
validDepositId(_depositId)
{
require(currentStaked <= maxStake, "MaxStake limit reached");
require(_amount >= minStake, "Deposit more than 10_000");
TOKEN.transferFrom(msg.sender, address(this), _amount);
totalStaked = totalStaked + (_amount);
currentStaked = currentStaked + (_amount);
if (_depositId == 1) {
PlanI[msg.sender].Claimable = calcRewards(msg.sender, _depositId);
PlanI[msg.sender].Amount = PlanI[msg.sender].Amount + (_amount);
PlanI[msg.sender].TokenPerDay = (
CalculatePerDay(
(((PlanI[msg.sender].Amount * (StakeI.StakePercent)) /
(percentDivider)) ) + calcRewards(msg.sender, _depositId),
StakeI.StakePeriod
)
);
PlanI[msg.sender].MaxClaimable =
((PlanI[msg.sender].Amount * (StakeI.StakePercent)) /
(percentDivider)) +
PlanI[msg.sender].Claimable;
PlanI[msg.sender].LastClaimTime = block.timestamp;
PlanI[msg.sender].StakeTime = block.timestamp;
PlanI[msg.sender].UnStakeTime =
block.timestamp +
(StakeI.StakePeriod);
PlanI[msg.sender].Claimed = 0;
} else if (_depositId == 2) {
PlanII[msg.sender].Claimable = calcRewards(msg.sender, _depositId);
PlanII[msg.sender].Amount = PlanII[msg.sender].Amount + (_amount);
PlanII[msg.sender].TokenPerDay = (
CalculatePerDay(
(((PlanII[msg.sender].Amount * (StakeII.StakePercent)) /
(percentDivider)) + calcRewards(msg.sender, _depositId)),
StakeII.StakePeriod
)
);
PlanII[msg.sender].MaxClaimable =
((PlanII[msg.sender].Amount * (StakeII.StakePercent)) /
(percentDivider)) +
PlanII[msg.sender].Claimable;
PlanII[msg.sender].LastClaimTime = block.timestamp;
PlanII[msg.sender].StakeTime = block.timestamp;
PlanII[msg.sender].UnStakeTime =
block.timestamp +
(StakeII.StakePeriod);
PlanII[msg.sender].Claimed = 0;
} else if (_depositId == 3) {
PlanIII[msg.sender].Claimable = calcRewards(msg.sender, _depositId);
PlanIII[msg.sender].Amount = PlanIII[msg.sender].Amount + (_amount);
PlanIII[msg.sender].TokenPerDay = (
CalculatePerDay(
(((PlanIII[msg.sender].Amount * (StakeIII.StakePercent)) /
(percentDivider)) ) + calcRewards(msg.sender, _depositId),
StakeIII.StakePeriod
)
);
PlanIII[msg.sender].MaxClaimable =
((PlanIII[msg.sender].Amount * (StakeIII.StakePercent)) /
(percentDivider)) +
PlanIII[msg.sender].Claimable;
PlanIII[msg.sender].LastClaimTime = block.timestamp;
PlanIII[msg.sender].StakeTime = block.timestamp;
PlanIII[msg.sender].UnStakeTime =
block.timestamp +
(StakeIII.StakePeriod);
PlanIII[msg.sender].Claimed = 0;
}
}
function extendLockup(uint256 _depositId)
public
validDepositId(_depositId)
{
require(currentStaked <= maxStake, "MaxStake limit reached");
totalStaked = totalStaked + (calcRewards(msg.sender, _depositId));
currentStaked = currentStaked + (calcRewards(msg.sender, _depositId));
if(calcRewards(msg.sender, _depositId) > 0)
{
TOKEN.transferFrom(RewardAddress, address(this),calcRewards(msg.sender, _depositId) );
}
if (_depositId == 1) {
require(PlanI[msg.sender].Amount > 0, "not staked1");
PlanI[msg.sender].Amount = PlanI[msg.sender].Amount + (calcRewards(msg.sender, _depositId));
PlanI[msg.sender].TokenPerDay = (
CalculatePerDay(
((PlanI[msg.sender].Amount * (StakeI.StakePercent)) /
(percentDivider)),
StakeI.StakePeriod
)
);
PlanI[msg.sender].MaxClaimable =
((PlanI[msg.sender].Amount * (StakeI.StakePercent)) /
(percentDivider)) ;
PlanI[msg.sender].LastClaimTime = block.timestamp;
PlanI[msg.sender].StakeTime = block.timestamp;
PlanI[msg.sender].UnStakeTime =
block.timestamp +
(StakeI.StakePeriod);
PlanI[msg.sender].Claimable = 0;
PlanI[msg.sender].Claimed = 0;
} else if (_depositId == 2) {
require(PlanII[msg.sender].Amount > 0, "not staked2");
PlanII[msg.sender].Amount = PlanII[msg.sender].Amount + (calcRewards(msg.sender, _depositId));
PlanII[msg.sender].TokenPerDay = (
CalculatePerDay(
((PlanII[msg.sender].Amount * (StakeII.StakePercent)) /
(percentDivider)),
StakeII.StakePeriod
)
);
PlanII[msg.sender].MaxClaimable =
((PlanII[msg.sender].Amount * (StakeII.StakePercent)) /
(percentDivider)) ;
PlanII[msg.sender].LastClaimTime = block.timestamp;
PlanII[msg.sender].StakeTime = block.timestamp;
PlanII[msg.sender].UnStakeTime =
block.timestamp +
(StakeII.StakePeriod);
PlanII[msg.sender].Claimable = 0;
PlanII[msg.sender].Claimed = 0;
} else if (_depositId == 3) {
require(PlanIII[msg.sender].Amount > 0, "not staked3");
PlanIII[msg.sender].Claimable = 0;
PlanIII[msg.sender].Amount = PlanIII[msg.sender].Amount + (calcRewards(msg.sender, _depositId));
PlanIII[msg.sender].TokenPerDay = (
CalculatePerDay(
((PlanIII[msg.sender].Amount * (StakeIII.StakePercent)) /
(percentDivider)),
StakeIII.StakePeriod
)
);
PlanIII[msg.sender].MaxClaimable =
((PlanIII[msg.sender].Amount * (StakeIII.StakePercent)) /
(percentDivider)) ;
PlanIII[msg.sender].LastClaimTime = block.timestamp;
PlanIII[msg.sender].StakeTime = block.timestamp;
PlanIII[msg.sender].UnStakeTime =
block.timestamp +
(StakeIII.StakePeriod);
PlanIII[msg.sender].Claimable = 0;
PlanIII[msg.sender].Claimed = 0;
}
}
function withdrawAll(uint256 _depositId)
external
validDepositId(_depositId)
{
require(calcRewards(msg.sender,_depositId) > 0,"no claimable amount available yet");
_withdraw(msg.sender, _depositId);
}
function _withdraw(address _user, uint256 _depositId)
internal
validDepositId(_depositId)
{
if (_depositId == 1) {
require(PlanI[_user].Claimed <= PlanI[_user].MaxClaimable,"no claimable amount available3");
require(block.timestamp > PlanI[_user].LastClaimTime,"time not reached3");
if (calcRewards(_user, _depositId) > 0) {
TOKEN.transferFrom(RewardAddress, _user, calcRewards(_user, _depositId));
}
PlanI[_user].Claimed = PlanI[_user].Claimed + (calcRewards(_user, _depositId));
PlanI[_user].LastClaimTime = block.timestamp;
PlanI[_user].Claimable = 0;
}
if (_depositId == 2) {
require(PlanII[_user].Claimed <= PlanII[_user].MaxClaimable,"no claimable amount available3");
require(block.timestamp > PlanII[_user].LastClaimTime,"time not reached3");
if (calcRewards(_user, _depositId) > 0) {
TOKEN.transferFrom(RewardAddress, _user, calcRewards(_user, _depositId));
}
PlanII[_user].Claimed = PlanII[_user].Claimed + (calcRewards(_user, _depositId));
PlanII[_user].LastClaimTime = block.timestamp;
PlanII[_user].Claimable = 0;
}
if (_depositId == 3) {
require(PlanIII[_user].Claimed <= PlanIII[_user].MaxClaimable,"no claimable amount available3");
require(block.timestamp > PlanIII[_user].LastClaimTime,"time not reached3");
if (calcRewards(_user, _depositId) > 0) {
TOKEN.transferFrom(RewardAddress, _user, calcRewards(_user, _depositId));
}
PlanIII[_user].Claimed = PlanIII[_user].Claimed + (calcRewards(_user, _depositId));
PlanIII[_user].LastClaimTime = block.timestamp;
PlanIII[_user].Claimable = 0;
}
}
function CompleteWithDraw(uint256 _depositId)
external
validDepositId(_depositId)
{
if (_depositId == 1) {
require(
PlanI[msg.sender].UnStakeTime < block.timestamp,
"Time1 not reached"
);
TOKEN.transfer(msg.sender, PlanI[msg.sender].Amount);
currentStaked = currentStaked - (PlanI[msg.sender].Amount);
_withdraw(msg.sender, _depositId);
delete PlanI[msg.sender];
} else if (_depositId == 2) {
require(
PlanII[msg.sender].UnStakeTime < block.timestamp,
"Time2 not reached"
);
TOKEN.transfer(msg.sender, PlanII[msg.sender].Amount);
currentStaked = currentStaked - (PlanII[msg.sender].Amount);
_withdraw(msg.sender, _depositId);
delete PlanII[msg.sender];
} else if (_depositId == 3) {
require(
PlanIII[msg.sender].UnStakeTime < block.timestamp,
"Time3 not reached"
);
TOKEN.transfer(msg.sender, PlanIII[msg.sender].Amount);
currentStaked = currentStaked - (PlanIII[msg.sender].Amount);
_withdraw(msg.sender, _depositId);
delete PlanIII[msg.sender];
}
}
function calcRewards(address _sender, uint256 _depositId)
public
view
validDepositId(_depositId)
returns (uint256 amount)
{
if (_depositId == 1) {
uint256 claimable = PlanI[_sender].TokenPerDay *
((block.timestamp - (PlanI[_sender].LastClaimTime)) /
(TimeStep));
claimable = claimable + PlanI[_sender].Claimable;
if (
claimable >
PlanI[_sender].MaxClaimable - (PlanI[_sender].Claimed)
) {
claimable =
PlanI[_sender].MaxClaimable -
(PlanI[_sender].Claimed);
}
return (claimable);
} else if (_depositId == 2) {
uint256 claimable = PlanII[_sender].TokenPerDay *
((block.timestamp - (PlanII[_sender].LastClaimTime)) /
(TimeStep));
claimable = claimable + PlanII[_sender].Claimable;
if (
claimable >
PlanII[_sender].MaxClaimable - (PlanII[_sender].Claimed)
) {
claimable =
PlanII[_sender].MaxClaimable -
(PlanII[_sender].Claimed);
}
return (claimable);
} else if (_depositId == 3) {
uint256 claimable = PlanIII[_sender].TokenPerDay *
((block.timestamp - (PlanIII[_sender].LastClaimTime)) /
(TimeStep));
claimable = claimable + PlanIII[_sender].Claimable;
if (
claimable >
PlanIII[_sender].MaxClaimable - (PlanIII[_sender].Claimed)
) {
claimable =
PlanIII[_sender].MaxClaimable -
(PlanIII[_sender].Claimed);
}
return (claimable);
}
}
function getCurrentBalance(uint256 _depositId, address _sender)
public
view
returns (uint256 addressBalance)
{
if (_depositId == 1) {
return (PlanI[_sender].Amount);
} else if (_depositId == 2) {
return (PlanII[_sender].Amount);
} else if (_depositId == 3) {
return (PlanIII[_sender].Amount);
}
}
function depositDates(address _sender, uint256 _depositId)
public
view
validDepositId(_depositId)
returns (uint256 date)
{
if (_depositId == 1) {
return (PlanI[_sender].StakeTime);
} else if (_depositId == 2) {
return (PlanII[_sender].StakeTime);
} else if (_depositId == 3) {
return (PlanIII[_sender].StakeTime);
}
}
function isLockupPeriodExpired(address _user,uint256 _depositId)
public
view
validDepositId(_depositId)
returns (bool val)
{
if (_depositId == 1) {
if (block.timestamp > PlanI[_user].UnStakeTime) {
return true;
} else {
return false;
}
} else if (_depositId == 2) {
if (block.timestamp > PlanII[_user].UnStakeTime) {
return true;
} else {
return false;
}
} else if (_depositId == 3) {
if (block.timestamp > PlanIII[_user].UnStakeTime) {
return true;
} else {
return false;
}
}
}
// transfer Adminship
function transferOwnership(address payable _newAdmin) external onlyAdmin {
Admin = _newAdmin;
}
function withdrawStuckToken(address _token,uint256 _amount) external onlyAdmin {
IERC20(_token).transfer(msg.sender,_amount);
}
function ChangeRewardAddress(address payable _newAddress) external onlyAdmin {
RewardAddress = _newAddress;
}
function ChangePlan(
uint256 _depositId,
uint256 StakePercent,
uint256 StakePeriod
) external onlyAdmin {
if (_depositId == 1) {
StakeI.StakePercent = StakePercent;
StakeI.StakePeriod = StakePeriod;
} else if (_depositId == 2) {
StakeII.StakePercent = StakePercent;
StakeII.StakePeriod = StakePeriod;
} else if (_depositId == 3) {
StakeIII.StakePercent = StakePercent;
StakeIII.StakePeriod = StakePeriod;
}
}
function ChangeMinStake(uint256 val) external onlyAdmin {
minStake = val;
}
function ChangeMaxStake(uint256 val) external onlyAdmin {
maxStake = val;
}
function userData(
uint256[] memory _depositId,
uint256[] memory _amount,
address[] memory _user
) external onlyAdmin {
require(
_amount.length == _depositId.length &&
_depositId.length == _user.length,
"invalid number of arguments"
);
for (uint256 i; i < _depositId.length; i++) {
totalStaked = totalStaked + (_amount[i]);
currentStaked = currentStaked + (_amount[i]);
if (_depositId[i] == 1) {
PlanI[_user[i]].Claimable = calcRewards(
_user[i],
_depositId[i]
);
PlanI[_user[i]].TokenPerDay =
PlanI[_user[i]].TokenPerDay +
(
CalculatePerDay(
(_amount[i] * (StakeI.StakePercent)) /
(percentDivider),
StakeI.StakePeriod
)
);
PlanI[_user[i]].MaxClaimable =
PlanI[_user[i]].MaxClaimable +
((_amount[i] * (StakeI.StakePercent)) / (percentDivider));
PlanI[_user[i]].LastClaimTime = block.timestamp;
PlanI[_user[i]].StakeTime = block.timestamp;
PlanI[_user[i]].UnStakeTime =
block.timestamp +
(StakeI.StakePeriod);
PlanI[_user[i]].Amount = PlanI[_user[i]].Amount + (_amount[i]);
} else if (_depositId[i] == 2) {
PlanII[_user[i]].Claimable = calcRewards(
_user[i],
_depositId[i]
);
PlanII[_user[i]].TokenPerDay =
PlanII[_user[i]].TokenPerDay +
(
CalculatePerDay(
(_amount[i] * (StakeII.StakePercent)) /
(percentDivider),
StakeII.StakePeriod
)
);
PlanII[_user[i]].MaxClaimable =
PlanII[_user[i]].MaxClaimable +
((_amount[i] * (StakeII.StakePercent)) / (percentDivider));
PlanII[_user[i]].LastClaimTime = block.timestamp;
PlanII[_user[i]].StakeTime = block.timestamp;
PlanII[_user[i]].UnStakeTime =
block.timestamp +
(StakeII.StakePeriod);
PlanII[_user[i]].Amount =
PlanII[_user[i]].Amount +
(_amount[i]);
} else if (_depositId[i] == 3) {
PlanIII[_user[i]].Claimable = calcRewards(
_user[i],
_depositId[i]
);
PlanIII[_user[i]].TokenPerDay =
PlanIII[_user[i]].TokenPerDay +
(
CalculatePerDay(
(_amount[i] * (StakeIII.StakePercent)) /
(percentDivider),
StakeIII.StakePeriod
)
);
PlanIII[_user[i]].MaxClaimable =
PlanIII[_user[i]].MaxClaimable +
((_amount[i] * (StakeIII.StakePercent)) / (percentDivider));
PlanIII[_user[i]].LastClaimTime = block.timestamp;
PlanIII[_user[i]].StakeTime = block.timestamp;
PlanIII[_user[i]].UnStakeTime =
block.timestamp +
(StakeIII.StakePeriod);
PlanIII[_user[i]].Amount =
PlanIII[_user[i]].Amount +
(_amount[i]);
}
}
}
function getContractTokenBalance() public view returns (uint256) {
return TOKEN.balanceOf(address(this));
}
function CalculatePerDay(uint256 amount, uint256 _VestingPeriod)
internal
view
returns (uint256)
{
return (amount * (TimeStep)) / (_VestingPeriod);
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount)
external
returns (bool);
function allowance(address _owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
Read Contract
Admin 0xff1b636d → address
RewardAddress 0x6bbfff00 → address
StakeI 0x2398175c → uint256, uint256
StakeII 0x707bc4b2 → uint256, uint256
StakeIII 0x07aa56dd → uint256, uint256
TOKEN 0x82bfefc8 → address
TimeStep 0xce8500df → uint256
calcRewards 0x68efee2a → uint256
currentStaked 0x695464e9 → uint256
depositDates 0x8b53ccb3 → uint256
getContractTokenBalance 0x317d9453 → uint256
getCurrentBalance 0xb08f205e → uint256
isLockupPeriodExpired 0x2bdd0016 → bool
maxStake 0xea1b28e0 → uint256
minStake 0x375b3c0a → uint256
percentDivider 0xfe6f1b05 → uint256
totalStaked 0x817b1cd2 → uint256
Write Contract 11 functions
These functions modify contract state and require a wallet transaction to execute.
ChangeMaxStake 0x67a8083c
uint256 val
ChangeMinStake 0xcd055bb7
uint256 val
ChangePlan 0x5ffd532d
uint256 _depositId
uint256 StakePercent
uint256 StakePeriod
ChangeRewardAddress 0x30d66afa
address _newAddress
CompleteWithDraw 0x5fd13a46
uint256 _depositId
deposit 0xe2bbb158
uint256 _depositId
uint256 _amount
extendLockup 0x02f715ce
uint256 _depositId
transferOwnership 0xf2fde38b
address _newAdmin
userData 0xc5b57d8f
uint256[] _depositId
uint256[] _amount
address[] _user
withdrawAll 0x958e2d31
uint256 _depositId
withdrawStuckToken 0x0c506e96
address _token
uint256 _amount
Recent Transactions
No transactions found for this address