Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x33277c3FF3642C80a9D63dAaceCff87f1ce8D3E9
Balance 0 ETH
Nonce 1
Code Size 14070 bytes
Indexed Transactions 1 (24,439,61524,439,615)
Gas Used (indexed) 61,640
External Etherscan · Sourcify

Contract Bytecode

14070 bytes
0x608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c80638da5cb5b11610102578063d8fb9337116100a0578063e2ab691d1161006f578063e2ab691d146105a4578063e5839836146105d4578063f26c159f14610604578063f2fde38b14610620576101d8565b8063d8fb9337146104e3578063dd62ed3e14610514578063de6baccb14610544578063e20bc67b14610574576101d8565b8063a9059cbb116100dc578063a9059cbb14610422578063b2520a7c14610452578063d1c4691614610483578063d29dad83146104b3576101d8565b80638da5cb5b146103b657806395d89b41146103d4578063a457c2d7146103f2576101d8565b806342966c681161017a578063788649ea11610149578063788649ea1461034457806379cc6790146103605780637eee288d1461037c5780638456cb59146103ac576101d8565b806342966c68146102d05780635c975abb146102ec57806370a082311461030a578063715018a61461033a576101d8565b806323b872dd116101b657806323b872dd14610248578063313ce5671461027857806339509351146102965780633f4ba83a146102c6576101d8565b806306fdde03146101dc578063095ea7b3146101fa57806318160ddd1461022a575b5f5ffd5b6101e461063c565b6040516101f1919061295c565b60405180910390f35b610214600480360381019061020f9190612a0d565b6106cc565b6040516102219190612a65565b60405180910390f35b6102326106e9565b60405161023f9190612a8d565b60405180910390f35b610262600480360381019061025d9190612aa6565b6106f2565b60405161026f9190612a65565b60405180910390f35b61028061082a565b60405161028d9190612b11565b60405180910390f35b6102b060048036038101906102ab9190612a0d565b610832565b6040516102bd9190612a65565b60405180910390f35b6102ce6108d9565b005b6102ea60048036038101906102e59190612b2a565b61095f565b005b6102f4610973565b6040516103019190612a65565b60405180910390f35b610324600480360381019061031f9190612b55565b610988565b6040516103319190612a8d565b60405180910390f35b610342610a22565b005b61035e60048036038101906103599190612b55565b610b5b565b005b61037a60048036038101906103759190612a0d565b610be4565b005b61039660048036038101906103919190612a0d565b610c5e565b6040516103a39190612a65565b60405180910390f35b6103b4610d72565b005b6103be610df8565b6040516103cb9190612b8f565b60405180910390f35b6103dc610e20565b6040516103e9919061295c565b60405180910390f35b61040c60048036038101906104079190612a0d565b610eb0565b6040516104199190612a65565b60405180910390f35b61043c60048036038101906104379190612a0d565b610f96565b6040516104499190612a65565b60405180910390f35b61046c60048036038101906104679190612a0d565b6110cc565b60405161047a929190612ba8565b60405180910390f35b61049d60048036038101906104989190612b55565b61115f565b6040516104aa9190612a65565b60405180910390f35b6104cd60048036038101906104c89190612b55565b6112df565b6040516104da9190612a8d565b60405180910390f35b6104fd60048036038101906104f89190612b55565b6112f0565b60405161050b929190612ba8565b60405180910390f35b61052e60048036038101906105299190612bcf565b61137a565b60405161053b9190612a8d565b60405180910390f35b61055e60048036038101906105599190612c0d565b6113fc565b60405161056b9190612a65565b60405180910390f35b61058e60048036038101906105899190612b55565b6114d2565b60405161059b9190612a65565b60405180910390f35b6105be60048036038101906105b99190612c0d565b6115a8565b6040516105cb9190612a65565b60405180910390f35b6105ee60048036038101906105e99190612b55565b6116bb565b6040516105fb9190612a65565b60405180910390f35b61061e60048036038101906106199190612b55565b61170d565b005b61063a60048036038101906106359190612b55565b611796565b005b60606003805461064b90612c8a565b80601f016020809104026020016040519081016040528092919081815260200182805461067790612c8a565b80156106c25780601f10610699576101008083540402835291602001916106c2565b820191905f5260205f20905b8154815290600101906020018083116106a557829003601f168201915b5050505050905090565b5f6106df6106d861193e565b8484611945565b6001905092915050565b5f600254905090565b5f83825f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f81111561074c5761074a836114d2565b505b8160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107959190612ce7565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080a90612d64565b60405180910390fd5b61081e878787611b08565b93505050509392505050565b5f6012905090565b5f6108cf61083e61193e565b848460015f61084b61193e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108ca9190612ce7565b611945565b6001905092915050565b6108e161193e565b73ffffffffffffffffffffffffffffffffffffffff166108ff610df8565b73ffffffffffffffffffffffffffffffffffffffff1614610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90612dcc565b60405180910390fd5b61095d611bfa565b565b61097061096a61193e565b82611c9a565b50565b5f60055f9054906101000a900460ff16905090565b5f5f61099383611e5b565b90505f5f90505f5f6109a4866112f0565b91509150818410156109b4575f5ffd5b5f811115610a00575f5f90505b818110156109fe575f5f6109d589846110cc565b915091504282116109ef5780866109ec9190612ce7565b95505b505080806001019150506109c1565b505b828285610a0d9190612dea565b610a179190612ce7565b945050505050919050565b610a2a61193e565b73ffffffffffffffffffffffffffffffffffffffff16610a48610df8565b73ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590612dcc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b6361193e565b73ffffffffffffffffffffffffffffffffffffffff16610b81610df8565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90612dcc565b60405180910390fd5b610be081611ea0565b5050565b5f610bf683610bf161193e565b61137a565b905081811015610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290612e67565b60405180910390fd5b610c4f83610c4761193e565b848403611945565b610c598383611c9a565b505050565b5f610c6761193e565b73ffffffffffffffffffffffffffffffffffffffff16610c85610df8565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290612dcc565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905011610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490612ecf565b60405180910390fd5b610d678383611f52565b506001905092915050565b610d7a61193e565b73ffffffffffffffffffffffffffffffffffffffff16610d98610df8565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590612dcc565b60405180910390fd5b610df6612224565b565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e2f90612c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90612c8a565b8015610ea65780601f10610e7d57610100808354040283529160200191610ea6565b820191905f5260205f20905b815481529060010190602001808311610e8957829003601f168201915b5050505050905090565b5f5f60015f610ebd61193e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90612f5d565b60405180910390fd5b610f8b610f8261193e565b85858403611945565b600191505092915050565b5f33825f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f811115610ff057610fee836114d2565b505b8160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110399190612ce7565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90612d64565b60405180910390fd5b6110c186866122c6565b935050505092915050565b5f5f5f60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20848154811061111e5761111d612f7b565b5b905f5260205f2090600202016040518060400160405290815f82015481526020016001820154815250509050805f0151925080602001519150509250929050565b5f61116861193e565b73ffffffffffffffffffffffffffffffffffffffff16611186610df8565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390612dcc565b60405180910390fd5b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490501161125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590612ecf565b60405180910390fd5b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505b5f8111156112d5576112c1836001836112bc9190612dea565b611f52565b5080806112cd90612fa8565b9150506112a3565b5060019050919050565b5f6112e982611e5b565b9050919050565b5f5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050915091565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f61140561193e565b73ffffffffffffffffffffffffffffffffffffffff16611423610df8565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090612dcc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114b0575f5ffd5b6114bb3385856122e3565b6114c684848461254d565b50600190509392505050565b5f5f5f90505b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081101561159e574260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106115705761156f612f7b565b5b905f5260205f2090600202015f015410156115915761158f8382611f52565b505b80806001019150506114d8565b5060019050919050565b5f6115b161193e565b73ffffffffffffffffffffffffffffffffffffffff166115cf610df8565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90612dcc565b60405180910390fd5b825f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b9061303f565b60405180910390fd5b6116af84848461254d565b50600190509392505050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61171561193e565b73ffffffffffffffffffffffffffffffffffffffff16611733610df8565b73ffffffffffffffffffffffffffffffffffffffff1614611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090612dcc565b60405180910390fd5b61179281612786565b5050565b61179e61193e565b73ffffffffffffffffffffffffffffffffffffffff166117bc610df8565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990612dcc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906130a7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90613135565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a18906131c3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611afb9190612a8d565b60405180910390a3505050565b5f611b148484846122e3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611b5b61193e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613251565b60405180910390fd5b611bee85611be661193e565b858403611945565b60019150509392505050565b611c02610973565b611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c38906132b9565b60405180910390fd5b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c8361193e565b604051611c909190612b8f565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90613347565b60405180910390fd5b611d13825f8361283a565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906133d5565b60405180910390fd5b8181035f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254611dea9190612dea565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e4e9190612a8d565b60405180910390a3505050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f611eaa826116bb565b611eb2575f5ffd5b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fca5069937e68fd197927055037f59d7c90bf75ac104e6e375539ef480c3ad6ee60405160405180910390a260019050919050565b5f5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208381548110611fa357611fa2612f7b565b5b905f5260205f2090600202019050806001015460095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ffe9190612dea565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f182600101546040516120899190612a8d565b60405180910390a260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061211b9190612dea565b8154811061212c5761212b612f7b565b5b905f5260205f20906002020160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20848154811061218757612186612f7b565b5b905f5260205f2090600202015f820154815f01556001820154816001015590505060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806121f5576121f46133f3565b5b600190038181905f5260205f2090600202015f5f82015f9055600182015f905550509055600191505092915050565b61222c610973565b1561226c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122639061346a565b60405180910390fd5b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122af61193e565b6040516122bc9190612b8f565b60405180910390a1565b5f6122d96122d261193e565b84846122e3565b6001905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612348906134f8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690613586565b60405180910390fd5b6123ca83838361283a565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561244d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244490613614565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124db9190612ce7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253f9190612a8d565b60405180910390a350505050565b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836125979190612ce7565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c906136a2565b60405180910390fd5b8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461265e9190612ce7565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051806040016040528084815260200185815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015550508373ffffffffffffffffffffffffffffffffffffffff167f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b8484604051612773929190612ba8565b60405180910390a2600190509392505050565b5f612790826116bb565b15612799575f5ffd5b600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167faf85b60d26151edd11443b704d424da6c43d0468f2235ebae3d1904dbc32304960405160405180910390a260019050919050565b612842610973565b15612882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128799061346a565b60405180910390fd5b8260065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128d6575f5ffd5b6128e18484846128e7565b50505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61292e826128ec565b61293881856128f6565b9350612948818560208601612906565b61295181612914565b840191505092915050565b5f6020820190508181035f8301526129748184612924565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129a982612980565b9050919050565b6129b98161299f565b81146129c3575f5ffd5b50565b5f813590506129d4816129b0565b92915050565b5f819050919050565b6129ec816129da565b81146129f6575f5ffd5b50565b5f81359050612a07816129e3565b92915050565b5f5f60408385031215612a2357612a2261297c565b5b5f612a30858286016129c6565b9250506020612a41858286016129f9565b9150509250929050565b5f8115159050919050565b612a5f81612a4b565b82525050565b5f602082019050612a785f830184612a56565b92915050565b612a87816129da565b82525050565b5f602082019050612aa05f830184612a7e565b92915050565b5f5f5f60608486031215612abd57612abc61297c565b5b5f612aca868287016129c6565b9350506020612adb868287016129c6565b9250506040612aec868287016129f9565b9150509250925092565b5f60ff82169050919050565b612b0b81612af6565b82525050565b5f602082019050612b245f830184612b02565b92915050565b5f60208284031215612b3f57612b3e61297c565b5b5f612b4c848285016129f9565b91505092915050565b5f60208284031215612b6a57612b6961297c565b5b5f612b77848285016129c6565b91505092915050565b612b898161299f565b82525050565b5f602082019050612ba25f830184612b80565b92915050565b5f604082019050612bbb5f830185612a7e565b612bc86020830184612a7e565b9392505050565b5f5f60408385031215612be557612be461297c565b5b5f612bf2858286016129c6565b9250506020612c03858286016129c6565b9150509250929050565b5f5f5f60608486031215612c2457612c2361297c565b5b5f612c31868287016129c6565b9350506020612c42868287016129f9565b9250506040612c53868287016129f9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ca157607f821691505b602082108103612cb457612cb3612c5d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612cf1826129da565b9150612cfc836129da565b9250828201905080821115612d1457612d13612cba565b5b92915050565b7f636865636b4c6f636b203a2062616c616e6365206578636565640000000000005f82015250565b5f612d4e601a836128f6565b9150612d5982612d1a565b602082019050919050565b5f6020820190508181035f830152612d7b81612d42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612db66020836128f6565b9150612dc182612d82565b602082019050919050565b5f6020820190508181035f830152612de381612daa565b9050919050565b5f612df4826129da565b9150612dff836129da565b9250828203905081811115612e1757612e16612cba565b5b92915050565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e63650000005f82015250565b5f612e51601d836128f6565b9150612e5c82612e1d565b602082019050919050565b5f6020820190508181035f830152612e7e81612e45565b9050919050565b7f5468657265206973206e6f74206c6f636b20696e666f2e0000000000000000005f82015250565b5f612eb96017836128f6565b9150612ec482612e85565b602082019050919050565b5f6020820190508181035f830152612ee681612ead565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612f476025836128f6565b9150612f5282612eed565b604082019050919050565b5f6020820190508181035f830152612f7481612f3b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f612fb2826129da565b91505f8203612fc457612fc3612cba565b5b600182039050919050565b7f5468657265206973206e6f7420656e6f7567682062616c616e6365206f6620685f8201527f6f6c6465722e0000000000000000000000000000000000000000000000000000602082015250565b5f6130296026836128f6565b915061303482612fcf565b604082019050919050565b5f6020820190508181035f8301526130568161301d565b9050919050565b7f6e6577206f776e657220697320746865207a65726f20616464726573730000005f82015250565b5f613091601d836128f6565b915061309c8261305d565b602082019050919050565b5f6020820190508181035f8301526130be81613085565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61311f6024836128f6565b915061312a826130c5565b604082019050919050565b5f6020820190508181035f83015261314c81613113565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131ad6022836128f6565b91506131b882613153565b604082019050919050565b5f6020820190508181035f8301526131da816131a1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61323b6028836128f6565b9150613246826131e1565b604082019050919050565b5f6020820190508181035f8301526132688161322f565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6132a36014836128f6565b91506132ae8261326f565b602082019050919050565b5f6020820190508181035f8301526132d081613297565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6133316021836128f6565b915061333c826132d7565b604082019050919050565b5f6020820190508181035f83015261335e81613325565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6133bf6022836128f6565b91506133ca82613365565b604082019050919050565b5f6020820190508181035f8301526133ec816133b3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f6134546010836128f6565b915061345f82613420565b602082019050919050565b5f6020820190508181035f83015261348181613448565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6134e26025836128f6565b91506134ed82613488565b604082019050919050565b5f6020820190508181035f83015261350f816134d6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135706023836128f6565b915061357b82613516565b604082019050919050565b5f6020820190508181035f83015261359d81613564565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6135fe6026836128f6565b9150613609826135a4565b604082019050919050565b5f6020820190508181035f83015261362b816135f2565b9050919050565b7f6c6f636b203a206c6f636b656420746f74616c2073686f756c6420626520736d5f8201527f616c6c6572207468616e2062616c616e63650000000000000000000000000000602082015250565b5f61368c6032836128f6565b915061369782613632565b604082019050919050565b5f6020820190508181035f8301526136b981613680565b905091905056fea26469706673582212206560994df2112a7a3566a6964450e5a70f208e08f653b6c7dbe5830f6abf7d8d64736f6c634300081e0033

Verified Source Code Partial Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: No
FOGnet.sol 452 lines
/**
 *Submitted for verification at Etherscan.io on 2022-12-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract Freezable is Context {
    event Freeze(address indexed holder);
    event Unfreeze(address indexed holder);

    mapping(address => bool) private _frozenAccount;

    modifier whenNotFrozen(address holder) {
        require(!_frozenAccount[holder]);
        _;
    }

    function isFrozen(address holder) public view virtual returns (bool frozen) {
        return _frozenAccount[holder];
    }

    function _freezeAccount(address holder) internal virtual returns (bool success) {
        require(!isFrozen(holder));
        _frozenAccount[holder] = true;
        emit Freeze(holder);
        success = true;
    }

    function _unfreezeAccount(address holder) internal virtual returns (bool success) {
        require(isFrozen(holder));
        _frozenAccount[holder] = false;
        emit Unfreeze(holder);
        success = true;
    }
}

abstract contract Pausable is Context {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");

        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");

        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            _balances[sender] = senderBalance - amount;
        }

        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        unchecked {
            _balances[account] = accountBalance - amount;
        }

        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract ERC20Burnable is Context, ERC20, Ownable {
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "burn amount exceeds allowance");

        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }

        _burn(account, amount);
    }
}

abstract contract ERC20Lockable is ERC20, Ownable {
    struct LockInfo {
        uint256 _releaseTime;
        uint256 _amount;
    }

    mapping(address => LockInfo[]) internal _locks;
    mapping(address => uint256) internal _totalLocked;

    event Lock(address indexed from, uint256 amount, uint256 releaseTime);
    event Unlock(address indexed from, uint256 amount);

    modifier checkLock(address from, uint256 amount) {
        uint256 length = _locks[from].length;
        if (length > 0) {
            autoUnlock(from);
        }
        require(_balances[from] >= _totalLocked[from] + amount, "checkLock : balance exceed");
        _;
    }

    function _lock(address from, uint256 amount, uint256 releaseTime) internal returns (bool success)
    {
        require(
            _balances[from] >= amount + _totalLocked[from],
            "lock : locked total should be smaller than balance"
        );
        _totalLocked[from] = _totalLocked[from] + amount;
        _locks[from].push(LockInfo(releaseTime, amount));
        emit Lock(from, amount, releaseTime);
        success = true;
    }

    function _unlock(address from, uint256 index) internal returns (bool success) {
        LockInfo storage info = _locks[from][index];
        _totalLocked[from] = _totalLocked[from] - info._amount;
        emit Unlock(from, info._amount);
        _locks[from][index] = _locks[from][_locks[from].length - 1];
        _locks[from].pop();
        success = true;
    }

    function lock(address recipient, uint256 amount, uint256 releaseTime) public onlyOwner returns (bool success) {
        require(_balances[recipient] >= amount, "There is not enough balance of holder.");
        _lock(recipient, amount, releaseTime);

        success = true;
    }

    function autoUnlock(address from) public returns (bool success) {
        for (uint256 i = 0; i < _locks[from].length; i++) {
            if (_locks[from][i]._releaseTime < block.timestamp) {
                _unlock(from, i);
            }
        }
        success = true;
    }

    function unlock(address from, uint256 idx) public onlyOwner returns (bool success) {
        require(_locks[from].length > idx, "There is not lock info.");
        _unlock(from, idx);
        success = true;
    }

    function releaseLock(address from) external onlyOwner returns (bool success){
        require(_locks[from].length > 0, "There is not lock info.");

        for (uint256 i = _locks[from].length; i > 0; i--) {
            _unlock(from, i - 1);
        }

        success = true;
    }

    function transferWithLock(address recipient, uint256 amount, uint256 releaseTime) external onlyOwner returns (bool success)
    {
        require(recipient != address(0));
        _transfer(msg.sender, recipient, amount);
        _lock(recipient, amount, releaseTime);
        success = true;
    }

    function lockInfo(address locked, uint256 index) public view returns (uint256 releaseTime, uint256 amount)
    {
        LockInfo memory info = _locks[locked][index];
        releaseTime = info._releaseTime;
        amount = info._amount;
    }

    function totalLocked(address locked) public view returns (uint256 amount, uint256 length){
        amount = _totalLocked[locked];
        length = _locks[locked].length;
    }
}

contract FOGnet is ERC20, Pausable, Freezable, ERC20Burnable, ERC20Lockable {

    constructor() ERC20("FOGnet", "FOG") {
        _mint(msg.sender, 10000000000 * (10 ** decimals()));
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function freezeAccount(address holder) public onlyOwner {
        _freezeAccount(holder);
    }

    function unfreezeAccount(address holder) public onlyOwner {
        _unfreezeAccount(holder);
    }

    function transfer(address to, uint256 amount) public checkLock(msg.sender, amount) override returns (bool) {
        return super.transfer(to, amount);
    }

    function transferFrom(address from, address to, uint256 amount) public checkLock(from, amount) override returns (bool) {
        return super.transferFrom(from, to, amount);
    }

    function balanceOf(address holder) public view override returns (uint256 balance) {
        uint256 totalBalance = super.balanceOf(holder);
        uint256 avaliableBalance = 0;
        (uint256 lockedBalance, uint256 lockedLength) = totalLocked(holder);
        require(totalBalance >= lockedBalance);

        if (lockedLength > 0) {
            for (uint i = 0; i < lockedLength; i++) {
                (uint256 releaseTime, uint256 amount) = lockInfo(holder, i);
                if (releaseTime <= block.timestamp) {
                    avaliableBalance += amount;
                }
            }
        }

        balance = totalBalance - lockedBalance + avaliableBalance;
    }

    function balanceOfTotal(address holder) public view returns (uint256 balance) {
        balance = super.balanceOf(holder);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused whenNotFrozen(from) override {
        super._beforeTokenTransfer(from, to, amount);
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
balanceOfTotal 0xd29dad83 → uint256
decimals 0x313ce567 → uint8
isFrozen 0xe5839836 → bool
lockInfo 0xb2520a7c → uint256, uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
paused 0x5c975abb → bool
symbol 0x95d89b41 → string
totalLocked 0xd8fb9337 → uint256, uint256
totalSupply 0x18160ddd → uint256

Write Contract 18 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
autoUnlock 0xe20bc67b
address from
returns: bool
burn 0x42966c68
uint256 amount
burnFrom 0x79cc6790
address account
uint256 amount
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
freezeAccount 0xf26c159f
address holder
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
lock 0xe2ab691d
address recipient
uint256 amount
uint256 releaseTime
returns: bool
pause 0x8456cb59
No parameters
releaseLock 0xd1c46916
address from
returns: bool
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
transferWithLock 0xde6baccb
address recipient
uint256 amount
uint256 releaseTime
returns: bool
unfreezeAccount 0x788649ea
address holder
unlock 0x7eee288d
address from
uint256 idx
returns: bool
unpause 0x3f4ba83a
No parameters

Top Interactions

AddressTxnsSentReceived
0x2b3bf74B...7921 1 1

Recent Transactions

CSV
|
Hash Method Block Age From/To Value Txn Fee Type
0x56d8f68a...651749 transfer 24,439,615 IN 0x2b3bf74B...7921 0 ETH EIP-1559