Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x3B24ED67481A80609AF2F8913A45Da2049547CfD
Balance 0.100304 ETH
Nonce 1
Code Size 10183 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

10183 bytes
0x6080604052600436106102f5575f3560e01c80637571336a11610189578063bbc0c742116100d8578063dd62ed3e11610092578063ee40166e1161006d578063ee40166e14610920578063ee6bdf8914610935578063f2fde38b14610954578063f8b45b0514610973575f80fd5b8063dd62ed3e146108a8578063e8338a1c146108ec578063eba4c33314610901575f80fd5b8063bbc0c74214610807578063beb08ab914610826578063c02466681461084a578063c4bf91e714610869578063c8c8ebe41461087e578063d85ba06314610893575f80fd5b80639a7a23d611610143578063a96ad9cf1161011e578063a96ad9cf1461077c578063aa49802314610791578063b62496f5146107b0578063b8a7d108146107de575f80fd5b80639a7a23d61461071f578063a457c2d71461073e578063a9059cbb1461075d575f80fd5b80637571336a1461067d5780638a8c523c1461069c5780638da5cb5b146106b0578063924de9b7146106cd578063955b225b146106ec57806395d89b411461070b575f80fd5b806347b48be0116102455780636ddd1713116101ff578063715018a6116101da578063715018a614610617578063719276281461062b57806371fc46881461064a578063751039fc14610669575f80fd5b80636ddd1713146105ae57806370a08231146105ce57806370e6e18214610602575f80fd5b806347b48be0146104d157806349bd5a5e146104f05780634a62bb65146105235780634c24c51d146105415780634fbee193146105625780636a486a8e14610599575f80fd5b80631c499ab0116102b057806327c8f8351161028b57806327c8f835146104635780632e71c87714610478578063313ce5671461049757806339509351146104b2575f80fd5b80631c499ab01461041157806320800a001461043057806323b872dd14610444575f80fd5b8062ae3bf81461030057806306fdde0314610321578063095ea7b31461034b57806310d5de531461037a5780631694505e146103a857806318160ddd146103f3575f80fd5b366102fc57005b5f80fd5b34801561030b575f80fd5b5061031f61031a3660046123f9565b610988565b005b34801561032c575f80fd5b50610335610b03565b604051610342919061241b565b60405180910390f35b348015610356575f80fd5b5061036a610365366004612450565b610b93565b6040519015158152602001610342565b348015610385575f80fd5b5061036a6103943660046123f9565b60146020525f908152604090205460ff1681565b3480156103b3575f80fd5b506103db7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610342565b3480156103fe575f80fd5b506002545b604051908152602001610342565b34801561041c575f80fd5b5061031f61042b36600461247a565b610ba9565b34801561043b575f80fd5b5061031f610c89565b34801561044f575f80fd5b5061036a61045e366004612491565b610d31565b34801561046e575f80fd5b506103db61dead81565b348015610483575f80fd5b5061031f6104923660046123f9565b610d81565b3480156104a2575f80fd5b5060405160128152602001610342565b3480156104bd575f80fd5b5061036a6104cc366004612450565b610e07565b3480156104dc575f80fd5b5061031f6104eb36600461247a565b610e3d565b3480156104fb575f80fd5b506103db7f000000000000000000000000d679c1df5993c4c84543676fc293285d99b02c2981565b34801561052e575f80fd5b50600b5461036a90610100900460ff1681565b34801561054c575f80fd5b50600b5461036a90640100000000900460ff1681565b34801561056d575f80fd5b5061036a61057c3660046123f9565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156105a4575f80fd5b5061040360105481565b3480156105b9575f80fd5b50600b5461036a906301000000900460ff1681565b3480156105d9575f80fd5b506104036105e83660046123f9565b6001600160a01b03165f9081526020819052604090205490565b34801561060d575f80fd5b50610403600d5481565b348015610622575f80fd5b5061031f610f0d565b348015610636575f80fd5b5061031f6106453660046123f9565b610f80565b348015610655575f80fd5b5061031f61066436600461247a565b611011565b348015610674575f80fd5b5061036a6110c1565b348015610688575f80fd5b5061031f6106973660046124dc565b611126565b3480156106a7575f80fd5b5061031f6111b2565b3480156106bb575f80fd5b506005546001600160a01b03166103db565b3480156106d8575f80fd5b5061031f6106e7366004612513565b611238565b3480156106f7575f80fd5b5061031f610706366004612513565b6112af565b348015610716575f80fd5b50610335611328565b34801561072a575f80fd5b5061031f6107393660046124dc565b611337565b348015610749575f80fd5b5061036a610758366004612450565b6113e1565b348015610768575f80fd5b5061036a610777366004612450565b611417565b348015610787575f80fd5b50610403600e5481565b34801561079c575f80fd5b5061031f6107ab36600461247a565b611423565b3480156107bb575f80fd5b5061036a6107ca3660046123f9565b60156020525f908152604090205460ff1681565b3480156107e9575f80fd5b506107f2611507565b60408051928352602083019190915201610342565b348015610812575f80fd5b50600b5461036a9062010000900460ff1681565b348015610831575f80fd5b506007546103db9061010090046001600160a01b031681565b348015610855575f80fd5b5061031f6108643660046124dc565b6115c9565b348015610874575f80fd5b5061040360125481565b348015610889575f80fd5b5061040360095481565b34801561089e575f80fd5b50610403600f5481565b3480156108b3575f80fd5b506104036108c236600461252e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108f7575f80fd5b5061040360115481565b34801561090c575f80fd5b5061031f61091b36600461247a565b611651565b34801561092b575f80fd5b50610403600c5481565b348015610940575f80fd5b506008546103db906001600160a01b031681565b34801561095f575f80fd5b5061031f61096e3660046123f9565b61170b565b34801561097e575f80fd5b50610403600a5481565b6005546001600160a01b031633146109bb5760405162461bcd60e51b81526004016109b29061255a565b60405180910390fd5b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a25919061258f565b90505f8111610a6e5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b60448201526064016109b2565b816001600160a01b031663a9059cbb610a8f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afd91906125a6565b50505050565b606060038054610b12906125c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906125c1565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610b9f3384846117f5565b5060015b92915050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b81526004016109b29061255a565b6064610bde60025490565b610be990600161260d565b610bf39190612624565b811015610c4d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b60648201526084016109b2565b600a8190556040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6005546001600160a01b03163314610cb35760405162461bcd60e51b81526004016109b29061255a565b4780610cf65760405162461bcd60e51b8152602060048201526012602482015271139bc8115512081a5b8818dbdb9d1c9858dd60721b60448201526064016109b2565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610d2d573d5f803e3d5ffd5b5050565b5f610d3d848484611919565b6001600160a01b0384165f90815260016020908152604080832033808552925290912054610d77918691610d72908690612643565b6117f5565b5060019392505050565b6005546001600160a01b03163314610dab5760405162461bcd60e51b81526004016109b29061255a565b6008546040516001600160a01b03918216918316907fd5bab94e3f642caa9f25830fdd5537e2df93309890c3a49998c6d0eb0c8c053b905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612656565b6005546001600160a01b03163314610e675760405162461bcd60e51b81526004016109b29061255a565b60018110158015610e7a57506108708111155b610ed85760405162461bcd60e51b815260206004820152602960248201527f4475726174696f6e206d757374206265206265747765656e203120616e64203260448201526831363020686f75727360b81b60648201526084016109b2565b600e8190556040518181527f64a8317ff01a351e27350b550c078035fcd4951e69c3b45135b2be48673a397d90602001610c7e565b6005546001600160a01b03163314610f375760405162461bcd60e51b81526004016109b29061255a565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b81526004016109b29061255a565b6007546040516001600160a01b036101009092048216918316907fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e7905f90a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b0316331461103b5760405162461bcd60e51b81526004016109b29061255a565b601e81111561108c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2062757920666565732063616e6e6f74206578636565642033302560448201526064016109b2565b600f8190556040518181527f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb90602001610c7e565b6005545f906001600160a01b031633146110ed5760405162461bcd60e51b81526004016109b29061255a565b600b805461ff00191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef905f90a150600190565b6005546001600160a01b031633146111505760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e910160405180910390a15050565b6005546001600160a01b031633146111dc5760405162461bcd60e51b81526004016109b29061255a565b600b805463ffff00001916630101000017905543600c81905542600d55601e600f5560286010556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b6005546001600160a01b031633146112625760405162461bcd60e51b81526004016109b29061255a565b600b805482151563010000000263ff000000199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610c7e90831515815260200190565b6005546001600160a01b031633146112d95760405162461bcd60e51b81526004016109b29061255a565b600b80548215156401000000000264ff00000000199091161790556040517fcc6ba8b2cb05e1012c160fdd5a639e55fef8c9598383d1c8c625f4fa0cda5ccf90610c7e90831515815260200190565b606060048054610b12906125c1565b6005546001600160a01b031633146113615760405162461bcd60e51b81526004016109b29061255a565b7f000000000000000000000000d679c1df5993c4c84543676fc293285d99b02c296001600160a01b0316826001600160a01b0316036113d75760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109b2565b610d2d8282611f5d565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612643565b5f610b9f338484611919565b6005546001600160a01b0316331461144d5760405162461bcd60e51b81526004016109b29061255a565b606461145860025490565b61146390600161260d565b61146d9190612624565b8110156114d25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b60648201526084016109b2565b60098190556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610c7e565b600b545f90819062010000900460ff1661152357505f91829150565b5f600d54426115329190612643565b905061070881116115ba5761012c81116115525750601e92602892509050565b61025881116115675750601492601e92509050565b610384811161157c5750600f92601992509050565b6104b081116115915750600a92601492509050565b6105dc81116115a65750600792600f92509050565b61070881116115ba57506005928392509050565b600f5460105492509250509091565b6005546001600160a01b031633146115f35760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461167b5760405162461bcd60e51b81526004016109b29061255a565b60288111156116d65760405162461bcd60e51b815260206004820152602160248201527f546f74616c2073656c6c20666565732063616e6e6f74206578636565642034306044820152602560f81b60648201526084016109b2565b60108190556040518181527f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c5590602001610c7e565b6005546001600160a01b031633146117355760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b03811661179a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b2565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b2565b6001600160a01b0382166118b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b2565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661193f5760405162461bcd60e51b81526004016109b290612669565b6001600160a01b0382166119655760405162461bcd60e51b81526004016109b2906126ae565b600b5462010000900460ff166119f7576001600160a01b0383165f9081526013602052604090205460ff16806119b257506001600160a01b0382165f9081526013602052604090205460ff165b6119f75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109b2565b805f03611a0e57611a0983835f611fb0565b505050565b600b54610100900460ff1615611cea576005546001600160a01b03848116911614801590611a4a57506005546001600160a01b03838116911614155b8015611a5e57506001600160a01b03821615155b8015611a7557506001600160a01b03821661dead14155b8015611abb57506001600160a01b0383165f9081526013602052604090205460ff1680611ab957506001600160a01b0382165f9081526013602052604090205460ff165b155b8015611aca575060075460ff16155b15611cea576001600160a01b0383165f9081526015602052604090205460ff168015611b0e57506001600160a01b0382165f9081526014602052604090205460ff16155b15611bdf57600954811115611b715760405162461bcd60e51b815260206004820152602360248201527f4275792065786365656473206d6178207472616e73616374696f6e20616d6f75604482015262373a1760e91b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611b969083612656565b1115611bda5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b611cea565b6001600160a01b0382165f9081526015602052604090205460ff168015611c1e57506001600160a01b0383165f9081526014602052604090205460ff16155b15611c8157600954811115611bda5760405162461bcd60e51b8152602060048201526024808201527f53656c6c2065786365656473206d6178207472616e73616374696f6e20616d6f6044820152633ab73a1760e11b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611ca69083612656565b1115611cea5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b305f9081526020819052604090205480158015908190611d135750600b546301000000900460ff165b8015611d22575060075460ff16155b8015611d4657506001600160a01b0385165f9081526015602052604090205460ff16155b8015611d6a57506001600160a01b0385165f9081526013602052604090205460ff16155b8015611d8e57506001600160a01b0384165f9081526013602052604090205460ff16155b15611db3576007805460ff19166001179055611da861209b565b6007805460ff191690555b6007546001600160a01b0386165f9081526013602052604090205460ff91821615911680611df857506001600160a01b0385165f9081526013602052604090205460ff165b15611e0057505f5b5f8115611f49575f80611e11611507565b6001600160a01b038a165f90815260156020526040902054919350915060ff1615611e53576064611e42828961260d565b611e4c9190612624565b9250611e8c565b6001600160a01b0389165f9081526015602052604090205460ff1615611e8c576064611e7f838961260d565b611e899190612624565b92505b8215611f3a575f600d5442611ea19190612643565b9050600e54610e10611eb3919061260d565b8110611ed5578360115f828254611eca9190612656565b90915550611f2d9050565b5f6064611ee386601461260d565b611eed9190612624565b90505f611efa8287612643565b90508160125f828254611f0d9190612656565b925050819055508060115f828254611f259190612656565b909155505050505b611f388a3086611fb0565b505b611f448388612643565b965050505b611f54878787611fb0565b50505050505050565b6001600160a01b0382165f81815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fd65760405162461bcd60e51b81526004016109b290612669565b6001600160a01b038216611ffc5760405162461bcd60e51b81526004016109b2906126ae565b6001600160a01b0383165f9081526020819052604081208054839290612023908490612643565b90915550506001600160a01b0382165f908152602081905260408120805483929061204f908490612656565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190c91815260200190565b6002600654036120ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b2565b6002600655305f9081526020819052604081205490505f6012546011546121149190612656565b9050811580612121575080155b1561212d575050612225565b5f6103e861213a60025490565b61214590600561260d565b61214f9190612624565b90508083111561215d578092505b82476121688261222c565b5f6121738247612643565b90505f8560125483612185919061260d565b61218f9190612624565b90505f61219c8284612643565b5f601281905560118190556008546040519293506001600160a01b03169184156108fc0291859190818181858888f193505050501580156121df573d5f803e3d5ffd5b506007546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f1935050505015801561221b573d5f803e3d5ffd5b5050505050505050505b6001600655565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061225f5761225f6126f1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ff9190612705565b81600181518110612312576123126126f1565b60200260200101906001600160a01b031690816001600160a01b03168152505061235d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117f5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123b19085905f90869030904290600401612720565b5f604051808303815f87803b1580156123c8575f80fd5b505af11580156123da573d5f803e3d5ffd5b505050505050565b6001600160a01b03811681146123f6575f80fd5b50565b5f60208284031215612409575f80fd5b8135612414816123e2565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612461575f80fd5b823561246c816123e2565b946020939093013593505050565b5f6020828403121561248a575f80fd5b5035919050565b5f805f606084860312156124a3575f80fd5b83356124ae816123e2565b925060208401356124be816123e2565b929592945050506040919091013590565b80151581146123f6575f80fd5b5f80604083850312156124ed575f80fd5b82356124f8816123e2565b91506020830135612508816124cf565b809150509250929050565b5f60208284031215612523575f80fd5b8135612414816124cf565b5f806040838503121561253f575f80fd5b823561254a816123e2565b91506020830135612508816123e2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561259f575f80fd5b5051919050565b5f602082840312156125b6575f80fd5b8151612414816124cf565b600181811c908216806125d557607f821691505b6020821081036125f357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba357610ba36125f9565b5f8261263e57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ba357610ba36125f9565b80820180821115610ba357610ba36125f9565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612715575f80fd5b8151612414816123e2565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127705784516001600160a01b03168352938301939183019160010161274b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ea2b08f0288b3144b314e7e76bd5e205bc44337b205d50c318a46912c30b851e64736f6c63430008190033

Verified Source Code Partial Match

Compiler: v0.8.25+commit.b61c2a91 EVM: cancun Optimization: Yes (200 runs)
Nodez.sol 818 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

/* 
     Nodez is officially incubated by Sentinel Incubator - https://sentinelbot.ai
     
     Deploy and manage blockchain nodes with unprecedented ease. 
     Earn rewards and contribute to network security without technical expertise. 
     Join the decentralized revolution with just a single click. 

     Website: https://nodez.tech
     Dapp: https://app.nodez.tech/
     Telegram: https://t.me/NodezTech
     Twitter: https://x.com/nodeztech
     Whitepaper: https://nodez.tech/whitepaper
*/

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

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

contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB, 
        uint liquidity, 
        uint amountAMin, 
        uint amountBMin, 
        address to, 
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB, 
        uint liquidity, 
        uint amountAMin, 
        uint amountBMin, 
        address to, 
        uint deadline, 
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline, 
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut, 
        uint amountInMax, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut, 
        uint amountInMax, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token, 
        uint liquidity, 
        uint amountTokenMin, 
        uint amountETHMin, 
        address to, 
        uint deadline, 
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
}

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract Nodez is ERC20, Ownable, ReentrancyGuard {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public projectWallet;
    address public incubatorWallet;

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    uint8 private _decimals;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public rescueSwap = false;

    uint256 public tradingActiveBlock;
    uint256 public taxStartTime;
    uint256 public redirectionHours = 2160; // Default 2160 hours (90 days)

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    uint256 public tokensForProject;
    uint256 public tokensForIncubator;

    // Exclusions from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // Store AMM pairs
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ProjectWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event IncubatorWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event OwnerForcedSwapBack(uint256 timestamp);

    // Added event declarations for new events
    event TradingEnabled(uint256 blockNumber);
    event LimitsRemoved();
    event MaxTransactionAmountUpdated(uint256 newAmount);
    event MaxWalletUpdated(uint256 newAmount);
    event ExcludedFromMaxTransaction(address account, bool isExcluded);
    event SwapEnabledUpdated(bool enabled);
    event RescueSwapUpdated(bool enabled);
    event BuyFeesUpdated(uint256 totalBuyFee);
    event SellFeesUpdated(uint256 totalSellFee);
    event RedirectionHoursUpdated(uint256 newRedirectionHours);

    constructor() ERC20('Nodez', 'NODE') {
        address _owner = _msgSender();

        _decimals = 18;

        uint256 totalSupply = 100_000_000 * (10 ** _decimals); // 100 million

        maxTransactionAmount = totalSupply * 2 / 100; // 2%
        maxWallet = totalSupply * 2 / 100; // 2%

        // Initial buy and sell fees
        buyTotalFees = 30;
        sellTotalFees = 40;

        projectWallet = 0x1C812f13BEB346678a134Bf89480076e8D299701;
        incubatorWallet = 0x85dBe4ce3c809DAC17E4B1D32a5A2478038a3ae1;

        address currentRouter;

        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; // Avax Mainnet
        } else if (block.chainid == 137) {
            currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Polygon Ropsten
        } else if (block.chainid == 250) {
            currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; // SpookySwap FTM
        } else if (block.chainid == 3) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Ropsten
        } else if (block.chainid == 1 || block.chainid == 4) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Mainnet
        } else if (block.chainid == 8453) {
            currentRouter = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; // Base Mainnet Router
        } else {
            revert("Unsupported chain");
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // Exclude from fees and max transaction amount
        excludeFromFees(_owner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);

        excludeFromMaxTransaction(_owner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);

        _mint(_owner, totalSupply);
        transferOwnership(_owner);
    }

    receive() external payable {}

    // Enable trading (irreversible)
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        taxStartTime = block.timestamp;

        // Set initial tax rates
        buyTotalFees = 30;
        sellTotalFees = 40;

        emit TradingEnabled(block.number);
    }

    // Remove transaction and wallet limits
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    // Update max transaction amount
    function updateMaxTransactionAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100), 'Cannot set maxTransactionAmount lower than 1%');
        maxTransactionAmount = newNum;
        emit MaxTransactionAmountUpdated(newNum);
    }

    // Update max wallet amount
    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100), 'Cannot set maxWallet lower than 1%');
        maxWallet = newNum;
        emit MaxWalletUpdated(newNum);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit ExcludedFromMaxTransaction(updAds, isEx);
    }

    // Only use to disable contract sales in an emergency
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
        emit SwapEnabledUpdated(enabled);
    }

    // Disable swap and send tokens as is
    function updateRescueSwap(bool enabled) external onlyOwner {
        rescueSwap = enabled;
        emit RescueSwapUpdated(enabled);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, 'Cannot remove pair');
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    function updateIncubatorWallet(address newWallet) external onlyOwner {
        emit IncubatorWalletUpdated(newWallet, incubatorWallet);
        incubatorWallet = newWallet;
    }

    function updateRedirectionHours(uint256 newRedirectionHours) external onlyOwner {
    require(newRedirectionHours >= 1 && newRedirectionHours <= 2160, "Duration must be between 1 and 2160 hours");
    redirectionHours = newRedirectionHours;
    emit RedirectionHoursUpdated(newRedirectionHours);
    }


    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    // Timelock tax mechanism
    function getTaxRates() public view returns (uint256 buyFee, uint256 sellFee) {
        if (!tradingActive) {
            return (0, 0);
        }

        uint256 timeElapsed = block.timestamp - taxStartTime;

        if (timeElapsed <= 30 minutes) {
            if (timeElapsed <= 5 minutes) {
                return (30, 40);
            } else if (timeElapsed <= 10 minutes) {
                return (20, 30);
            } else if (timeElapsed <= 15 minutes) {
                return (15, 25);
            } else if (timeElapsed <= 20 minutes) {
                return (10, 20);
            } else if (timeElapsed <= 25 minutes) {
                return (7, 15);
            } else if (timeElapsed <= 30 minutes) {
                return (5, 5);
            }
        }

        // After the timelock period, use the manually set fees
        return (buyTotalFees, sellTotalFees);
    }

    function updateBuyFees(uint256 newBuyFee) external onlyOwner {
        require(newBuyFee <= 30, "Total buy fees cannot exceed 30%");
        buyTotalFees = newBuyFee;
        emit BuyFeesUpdated(newBuyFee);
    }

    function updateSellFees(uint256 newSellFee) external onlyOwner {
        require(newSellFee <= 40, "Total sell fees cannot exceed 40%");
        sellTotalFees = newSellFee;
        emit SellFeesUpdated(newSellFee);
    }

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

        if (!tradingActive) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], 'Trading is not active.');
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != deadAddress && !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) && !swapping) {
                // On buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, 'Buy exceeds max transaction amount.');
                    require(amount + balanceOf(to) <= maxWallet, 'Exceeds max wallet.');
                }
                // On sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, 'Sell exceeds max transaction amount.');
                } else {
                    require(amount + balanceOf(to) <= maxWallet, 'Exceeds max wallet.');
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance > 0;

        if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // If any account is excluded from fees, remove fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            (uint256 buyFee, uint256 sellFee) = getTaxRates();

            if (automatedMarketMakerPairs[to]) {
                fees = amount * sellFee / 100;
            } else if (automatedMarketMakerPairs[from]) {
                fees = amount * buyFee / 100;
            }

            if (fees > 0) {
                uint256 timeElapsed = block.timestamp - taxStartTime;
                if (timeElapsed >= redirectionHours * 1 hours) {
                    // After the specified hours, redirect 100% of the fees to the project wallet
                    tokensForProject += fees;
                } else {
                    uint256 incubatorShare = fees * 20 / 100;
                    uint256 projectShare = fees - incubatorShare;

                    tokensForIncubator += incubatorShare;
                    tokensForProject += projectShare;
                }

                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private nonReentrant {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForProject + tokensForIncubator;

        if (contractBalance == 0 || totalTokensToSwap == 0) return;

        // Limit swap to 0.5% of total supply
        uint256 maxTokensToSwap = totalSupply() * 5 / 1000;
        if (contractBalance > maxTokensToSwap) {
            contractBalance = maxTokensToSwap;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForIncubator = ethBalance * tokensForIncubator / totalTokensToSwap;
        uint256 ethForProject = ethBalance - ethForIncubator;

        tokensForIncubator = 0;
        tokensForProject = 0;

        payable(incubatorWallet).transfer(ethForIncubator);
        payable(projectWallet).transfer(ethForProject);
    }

    // Rescue ETH from the contract to the owner's wallet
    function rescueETH() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        require(contractETHBalance > 0, "No ETH in contract");
        payable(owner()).transfer(contractETHBalance);
    }

    // Rescue ERC20 tokens from the contract to the owner's wallet
    function rescueTokens(address tokenAddress) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        uint256 contractTokenBalance = token.balanceOf(address(this));
        require(contractTokenBalance > 0, "No tokens in contract");
        token.transfer(owner(), contractTokenBalance);
    }
}

Read Contract

_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
getTaxRates 0xb8a7d108 → uint256, uint256
incubatorWallet 0xee6bdf89 → address
isExcludedFromFees 0x4fbee193 → bool
limitsInEffect 0x4a62bb65 → bool
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
projectWallet 0xbeb08ab9 → address
redirectionHours 0xa96ad9cf → uint256
rescueSwap 0x4c24c51d → bool
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
symbol 0x95d89b41 → string
taxStartTime 0x70e6e182 → uint256
tokensForIncubator 0xc4bf91e7 → uint256
tokensForProject 0xe8338a1c → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
tradingActiveBlock 0xee40166e → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 23 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableTrading 0x8a8c523c
No parameters
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
removeLimits 0x751039fc
No parameters
returns: bool
renounceOwnership 0x715018a6
No parameters
rescueETH 0x20800a00
No parameters
rescueTokens 0x00ae3bf8
address tokenAddress
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x71fc4688
uint256 newBuyFee
updateIncubatorWallet 0x2e71c877
address newWallet
updateMaxTransactionAmount 0xaa498023
uint256 newNum
updateMaxWallet 0x1c499ab0
uint256 newNum
updateProjectWallet 0x71927628
address newWallet
updateRedirectionHours 0x47b48be0
uint256 newRedirectionHours
updateRescueSwap 0x955b225b
bool enabled
updateSellFees 0xeba4c333
uint256 newSellFee
updateSwapEnabled 0x924de9b7
bool enabled

Recent Transactions

No transactions found for this address