Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xD83f623a0a77e09DfC586B831012118Bdf3B4141
Balance 0 ETH
Nonce 1
Code Size 12419 bytes
Indexed Transactions 0
External Etherscan · Sourcify

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