Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x36764EafcF437ebcD9B7b2DeaCf19c75FB6fFADf
Balance 0.178948 ETH
Nonce 1
Code Size 13530 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

13530 bytes
0x6080604052600436106100ec5760003560e01c8063845360171161008a578063c4d797f211610059578063c4d797f214610313578063d47a1a271461033e578063e086e5ec14610367578063f2fde38b1461037e57610141565b8063845360171461027d578063893d20e81461029457806389476069146102bf578063a4e2d634146102e857610141565b80633fa02c4a116100c65780633fa02c4a146101d757806361dadfdb146102005780636568a279146102295780636e9472981461025257610141565b80632d79cf42146101465780633a9b52ad146101715780633aecd0e31461019a57610141565b36610141573373ffffffffffffffffffffffffffffffffffffffff167f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f86695346040516101379190612e61565b60405180910390a2005b600080fd5b34801561015257600080fd5b5061015b6103a7565b6040516101689190612e61565b60405180910390f35b34801561017d57600080fd5b506101986004803603810190610193919061281f565b6103ad565b005b3480156101a657600080fd5b506101c160048036038101906101bc91906126f8565b6104da565b6040516101ce9190612e61565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190612785565b6105e4565b005b34801561020c57600080fd5b5061022760048036038101906102229190612725565b610978565b005b34801561023557600080fd5b50610250600480360381019061024b9190612785565b610b7c565b005b34801561025e57600080fd5b50610267610cbe565b6040516102749190612e61565b60405180910390f35b34801561028957600080fd5b50610292610cc6565b005b3480156102a057600080fd5b506102a9610f65565b6040516102b69190612be2565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e191906126f8565b610f8e565b005b3480156102f457600080fd5b506102fd611351565b60405161030a9190612c26565b60405180910390f35b34801561031f57600080fd5b50610328611367565b6040516103359190612e61565b60405180910390f35b34801561034a57600080fd5b50610365600480360381019061036091906127d2565b611371565b005b34801561037357600080fd5b5061037c6115fc565b005b34801561038a57600080fd5b506103a560048036038101906103a091906126f8565b61189b565b005b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290612c41565b60405180910390fd5b6108fc81101580156104505750620186a08111155b61048f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048690612ca1565b60405180910390fd5b60006001549050816001819055507fa2f4415610206701f2cdb6ba0fea413b3a57ff8957c38c3b595feb71a5f45e5381836040516104ce929190612f06565b60405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054290612e01565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105849190612be2565b60206040518083038186803b15801561059c57600080fd5b505afa9250505080156105cd57506040513d601f19601f820116820180604052508101906105ca919061284c565b60015b6105da57600090506105df565b809150505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066990612c41565b60405180910390fd5b600060149054906101000a900460ff16156106c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b990612e41565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600082829050905060008111610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90612d01565b60405180910390fd5b603281111561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390612c81565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b828110156109575760008585838181106107b2576107b1613056565b5b90506020020160208101906107c791906126f8565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561083257503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561094b578073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108709190612be2565b60206040518083038186803b15801561088857600080fd5b505afa9250505080156108b957506040513d601f19601f820116820180604052508101906108b6919061284c565b60015b6108c25761094a565b60008111156109485760006108d8838684611ace565b90508015610946578473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0524ee0fd8662d6c046d199da2a6d3dc49445182cec055873a5bb9c2843c8e08460405161093d9190612e61565b60405180910390a35b505b505b5b81600101915050610795565b50505060008060146101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90612c41565b60405180910390fd5b600060149054906101000a900460ff1615610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612e41565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990612ce1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890612c61565b60405180910390fd5b610b5c848484611bbe565b5060008060146101000a81548160ff021916908315150217905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190612c41565b60405180910390fd5b600060149054906101000a900460ff1615610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190612e41565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550610ca060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383611bbe565b60008060146101000a81548160ff0219169083151502179055505050565b600047905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90612c41565b60405180910390fd5b600060149054906101000a900460ff1615610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612e41565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600047905060008111610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90612d81565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260015490604051610e5290612bcd565b600060405180830381858888f193505050503d8060008114610e90576040519150601f19603f3d011682016040523d82523d6000602084013e610e95565b606091505b5050905080610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090612de1565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f14c9403543058d349a392787338bf02dc629d48ad897f0c32251c03e83945f2683604051610f3f9190612e61565b60405180910390a2505060008060146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390612c41565b60405180910390fd5b600060149054906101000a900460ff161561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390612e41565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90612ce1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90612c61565b60405180910390fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111a79190612be2565b60206040518083038186803b1580156111bf57600080fd5b505afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f7919061284c565b90506000811161123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390612d41565b60405180910390fd5b60006112698560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ace565b9050806112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290612dc1565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa0524ee0fd8662d6c046d199da2a6d3dc49445182cec055873a5bb9c2843c8e0846040516113289190612e61565b60405180910390a35050505060008060146101000a81548160ff02191690831515021790555050565b60008060149054906101000a900460ff16905090565b6000600154905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612c41565b60405180910390fd5b600060149054906101000a900460ff161561144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690612e41565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000828290509050600081116114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90612cc1565b60405180910390fd5b60c88111156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090612d61565b60405180910390fd5b6000806115068585611eb0565b915091508061154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190612e21565b60405180910390fd5b600047905082811015611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990612d21565b60405180910390fd5b600061159e8787612239565b90507f433a0bba59492ad0c08d3c99cb7ca4dd3e1f881b2f2d1169df811f0ce12509bf85826040516115d1929190612f06565b60405180910390a1505050505060008060146101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190612c41565b60405180910390fd5b600060149054906101000a900460ff16156116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190612e41565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060004790506000811161173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490612d81565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826001549060405161178890612bcd565b600060405180830381858888f193505050503d80600081146117c6576040519150601f19603f3d011682016040523d82523d6000602084013e6117cb565b606091505b505090508061180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690612da1565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f14c9403543058d349a392787338bf02dc629d48ad897f0c32251c03e83945f26836040516118759190612e61565b60405180910390a2505060008060146101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090612c41565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612ce1565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090612c61565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401611b03929190612bfd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b6d9190612bb6565b6000604051808303816000865af19150503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b50509050809150509392505050565b6032828290501115611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90612c81565b60405180910390fd5b6000600154905060005b83839050811015611dd4576000848483818110611c2f57611c2e613056565b5b9050602002016020810190611c4491906126f8565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611caf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611dc8578073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ced9190612be2565b60206040518083038186803b158015611d0557600080fd5b505afa925050508015611d3657506040513d601f19601f82011682018060405250810190611d33919061284c565b60015b611d3f57611dc7565b6000811115611dc5576000611d55838984611ace565b90508015611dc3578773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0524ee0fd8662d6c046d199da2a6d3dc49445182cec055873a5bb9c2843c8e084604051611dba9190612e61565b60405180910390a35b505b505b5b81600101915050611c0f565b5060004790506000811115611ea95760008573ffffffffffffffffffffffffffffffffffffffff16828490604051611e0b90612bcd565b600060405180830381858888f193505050503d8060008114611e49576040519150601f19603f3d011682016040523d82523d6000602084013e611e4e565b606091505b505090508015611ea7578573ffffffffffffffffffffffffffffffffffffffff167f14c9403543058d349a392787338bf02dc629d48ad897f0c32251c03e83945f2683604051611e9e9190612e61565b60405180910390a25b505b5050505050565b60008060008484905090506001915060008167ffffffffffffffff811115611edb57611eda613085565b5b604051908082528060200260200182016040528015611f095781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115611f2857611f27613085565b5b604051908082528060200260200182016040528015611f565781602001602082028036833780820191505090505b5090506000805b848110156121405736898983818110611f7957611f78613056565b5b9050608002019050806040013588611f919190612f56565b9750600073ffffffffffffffffffffffffffffffffffffffff16816020016020810190611fbe91906126f8565b73ffffffffffffffffffffffffffffffffffffffff1614158015611fe6575060008160600135115b1561213457600083905060005b8481101561206e5782602001602081019061200e91906126f8565b73ffffffffffffffffffffffffffffffffffffffff1687828151811061203757612036613056565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156120635780915061206e565b806001019050611ff3565b50838114156120ff5781602001602081019061208a91906126f8565b86858151811061209d5761209c613056565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008585815181106120ec576120eb613056565b5b6020026020010181815250508360010193505b816060013585828151811061211757612116613056565b5b6020026020010181815161212b9190612f56565b91508181525050505b81600101915050611f5d565b5060005b8181101561222d5783818151811061215f5761215e613056565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161219f9190612be2565b60206040518083038186803b1580156121b757600080fd5b505afa9250505080156121e857506040513d601f19601f820116820180604052508101906121e5919061284c565b60015b6121f5576000955061222d565b83828151811061220857612207613056565b5b602002602001015181101561222157600096505061222d565b50806001019050612144565b50505050509250929050565b60008083839050905060005b81811015612605573685858381811061226157612260613056565b5b9050608002019050600073ffffffffffffffffffffffffffffffffffffffff1681600001602081019061229491906126f8565b73ffffffffffffffffffffffffffffffffffffffff1614806122f357503073ffffffffffffffffffffffffffffffffffffffff168160000160208101906122db91906126f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156123a05780602001602081019061230b91906126f8565b73ffffffffffffffffffffffffffffffffffffffff1681600001602081019061233491906126f8565b73ffffffffffffffffffffffffffffffffffffffff167f84591632da3297cac8d3bfdd6ff974faf08443fe6e72f89ed83076fe8aaa25928360600135846040013561237f9190612f56565b60405161238c9190612eaa565b60405180910390a381600101915050612600565b6000600190506000826040013511156124c25760008260000160208101906123c891906126f8565b73ffffffffffffffffffffffffffffffffffffffff168360400135600154906040516123f390612bcd565b600060405180830381858888f193505050503d8060008114612431576040519150601f19603f3d011682016040523d82523d6000602084013e612436565b606091505b50509050806124c057600073ffffffffffffffffffffffffffffffffffffffff1683600001602081019061246a91906126f8565b73ffffffffffffffffffffffffffffffffffffffff167f84591632da3297cac8d3bfdd6ff974faf08443fe6e72f89ed83076fe8aaa259285604001356040516124b39190612ed8565b60405180910390a3600091505b505b600073ffffffffffffffffffffffffffffffffffffffff168260200160208101906124ed91906126f8565b73ffffffffffffffffffffffffffffffffffffffff1614158015612515575060008260600135115b156125ea57600061254f83602001602081019061253291906126f8565b84600001602081019061254591906126f8565b8560600135611ace565b9050806125e85782602001602081019061256991906126f8565b73ffffffffffffffffffffffffffffffffffffffff1683600001602081019061259291906126f8565b73ffffffffffffffffffffffffffffffffffffffff167f84591632da3297cac8d3bfdd6ff974faf08443fe6e72f89ed83076fe8aaa259285606001356040516125db9190612e7c565b60405180910390a3600091505b505b80156125f7578460010194505b82600101925050505b612245565b505092915050565b60008135905061261c81613476565b92915050565b60008083601f840112612638576126376130b9565b5b8235905067ffffffffffffffff811115612655576126546130b4565b5b602083019150836020820283011115612671576126706130be565b5b9250929050565b60008083601f84011261268e5761268d6130b9565b5b8235905067ffffffffffffffff8111156126ab576126aa6130b4565b5b6020830191508360808202830111156126c7576126c66130be565b5b9250929050565b6000813590506126dd8161348d565b92915050565b6000815190506126f28161348d565b92915050565b60006020828403121561270e5761270d6130c8565b5b600061271c8482850161260d565b91505092915050565b60008060006040848603121561273e5761273d6130c8565b5b600061274c8682870161260d565b935050602084013567ffffffffffffffff81111561276d5761276c6130c3565b5b61277986828701612622565b92509250509250925092565b6000806020838503121561279c5761279b6130c8565b5b600083013567ffffffffffffffff8111156127ba576127b96130c3565b5b6127c685828601612622565b92509250509250929050565b600080602083850312156127e9576127e86130c8565b5b600083013567ffffffffffffffff811115612807576128066130c3565b5b61281385828601612678565b92509250509250929050565b600060208284031215612835576128346130c8565b5b6000612843848285016126ce565b91505092915050565b600060208284031215612862576128616130c8565b5b6000612870848285016126e3565b91505092915050565b61288281612fac565b82525050565b61289181612fbe565b82525050565b60006128a282612f2f565b6128ac8185612f3a565b93506128bc818560208601612ff4565b80840191505092915050565b60006128d5602183612f45565b91506128e0826130cd565b604082019050919050565b60006128f8602183612f45565b91506129038261311c565b604082019050919050565b600061291b600f83612f45565b91506129268261316b565b602082019050919050565b600061293e601683612f45565b915061294982613194565b602082019050919050565b6000612961601383612f45565b915061296c826131bd565b602082019050919050565b6000612984601d83612f45565b915061298f826131e6565b602082019050919050565b60006129a7601083612f45565b91506129b28261320f565b602082019050919050565b60006129ca601883612f45565b91506129d582613238565b602082019050919050565b60006129ed601583612f45565b91506129f882613261565b602082019050919050565b6000612a10601583612f45565b9150612a1b8261328a565b602082019050919050565b6000612a33601283612f45565b9150612a3e826132b3565b602082019050919050565b6000612a56601283612f45565b9150612a61826132dc565b602082019050919050565b6000612a79601183612f45565b9150612a8482613305565b602082019050919050565b6000612a9c601583612f45565b9150612aa78261332e565b602082019050919050565b6000612abf601783612f45565b9150612aca82613357565b602082019050919050565b6000612ae2600083612f3a565b9150612aed82613380565b600082019050919050565b6000612b05601383612f45565b9150612b1082613383565b602082019050919050565b6000612b28601f83612f45565b9150612b33826133ac565b602082019050919050565b6000612b4b601583612f45565b9150612b56826133d5565b602082019050919050565b6000612b6e602783612f45565b9150612b79826133fe565b604082019050919050565b6000612b91601f83612f45565b9150612b9c8261344d565b602082019050919050565b612bb081612fea565b82525050565b6000612bc28284612897565b915081905092915050565b6000612bd882612ad5565b9150819050919050565b6000602082019050612bf76000830184612879565b92915050565b6000604082019050612c126000830185612879565b612c1f6020830184612ba7565b9392505050565b6000602082019050612c3b6000830184612888565b92915050565b60006020820190508181036000830152612c5a816128c8565b9050919050565b60006020820190508181036000830152612c7a816128eb565b9050919050565b60006020820190508181036000830152612c9a8161290e565b9050919050565b60006020820190508181036000830152612cba81612931565b9050919050565b60006020820190508181036000830152612cda81612954565b9050919050565b60006020820190508181036000830152612cfa81612977565b9050919050565b60006020820190508181036000830152612d1a8161299a565b9050919050565b60006020820190508181036000830152612d3a816129bd565b9050919050565b60006020820190508181036000830152612d5a81612a03565b9050919050565b60006020820190508181036000830152612d7a81612a26565b9050919050565b60006020820190508181036000830152612d9a81612a49565b9050919050565b60006020820190508181036000830152612dba81612a8f565b9050919050565b60006020820190508181036000830152612dda81612ab2565b9050919050565b60006020820190508181036000830152612dfa81612b1b565b9050919050565b60006020820190508181036000830152612e1a81612b3e565b9050919050565b60006020820190508181036000830152612e3a81612b61565b9050919050565b60006020820190508181036000830152612e5a81612b84565b9050919050565b6000602082019050612e766000830184612ba7565b92915050565b6000604082019050612e916000830184612ba7565b8181036020830152612ea2816129e0565b905092915050565b6000604082019050612ebf6000830184612ba7565b8181036020830152612ed081612a6c565b905092915050565b6000604082019050612eed6000830184612ba7565b8181036020830152612efe81612af8565b905092915050565b6000604082019050612f1b6000830185612ba7565b612f286020830184612ba7565b9392505050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612f6182612fea565b9150612f6c83612fea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fa157612fa0613027565b5b828201905092915050565b6000612fb782612fca565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015613012578082015181840152602081019050612ff7565b83811115613021576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420616464726573733a20636f6e74726163742061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f476173206c696d6974206f7574206f662072616e676500000000000000000000600082015250565b7f456d707479207472616e73666572206c69737400000000000000000000000000600082015250565b7f496e76616c696420616464726573733a207a65726f2061646472657373000000600082015250565b7f456d70747920746f6b656e206c69737400000000000000000000000000000000600082015250565b7f496e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b7f4e6f20746f6b656e7320746f2077697468647261770000000000000000000000600082015250565b7f546f6f206d616e79207472616e73666572730000000000000000000000000000600082015250565b7f4e6f2045544820746f2077697468647261770000000000000000000000000000600082015250565b7f496e76616c696420726563697069656e74000000000000000000000000000000600082015250565b7f455448207769746864726177616c206661696c65640000000000000000000000600082015250565b7f546f6b656e207769746864726177616c206661696c6564000000000000000000600082015250565b50565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b7f456d657267656e637920455448207769746864726177616c206661696c656400600082015250565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b7f496e73756666696369656e742062616c616e636520666f72206261746368207460008201527f72616e7366657200000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61347f81612fac565b811461348a57600080fd5b50565b61349681612fea565b81146134a157600080fd5b5056fea26469706673582212209888b0d53ebe672476e70ab646e926aa52b08641afff38560aff6158563792f264736f6c63430008070033

Verified Source Code Full Match

Compiler: v0.8.7+commit.e28d00a7 EVM: london Optimization: No
batch_transfer_storage.sol 382 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
}

contract BatchTransferStorage {
    // 合约拥有者
    address private owner;
    
    // 重入锁
    bool private locked;
    
    // Gas优化:可配置的gas限制
    uint256 private constant DEFAULT_ETH_TRANSFER_GAS_LIMIT = 2300;
    uint256 private constant MIN_ETH_TRANSFER_GAS_LIMIT = 2300;
    uint256 private constant MAX_ETH_TRANSFER_GAS_LIMIT = 100000;
    uint256 private constant MAX_BATCH_SIZE = 200;
    uint256 private constant MAX_TOKEN_BATCH_SIZE = 50;
    
    uint256 public ethTransferGasLimit = DEFAULT_ETH_TRANSFER_GAS_LIMIT;
    
    // 转账数据结构
    struct TransferData {
        address recipient;      // 接收地址
        address token;         // 代币地址(address(0)表示ETH)
        uint256 ethAmount;     // ETH数量
        uint256 tokenAmount;   // 代币数量
    }
    
    // 事件
    event BatchTransferExecuted(uint256 count, uint256 successCount);
    event TokenWithdrawn(address indexed token, uint256 amount, address indexed to);
    event EthWithdrawn(uint256 amount, address indexed to);
    event EthReceived(address indexed from, uint256 amount);
    event TransferFailed(address indexed recipient, address indexed token, uint256 amount, string reason);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event EthTransferGasLimitUpdated(uint256 oldLimit, uint256 newLimit);
    
    // 修饰符:仅限拥有者
    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can call this function");
        _;
    }
    
    // 重入保护
    modifier nonReentrant() {
        require(!locked, "ReentrancyGuard: reentrant call");
        locked = true;
        _;
        locked = false;
    }
    
    // 有效地址检查
    modifier validAddress(address _address) {
        require(_address != address(0), "Invalid address: zero address");
        require(_address != address(this), "Invalid address: contract address");
        _;
    }
    
    // 构造函数
    constructor() {
        owner = msg.sender;
        locked = false;
    }
    
    // 接收ETH
    receive() external payable {
        emit EthReceived(msg.sender, msg.value);
    }
    
    /**
     * @dev 设置ETH转账的Gas限制 (仅限Owner)
     */
    function setEthTransferGasLimit(uint256 newGasLimit) external onlyOwner {
        require(
            newGasLimit >= MIN_ETH_TRANSFER_GAS_LIMIT && 
            newGasLimit <= MAX_ETH_TRANSFER_GAS_LIMIT, 
            "Gas limit out of range"
        );
        
        uint256 oldLimit = ethTransferGasLimit;
        ethTransferGasLimit = newGasLimit;
        
        emit EthTransferGasLimitUpdated(oldLimit, newGasLimit);
    }
    
    /**
     * @dev 获取当前ETH转账Gas限制配置
     */
    function getEthTransferGasLimit() external view returns (uint256) {
        return ethTransferGasLimit;
    }

    // 批量转账函数 - Gas优化版本
    function batchTransfer(TransferData[] calldata transfers) external onlyOwner nonReentrant {
        uint256 length = transfers.length;
        require(length > 0, "Empty transfer list");
        require(length <= MAX_BATCH_SIZE, "Too many transfers"); // 使用常量
        
        // Gas优化:预检查阶段 - 避免部分执行后失败
        (uint256 totalEthNeeded, bool balanceCheckPassed) = _preCheckBalances(transfers);
        require(balanceCheckPassed, "Insufficient balance for batch transfer");
        
        // Gas优化:缓存合约余额,避免重复读取storage
        uint256 contractEthBalance = address(this).balance;
        require(contractEthBalance >= totalEthNeeded, "Insufficient ETH balance");
        
        // 执行转账 - 使用优化的循环
        uint256 successCount = _executeBatchTransfers(transfers);
        
        emit BatchTransferExecuted(length, successCount);
    }
    
    /**
     * @dev Gas优化:预检查所有转账的余额需求
     */
    function _preCheckBalances(TransferData[] calldata transfers) 
        private 
        view 
        returns (uint256 totalEthNeeded, bool balanceCheckPassed) 
    {
        uint256 length = transfers.length;
        balanceCheckPassed = true;

        // 动态数组存储唯一代币地址和对应需求量
        address[] memory uniqueTokens = new address[](length);
        uint256[] memory tokenRequirements = new uint256[](length);
        uint256 uniqueTokenCount = 0;
        
        // Gas优化:使用unchecked进行循环计数
        for (uint256 i = 0; i < length;) {
            TransferData calldata t = transfers[i];
            
            // 累计ETH需求
            totalEthNeeded += t.ethAmount;
            
            // 处理ERC20代币需求
            if (t.token != address(0) && t.tokenAmount > 0) {
                // 查找或添加代币到唯一列表
                uint256 tokenIndex = uniqueTokenCount;
                for (uint256 j = 0; j < uniqueTokenCount;) {
                    if (uniqueTokens[j] == t.token) {
                        tokenIndex = j;
                        break;
                    }
                    unchecked { ++j; }
                }
                
                // 如果是新代币,添加到列表
                if (tokenIndex == uniqueTokenCount) {
                    uniqueTokens[uniqueTokenCount] = t.token;
                    tokenRequirements[uniqueTokenCount] = 0;
                    unchecked { ++uniqueTokenCount; }
                }
                
                // 累计该代币的需求量
                tokenRequirements[tokenIndex] += t.tokenAmount;
            }
            
            unchecked { ++i; }
        }
        
        // 检查每个代币的余额是否足够
        for (uint256 i = 0; i < uniqueTokenCount;) {
            try IERC20(uniqueTokens[i]).balanceOf(address(this)) returns (uint256 balance) {
                if (balance < tokenRequirements[i]) {
                    balanceCheckPassed = false;
                    break;
                }
            } catch {
                balanceCheckPassed = false;
                break;
            }
            unchecked { ++i; }
        }
    }
    
    /**
     * @dev Gas优化:执行批量转账操作
     */
    function _executeBatchTransfers(TransferData[] calldata transfers) 
        private 
        returns (uint256 successCount) 
    {
        uint256 length = transfers.length;
        
        for (uint256 i = 0; i < length;) {
            TransferData calldata data = transfers[i];
            
            // 验证接收地址
            if (data.recipient == address(0) || data.recipient == address(this)) {
                emit TransferFailed(data.recipient, data.token, data.ethAmount + data.tokenAmount, "Invalid recipient");
                unchecked { ++i; }
                continue;
            }
            
            bool transferSuccess = true;
            
            // 发送ETH
            if (data.ethAmount > 0) {
                (bool ethSuccess, ) = data.recipient.call{value: data.ethAmount, gas: ethTransferGasLimit}("");
                if (!ethSuccess) {
                    emit TransferFailed(data.recipient, address(0), data.ethAmount, "ETH transfer failed");
                    transferSuccess = false;
                }
            }
            
            // 发送代币
            if (data.token != address(0) && data.tokenAmount > 0) {
                bool tokenTransferSuccess = _safeTokenTransfer(data.token, data.recipient, data.tokenAmount);
                if (!tokenTransferSuccess) {
                    emit TransferFailed(data.recipient, data.token, data.tokenAmount, "Token transfer failed");
                    transferSuccess = false;
                }
            }
            
            if (transferSuccess) {
                unchecked { ++successCount; }
            }
            
            unchecked { ++i; }
        }
    }

    // 紧急停止函数
    function emergencyWithdrawETH() external onlyOwner nonReentrant {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to withdraw");
        
        (bool success, ) = owner.call{value: balance, gas: ethTransferGasLimit}("");
        require(success, "Emergency ETH withdrawal failed");
        
        emit EthWithdrawn(balance, owner);
    }

    // 提现所有ETH到owner地址
    function withdrawETH() external onlyOwner nonReentrant {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to withdraw");
        
        (bool success, ) = owner.call{value: balance, gas: ethTransferGasLimit}("");
        require(success, "ETH withdrawal failed");
        
        emit EthWithdrawn(balance, owner);
    }

    // 提现指定代币到owner地址 - 增强安全性
    function withdrawToken(address tokenAddress) external onlyOwner nonReentrant validAddress(tokenAddress) {
        IERC20 token = IERC20(tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        require(balance > 0, "No tokens to withdraw");
        
        bool success = _safeTokenTransfer(tokenAddress, owner, balance);
        require(success, "Token withdrawal failed");
        emit TokenWithdrawn(tokenAddress, balance, owner);
    }

    // 批量提现多个代币 - Gas优化版本
    function withdrawMultipleTokens(address[] calldata tokenAddresses) external onlyOwner nonReentrant {
        uint256 length = tokenAddresses.length;
        require(length > 0, "Empty token list");
        require(length <= MAX_TOKEN_BATCH_SIZE, "Too many tokens"); // 使用常量
        
        // Gas优化:缓存owner地址,避免重复读取storage
        address ownerAddr = owner;
        
        for (uint256 i = 0; i < length;) {
            address tokenAddress = tokenAddresses[i];
            if (tokenAddress != address(0) && tokenAddress != address(this)) {
                try IERC20(tokenAddress).balanceOf(address(this)) returns (uint256 balance) {
                    if (balance > 0) {
                        bool success = _safeTokenTransfer(tokenAddress, ownerAddr, balance);
                        if (success) {
                            emit TokenWithdrawn(tokenAddress, balance, ownerAddr);
                        }
                    }
                } catch {
                    // 忽略无效的代币地址,继续下一个
                }
            }
            unchecked { ++i; }
        }
    }

    // 内部实现:提现所有资产(代币 + ETH)到指定地址 - 供公开函数复用
    function _withdrawAllInternal(address to, address[] calldata tokenAddresses) private {
        require(tokenAddresses.length <= MAX_TOKEN_BATCH_SIZE, "Too many tokens");

        uint256 gasLimit = ethTransferGasLimit;

        // 先提现所有代币
        for (uint256 i = 0; i < tokenAddresses.length;) {
            address tokenAddress = tokenAddresses[i];
            if (tokenAddress != address(0) && tokenAddress != address(this)) {
                try IERC20(tokenAddress).balanceOf(address(this)) returns (uint256 balance) {
                    if (balance > 0) {
                        bool success = _safeTokenTransfer(tokenAddress, to, balance);
                        if (success) {
                            emit TokenWithdrawn(tokenAddress, balance, to);
                        }
                    }
                } catch {
                    // 忽略无效的代币地址,继续下一个
                }
            }
            unchecked { ++i; }
        }

        // 最后提现ETH
        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            (bool success, ) = to.call{value: ethBalance, gas: gasLimit}("");
            if (success) {
                emit EthWithdrawn(ethBalance, to);
            }
        }
    }

    // 提现所有资产(代币 + ETH) - Gas优化版本(保持接口与行为不变)
    function withdrawAll(address[] calldata tokenAddresses) external onlyOwner nonReentrant {
        _withdrawAllInternal(owner, tokenAddresses);
    }

    // 提现所有资产到指定地址(代币 + ETH)
    function withdrawAllTo(address to, address[] calldata tokenAddresses)
        external
        onlyOwner
        nonReentrant
        validAddress(to)
    {
        _withdrawAllInternal(to, tokenAddresses);
    }

    // 查询合约ETH余额
    function getETHBalance() external view returns (uint256) {
        return address(this).balance;
    }

    // 查询合约代币余额 - 增强安全性
    function getTokenBalance(address tokenAddress) external view returns (uint256) {
        require(tokenAddress != address(0), "Invalid token address");
        try IERC20(tokenAddress).balanceOf(address(this)) returns (uint256 balance) {
            return balance;
        } catch {
            return 0;
        }
    }

    // 获取owner地址
    function getOwner() external view returns (address) {
        return owner;
    }

    // 转移所有权 - 增强安全性
    function transferOwnership(address newOwner) external onlyOwner validAddress(newOwner) {
        address previousOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(previousOwner, newOwner);
    }

    // 检查重入锁状态
    function isLocked() external view returns (bool) {
        return locked;
    }
    
    /**
     * @dev 安全的代币转账函数,兼容USDT等非标准ERC20代币
     */
    function _safeTokenTransfer(address token, address to, uint256 amount) private returns (bool) {
        // 方法1: 直接调用transfer,不检查返回值
        (bool success,) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, amount));
        
        // 如果调用成功(没有revert),就认为转账成功
        // 这种方式兼容USDT等不返回bool或返回不一致结果的代币
        return success;
    }
}

Read Contract

ethTransferGasLimit 0x2d79cf42 → uint256
getETHBalance 0x6e947298 → uint256
getEthTransferGasLimit 0xc4d797f2 → uint256
getOwner 0x893d20e8 → address
getTokenBalance 0x3aecd0e3 → uint256
isLocked 0xa4e2d634 → bool

Write Contract 9 functions

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

batchTransfer 0xec3540d8
tuple[] transfers
emergencyWithdrawETH 0x84536017
No parameters
setEthTransferGasLimit 0x3a9b52ad
uint256 newGasLimit
transferOwnership 0xf2fde38b
address newOwner
withdrawAll 0x6568a279
address[] tokenAddresses
withdrawAllTo 0x61dadfdb
address to
address[] tokenAddresses
withdrawETH 0xe086e5ec
No parameters
withdrawMultipleTokens 0x3fa02c4a
address[] tokenAddresses
withdrawToken 0x89476069
address tokenAddress

Recent Transactions

No transactions found for this address