Address Contract Verified
Address
0x65DfA0221e856fe69dA6F967386D1E9a62d0d55D
Balance
0 ETH
Nonce
1
Code Size
10646 bytes
Creator
0x711825c6...55D8 at tx 0xecfe51dc...e7f155
Indexed Transactions
0
Contract Bytecode
10646 bytes
0x6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610899578063e52fb9ec146108b9578063f2fde38b146108cf578063f5fb756f146108ef57600080fd5b8063d8bd2dd1146107f3578063dbe66ca014610823578063dd62ed3e1461085357600080fd5b8063be617fa01461074d578063c3a3c03214610763578063c3f4f54f14610778578063cc1776d31461078d578063cfd1940e146107a3578063d46b6a30146107c357600080fd5b8063a457c2d71161012e578063a457c2d7146106a2578063a68bdac7146106c2578063a9059cbb146106d7578063ab64cfdc146106f7578063b40d09e214610717578063bc43d8491461072d57600080fd5b80638124f7ac146105e6578063817d4bff146105fc578063868b01411461061c5780638da5cb5b1461063c57806395d89b411461065a5780639b39b65f1461068857600080fd5b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a082311461054e578063715018a61461058457806375f0a874146105995780637b9e987a146105d157600080fd5b80635149f984146104fe57806351bc3c851461051e578063629ece491461053857600080fd5b806333ae83251461045e578063395093511461047e57806341aec3571461049e57806346e35f03146104b3578063479881bf146104c85780634f7041a5146104e857600080fd5b80631d4eaead116102865780631d4eaead146103b75780631eb25d13146103cd57806323b872dd146103e25780632d48f84f14610402578063313ce567146104225780633227925f1461043e57600080fd5b80630612f39d146102d957806306fdde03146102f0578063095ea7b3146103385780630eff4c641461036857806318160ddd1461038c5780631d2cb02d146103a157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610905565b005b3480156102fc57600080fd5b5060408051808201909152600d81526c41726d7374726f6e6720496e7560981b60208201525b60405161032f919061269a565b60405180910390f35b34801561034457600080fd5b50610358610353366004612598565b610ade565b604051901515815260200161032f565b34801561037457600080fd5b5061037e60135481565b60405190815260200161032f565b34801561039857600080fd5b5060065461037e565b3480156103ad57600080fd5b5061037e600c5481565b3480156103c357600080fd5b5061037e600a5481565b3480156103d957600080fd5b5061037e610af5565b3480156103ee57600080fd5b506103586103fd36600461252b565b610b12565b34801561040e57600080fd5b506102ee61041d366004612658565b610ba9565b34801561042e57600080fd5b506040516012815260200161032f565b34801561044a57600080fd5b506102ee6104593660046125fb565b610d34565b34801561046a57600080fd5b506102ee6104793660046125fb565b610d6e565b34801561048a57600080fd5b50610358610499366004612598565b610e36565b3480156104aa57600080fd5b506102ee610e6d565b3480156104bf57600080fd5b50610358610e9e565b3480156104d457600080fd5b506102ee6104e33660046125fb565b610ede565b3480156104f457600080fd5b5061037e60075481565b34801561050a57600080fd5b506102ee61051936600461256b565b610fa3565b34801561052a57600080fd5b506014546103589060ff1681565b34801561054457600080fd5b5061037e600e5481565b34801561055a57600080fd5b5061037e6105693660046124b4565b6001600160a01b031660009081526001602052604090205490565b34801561059057600080fd5b506102ee611048565b3480156105a557600080fd5b506011546105b9906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b3480156105dd57600080fd5b506102ee6110fb565b3480156105f257600080fd5b5061037e60095481565b34801561060857600080fd5b506102ee6106173660046124b4565b611191565b34801561062857600080fd5b506102ee6106373660046125c3565b6111ca565b34801561064857600080fd5b506000546001600160a01b03166105b9565b34801561066657600080fd5b5060408051808201909152600581526410549354d560da1b6020820152610322565b34801561069457600080fd5b506017546103589060ff1681565b3480156106ae57600080fd5b506103586106bd366004612598565b611202565b3480156106ce57600080fd5b506102ee61127e565b3480156106e357600080fd5b506103586106f2366004612598565b6112b2565b34801561070357600080fd5b506102ee61071236600461256b565b6112bf565b34801561072357600080fd5b5061037e60155481565b34801561073957600080fd5b506102ee6107483660046125fb565b6113a1565b34801561075957600080fd5b5061037e600b5481565b34801561076f57600080fd5b5061037e6113da565b34801561078457600080fd5b5061037e6113ff565b34801561079957600080fd5b5061037e60085481565b3480156107af57600080fd5b506102ee6107be3660046125fb565b61145f565b3480156107cf57600080fd5b506103586107de3660046124b4565b60056020526000908152604090205460ff1681565b3480156107ff57600080fd5b5061035861080e3660046124b4565b60046020526000908152604090205460ff1681565b34801561082f57600080fd5b5061035861083e3660046124b4565b60036020526000908152604090205460ff1681565b34801561085f57600080fd5b5061037e61086e3660046124f3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108a557600080fd5b506102ee6108b436600461256b565b611497565b3480156108c557600080fd5b5061037e60125481565b3480156108db57600080fd5b506102ee6108ea3660046124b4565b611571565b3480156108fb57600080fd5b5061037e600d5481565b61090e3361169a565b6109335760405162461bcd60e51b815260040161092a90612724565b60405180910390fd5b6016544210156109785760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b604482015260640161092a565b600f546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156109c057600080fd5b505afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190612613565b60175490915060ff1615610a3057610a1362093a80426127cb565b601655600a610a238260026128f1565b610a2d91906127e3565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab091906125df565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b6000610aeb3384846116c7565b5060015b92915050565b610b016012600a612846565b610b0f906305f5e1006128f1565b81565b6000610b1f8484846117ba565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610b8a5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b604482015260640161092a565b610b9e8533610b998685612910565b6116c7565b506001949350505050565b610bb23361169a565b610bce5760405162461bcd60e51b815260040161092a90612724565b60006002610bdf600a6103e86127e3565b610be991906127e3565b9050808711158015610bfb5750808611155b8015610c075750808511155b610c485760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b604482015260640161092a565b6103e882610c5685876127cb565b610c6091906127cb565b14610cb75760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b606482015260840161092a565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b610d3d3361169a565b610d595760405162461bcd60e51b815260040161092a90612724565b610d6b610d6642836127cb565b611971565b50565b610d773361169a565b610d935760405162461bcd60e51b815260040161092a90612724565b6002811115610dfa5760405162461bcd60e51b815260206004820152602d60248201527f44756d70206d6561737572652063616e277420626520756e646572203530252060448201526c1bd9881d1a19481dd85b1b195d609a1b606482015260840161092a565b600e8190556040518181527fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9906020015b60405180910390a150565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610aeb918590610b999086906127cb565b610e763361169a565b610e925760405162461bcd60e51b815260040161092a90612724565b610e9c60016119b4565b565b60006103e8601354600654610eb391906128f1565b610ebd91906127e3565b600f546001600160a01b031660009081526001602052604090205411919050565b610ee73361169a565b610f035760405162461bcd60e51b815260040161092a90612724565b6032811115610f6e5760405162461bcd60e51b815260206004820152603160248201527f4d61782077616c6c6574202063616e277420626520756e646572203225206f666044820152702074686520746f74616c20737570706c7960781b606482015260840161092a565b600d8190556040518181527fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe3885590602001610e2b565b610fac3361169a565b610fc85760405162461bcd60e51b815260040161092a90612724565b600f546001600160a01b038381169116141561101d5760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b604482015260640161092a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b3361105b6000546001600160a01b031690565b6001600160a01b0316146110b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161092a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6111043361169a565b6111205760405162461bcd60e51b815260040161092a90612724565b601554156111625760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b604482015260640161092a565b426015556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b6011546001600160a01b031633146111a857600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6111d33361169a565b6111ef5760405162461bcd60e51b815260040161092a90612724565b6014805460ff1916911515919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156112655760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b604482015260640161092a565b6112743385610b998685612910565b5060019392505050565b6112873361169a565b6112a35760405162461bcd60e51b815260040161092a90612724565b6017805460ff19166001179055565b6000610aeb3384846117ba565b6112c83361169a565b6112e45760405162461bcd60e51b815260040161092a90612724565b6001600160a01b03821630141561133d5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e7472616374000000000000604482015260640161092a565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d391015b60405180910390a15050565b6113aa3361169a565b6113c65760405162461bcd60e51b815260040161092a90612724565b6103e88111156113d557600080fd5b601355565b60006016544210156113f957426016546113f49190612910565b905090565b50600090565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5460065461143d6012600a612846565b61144b906305f5e1006128f1565b6114559190612910565b6113f491906127cb565b6114683361169a565b6114845760405162461bcd60e51b815260040161092a90612724565b600f81111561149257600080fd5b601255565b6114a03361169a565b6114bc5760405162461bcd60e51b815260040161092a90612724565b6001600160a01b0382163014156115155760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e7472616374000000000000604482015260640161092a565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed49101611395565b336115846000546001600160a01b031690565b6001600160a01b0316146115da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161092a565b6001600160a01b03811661163f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b0383811691161480610aef5750506011546001600160a01b0390811691161490565b6001600160a01b0383166117115760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b604482015260640161092a565b6001600160a01b0382166117595760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b604482015260640161092a565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118055760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b604482015260640161092a565b6001600160a01b03821661184e5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b604482015260640161092a565b6001600160a01b03831660009081526003602052604090205460ff168061188d57506001600160a01b03821660009081526003602052604090205460ff165b156118a25761189d838383611b6d565b505050565b6001600160a01b03821660009081526004602052604090205460ff161561191a5760006015541161190f5760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b604482015260640161092a565b61189d838383611c55565b6000601554116119665760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b604482015260640161092a565b61189d838383611eb1565b601654811161197f57600080fd5b60168190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610e2b565b6011805460ff60a01b1916600160a01b17905530600090815260016020526040812054600c54600b549192916119ea91906127cb565b601254600f546001600160a01b0316600090815260016020526040812054929350916103e891611a19916128f1565b611a2391906127e3565b905081611a3257505050611b5d565b8315611a4e575030600090815260016020526040902054611a5e565b80831015611a5e57505050611b5d565b6000611a68610e9e565b611a8a5782600b5483611a7b91906128f1565b611a8591906127e3565b611a8d565b60005b90506000611a9b8284612910565b90506000611aaa6002846127e3565b90506000611ab883836127cb565b905047611ac482612207565b6000611ad08247612910565b90508515611afd57600083611ae586846128f1565b611aef91906127e3565b9050611afb8582612381565b505b6011546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611b4a576040519150601f19603f3d011682016040523d82523d6000602084013e611b4f565b606091505b505050505050505050505050505b506011805460ff60a01b19169055565b6001600160a01b03831660009081526001602052604090205481811015611ba65760405162461bcd60e51b815260040161092a906126ed565b6001600160a01b03841660009081526001602052604081208054849290611bce908490612910565b90915550506001600160a01b03831660009081526001602052604081208054849290611bfb9084906127cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c4791815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526001602052604090205481811015611c8e5760405162461bcd60e51b815260040161092a906126ed565b6001600160a01b0380851660009081526005602052604080822054928616825281205460ff9283169216908115611cf65760155460b490611cd09082906127cb565b421015611cea57611ce3816103e7612441565b9150611cf0565b60085491505b50611d2f565b8215611d2a57601554603c90611d0d9082906127cb565b421015611d2057611ce3816103e7612441565b5050600754611d2f565b506009545b600f546001600160a01b03888116911614801590611d50575060145460ff16155b8015611d665750601154600160a01b900460ff16155b15611d7557611d7560006119b4565b6000611d848683600a54612487565b90506000611da28784600b54600c54611d9d91906127cb565b612487565b90506000611db082846127cb565b611dba9089612910565b6001600160a01b038b16600090815260016020526040812080549293508a92909190611de7908490612910565b90915550503060009081526001602052604081208054849290611e0b9084906127cb565b925050819055508260066000828254611e249190612910565b90915550506001600160a01b03891660009081526001602052604081208054839290611e519084906127cb565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e9d91815260200190565b60405180910390a350505050505050505050565b6001600160a01b0380841660009081526001602052604080822054928516825290205482821015611ef45760405162461bcd60e51b815260040161092a906126ed565b82600e5483611f0391906127e3565b1015611f515760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572206578636565647320617574686f726973652073656c6c00604482015260640161092a565b600d54611f606012600a612846565b611f6e906305f5e1006128f1565b611f7891906127e3565b611f8284836127cb565b1115611fe85760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60448201526e202520546f74616c20537570706c7960881b606482015260840161092a565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff92831692169081156120505760155460b49061202a9082906127cb565b4210156120445761203d816103e7612441565b915061204a565b60085491505b50612089565b821561208457601554603c906120679082906127cb565b42101561207a5761203d816103e7612441565b5050600754612089565b506009545b600f546001600160a01b038981169116148015906120aa575060145460ff16155b80156120c05750601154600160a01b900460ff16155b156120cf576120cf60006119b4565b60006120de8783600a54612487565b905060006120f78884600b54600c54611d9d91906127cb565b9050600061210582846127cb565b61210f908a612910565b6001600160a01b038c16600090815260016020526040812080549293508b9290919061213c908490612910565b909155505030600090815260016020526040812080548492906121609084906127cb565b9250508190555082600660008282546121799190612910565b90915550506001600160a01b038a16600090815260016020526040812080548392906121a69084906127cb565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121f291815260200190565b60405180910390a35050505050505050505050565b60105461221f9030906001600160a01b0316836116c7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061226257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156122b657600080fd5b505afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee91906124d7565b8160018151811061230f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac9479061235590859060009086903090429060040161275b565b600060405180830381600087803b15801561236f57600080fd5b505af192505050801561189d57505050565b6010546123999030906001600160a01b0316846116c7565b60105460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061243a919061262b565b5050505050565b600080601554426124529190612910565b90508381612461603286612910565b61246b91906128f1565b61247591906127e3565b61247f9084612910565b949350505050565b60006124956103e8806128f1565b826124a085876128f1565b6124aa91906128f1565b61247f91906127e3565b6000602082840312156124c5578081fd5b81356124d08161293d565b9392505050565b6000602082840312156124e8578081fd5b81516124d08161293d565b60008060408385031215612505578081fd5b82356125108161293d565b915060208301356125208161293d565b809150509250929050565b60008060006060848603121561253f578081fd5b833561254a8161293d565b9250602084013561255a8161293d565b929592945050506040919091013590565b6000806040838503121561257d578182fd5b82356125888161293d565b9150602083013561252081612952565b600080604083850312156125aa578182fd5b82356125b58161293d565b946020939093013593505050565b6000602082840312156125d4578081fd5b81356124d081612952565b6000602082840312156125f0578081fd5b81516124d081612952565b60006020828403121561260c578081fd5b5035919050565b600060208284031215612624578081fd5b5051919050565b60008060006060848603121561263f578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215612670578182fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000602080835283518082850152825b818110156126c6578581018301518582016040015282016126aa565b818111156126d75783604083870101525b50601f01601f1916929092016040019392505050565b60208082526018908201527f5472616e7366657220657863656564732062616c616e63650000000000000000604082015260600190565b60208082526018908201527f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156127aa5784516001600160a01b031683529383019391830191600101612785565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127de576127de612927565b500190565b6000826127fe57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561283e57816000190482111561282457612824612927565b8085161561283157918102915b93841c9390800290612808565b509250929050565b60006124d060ff84168360008261285f57506001610aef565b8161286c57506000610aef565b8160018114612882576002811461288c576128a8565b6001915050610aef565b60ff84111561289d5761289d612927565b50506001821b610aef565b5060208310610133831016604e8410600b84101617156128cb575081810a610aef565b6128d58383612803565b80600019048211156128e9576128e9612927565b029392505050565b600081600019048311821515161561290b5761290b612927565b500290565b60008282101561292257612922612927565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610d6b57600080fd5b8015158114610d6b57600080fdfea26469706673582212204d0f321d7cbc45dbda92f5977369543abaf2e3d8206ef9331fc10ebb36584f3b64736f6c63430008040033
Verified Source Code Full Match
Compiler: v0.8.4+commit.c7e474f2
EVM: istanbul
Optimization: Yes (200 runs)
ARMST.sol 524 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./Libraries.sol";
contract ARMST is IERC20Metadata, Ownable
{
mapping (address => uint) private _balances;
mapping (address => mapping (address => uint)) private _allowances;
mapping(address => bool) public excludedFromFees;
mapping(address => bool) public excludedFromLimit;
mapping(address=>bool) public isAMM;
//Token Info
string private constant _name = 'Armstrong Inu';
string private constant _symbol = 'ARMST';
uint8 private constant _decimals = 18;
uint public constant InitialSupply= 100000000*10**_decimals;
uint private constant DefaultLiquidityLockTime=7 days;
//0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 testnet router
//0x10ED43C718714eb63d5aA57B78B54704E256024E mainnet router
address private constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
//variables that track balanceLimit and sellLimit,
//can be updated based on circulating supply and Sell- and BalanceLimitDividers
uint private _circulatingSupply =InitialSupply;
//Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
uint public buyTax = 30;
uint public sellTax = 30;
uint public transferTax = 0;
uint public burnTax=0;
uint public liquidityTax=0;
uint public marketingTax=1000;
uint constant TAX_DENOMINATOR=1000;
uint constant MAXTAXDENOMINATOR=10;
uint public LimitV = 50;
uint public LimitSell = 1;
address private _uniswapPairAddress;
IUniswapRouter private _uniswapRouter;
//TODO: marketingWallet
address public marketingWallet;
//Only marketingWallet can change marketingWallet
function ChangeMarketingWallet(address newWallet) public{
require(msg.sender==marketingWallet);
marketingWallet=newWallet;
}
//modifier for functions only the team can call
modifier onlyTeam() {
require(_isTeam(msg.sender), "Caller not Team or Owner");
_;
}
//Checks if address is in Team, is needed to give Team access even if contract is renounced
//Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
function _isTeam(address addr) private view returns (bool){
return addr==owner()||addr==marketingWallet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Constructor///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
constructor () {
uint deployerBalance=_circulatingSupply;
_balances[msg.sender] = deployerBalance;
emit Transfer(address(0), msg.sender, deployerBalance);
// Uniswap Router
_uniswapRouter = IUniswapRouter(UniswapRouter);
//Creates a Uniswap Pair
_uniswapPairAddress = IUniswapFactory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
isAMM[_uniswapPairAddress]=true;
//contract creator is by default marketing wallet
marketingWallet=msg.sender;
//owner uniswap router and contract is excluded from Taxes
excludedFromFees[msg.sender]=true;
excludedFromFees[UniswapRouter]=true;
excludedFromFees[address(this)]=true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Transfer functionality////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//transfer function, every transfer runs through this function
function _transfer(address sender, address recipient, uint amount) private{
require(sender != address(0), "Transfer from zero");
require(recipient != address(0), "Transfer to zero");
//Pick transfer
if(excludedFromFees[sender] || excludedFromFees[recipient])
_feelessTransfer(sender, recipient, amount);
else if(excludedFromLimit[recipient]){
//once trading is enabled, it can't be turned off again
require(LaunchTimestamp>0,"trading not yet enabled");
_LimitlessFonctionTransfer(sender,recipient,amount);
}
else {
//once trading is enabled, it can't be turned off again
require(LaunchTimestamp>0,"trading not yet enabled");
_taxedTransfer(sender,recipient,amount);
}
}
//applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes
function _taxedTransfer(address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
uint recipientBalance = _balances[recipient];
require(senderBalance >= amount, "Transfer exceeds balance");
require(senderBalance/LimitSell >= amount, "Transfer exceeds authorise sell");
require((recipientBalance + amount ) <= InitialSupply/LimitV, "Wallet contain more than certain % Total Supply");
bool isBuy=isAMM[sender];
bool isSell=isAMM[recipient];
uint tax;
if(isSell){
uint SellTaxDuration=180 seconds;
if(block.timestamp<LaunchTimestamp+SellTaxDuration){
tax=_getStartTax(SellTaxDuration,999);
}else tax=sellTax;
}
else if(isBuy){
uint BuyTaxDuration=60 seconds;
if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
tax=_getStartTax(BuyTaxDuration,999);
}else tax=buyTax;
} else tax=transferTax;
if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
_swapContractToken(false);
//Calculates the exact token amount for each tax
uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
//staking and liquidity Tax get treated the same, only during conversion they get split
uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
//Subtract the Taxed Tokens from the amount
uint taxedAmount=amount-(tokensToBeBurnt + contractToken);
_balances[sender]-=amount;
//Adds the taxed tokens to the contract wallet
_balances[address(this)] += contractToken;
//Burns tokens
_circulatingSupply-=tokensToBeBurnt;
_balances[recipient]+=taxedAmount;
emit Transfer(sender,recipient,taxedAmount);
}
//Start tax drops depending on the time since launch, enables bot protection and Dump protection
function _getStartTax(uint duration, uint maxTax) private view returns (uint){
uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
return maxTax-((maxTax-50)*timeSinceLaunch/duration);
}
//Calculates the token that should be taxed
function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
}
//Feeless transfer only transfers and autostakes
function _feelessTransfer(address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
require(senderBalance >= amount, "Transfer exceeds balance");
_balances[sender]-=amount;
_balances[recipient]+=amount;
emit Transfer(sender,recipient,amount);
}
///////////////////////////////YeaaaahBrooooooo//////////addd
function _LimitlessFonctionTransfer (address sender, address recipient, uint amount) private{
uint senderBalance = _balances[sender];
require(senderBalance >= amount, "Transfer exceeds balance");
bool isBuy=isAMM[sender];
bool isSell=isAMM[recipient];
uint tax;
if(isSell){
uint SellTaxDuration=180 seconds;
if(block.timestamp<LaunchTimestamp+SellTaxDuration){
tax=_getStartTax(SellTaxDuration,999);
}else tax=sellTax;
}
else if(isBuy){
uint BuyTaxDuration=60 seconds;
if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
tax=_getStartTax(BuyTaxDuration,999);
}else tax=buyTax;
} else tax=transferTax;
if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
_swapContractToken(false);
//Calculates the exact token amount for each tax
uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
//staking and liquidity Tax get treated the same, only during conversion they get split
uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
//Subtract the Taxed Tokens from the amount
uint taxedAmount=amount-(tokensToBeBurnt + contractToken);
_balances[sender]-=amount;
//Adds the taxed tokens to the contract wallet
_balances[address(this)] += contractToken;
//Burns tokens
_circulatingSupply-=tokensToBeBurnt;
_balances[recipient]+=taxedAmount;
emit Transfer(sender,recipient,taxedAmount);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Swap Contract Tokens yeaaaaah Broo//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Locks the swap if already swapping
bool private _isSwappingContractModifier;
modifier lockTheSwap {
_isSwappingContractModifier = true;
_;
_isSwappingContractModifier = false;
}
//Sets the permille of uniswap pair to trigger liquifying taxed token
uint public swapTreshold=2;
function setSwapTreshold(uint newSwapTresholdPermille) public onlyTeam{
require(newSwapTresholdPermille<=15);//MaxTreshold= 1.5%
swapTreshold=newSwapTresholdPermille;
}
//Sets the max Liquidity where swaps for Liquidity still happen
uint public overLiquifyTreshold=150;
function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyTeam{
require(newOverLiquifyTresholdPermille<=1000);
overLiquifyTreshold=newOverLiquifyTresholdPermille;
}
//Sets the taxes Burn+marketing+liquidity tax needs to equal the TAX_DENOMINATOR (1000)
//buy, sell and transfer tax are limited by the MAXTAXDENOMINATOR
event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity);
function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity) public onlyTeam{
uint maxTax=(TAX_DENOMINATOR/MAXTAXDENOMINATOR)/2;
require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
require(burn+marketing+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
buyTax=buy;
sellTax=sell;
transferTax=transfer_;
marketingTax=marketing;
liquidityTax=liquidity;
burnTax=burn;
emit OnSetTaxes(buy, sell, transfer_, burn, marketing,liquidity);
}
event OnSetLimit(uint LimitV2);
function SetLimit(uint LimitV2) public onlyTeam{
require(LimitV2<=50,"Max wallet can't be under 2% of the total supply");
LimitV=LimitV2;
emit OnSetLimit(LimitV2);
}
event OnSetSell(uint LimitSell2);
function SetSell(uint LimitSell2) public onlyTeam{
require(LimitSell2<=2,"Dump measure can't be under 50% of the wallet");
LimitSell=LimitSell2;
emit OnSetSell(LimitSell2);
}
//If liquidity is over the treshold, convert 100% of Token to Marketing ETH to avoid overliquifying
function isOverLiquified() public view returns(bool){
return _balances[_uniswapPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
}
//swaps the token on the contract for Marketing ETH and LP Token.
//always swaps a percentage of the LP pair balance to avoid price impact
function _swapContractToken(bool ignoreLimits) private lockTheSwap{
uint contractBalance=_balances[address(this)];
uint totalTax=liquidityTax+marketingTax;
//swaps each time it reaches swapTreshold of uniswap pair to avoid large prize impact
uint tokenToSwap=_balances[_uniswapPairAddress]*swapTreshold/1000;
//nothing to swap at no tax
if(totalTax==0)return;
//only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
//Ignore limits swaps 100% of the contractBalance
if(ignoreLimits)
tokenToSwap=_balances[address(this)];
else if(contractBalance<tokenToSwap)
return;
//splits the token in TokenForLiquidity and tokenForMarketing
//if over liquified, 0 tokenForLiquidity
uint tokenForLiquidity=
isOverLiquified()?0
:(tokenToSwap*liquidityTax)/totalTax;
uint tokenForMarketing= tokenToSwap-tokenForLiquidity;
uint LiqHalf=tokenForLiquidity/2;
//swaps marktetingToken and the liquidity token half for ETH
uint swapToken=LiqHalf+tokenForMarketing;
//Gets the initial ETH balance, so swap won't touch any contract ETH
uint initialETHBalance = address(this).balance;
_swapTokenForETH(swapToken);
uint newETH=(address(this).balance - initialETHBalance);
//calculates the amount of ETH belonging to the LP-Pair and converts them to LP
if(tokenForLiquidity>0){
uint liqETH = (newETH*LiqHalf)/swapToken;
_addLiquidity(LiqHalf, liqETH);
}
//Sends all the marketing ETH to the marketingWallet
(bool sent,)=marketingWallet.call{value:address(this).balance}("");
sent=true;
}
//swaps tokens on the contract for ETH
function _swapTokenForETH(uint amount) private {
_approve(address(this), address(_uniswapRouter), amount);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _uniswapRouter.WETH();
try _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount,
0,
path,
address(this),
block.timestamp
){}
catch{}
}
//Adds Liquidity directly to the contract where LP are locked
function _addLiquidity(uint tokenamount, uint ethamount) private {
_approve(address(this), address(_uniswapRouter), tokenamount);
_uniswapRouter.addLiquidityETH{value: ethamount}(
address(this),
tokenamount,
0,
0,
address(this),
block.timestamp
);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//public functions /////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
function getLiquidityReleaseTimeInSeconds() public view returns (uint){
if(block.timestamp<_liquidityUnlockTime)
return _liquidityUnlockTime-block.timestamp;
return 0;
}
function getBurnedTokens() public view returns(uint){
return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Settings//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//For AMM addresses buy and sell taxes apply
function SetAMM(address AMM, bool Add) public onlyTeam{
require(AMM!=_uniswapPairAddress,"can't change uniswap");
isAMM[AMM]=Add;
}
bool public manualSwap;
//switches autoLiquidity and marketing ETH generation during transfers
function SwitchManualSwap(bool manual) public onlyTeam{
manualSwap=manual;
}
//manually converts contract token to LP and staking ETH
function SwapContractToken() public onlyTeam{
_swapContractToken(true);
}
event ExcludeAccount(address account, bool exclude);
//Exclude/Include account from fees (eg. CEX)
function ExcludeAccountFromFees(address account, bool exclude) public onlyTeam{
require(account!=address(this),"can't Include the contract");
excludedFromFees[account]=exclude;
emit ExcludeAccount(account,exclude);
}
/////////////moussss///////////
event ExcludeAccountLimit(address account, bool exclude);
//Exclude/Include account from fees (eg. CEX)
function ExcludedFromLimit(address account, bool exclude) public onlyTeam{
require(account!=address(this),"can't Include the contract");
excludedFromLimit[account]=exclude;
emit ExcludeAccountLimit(account,exclude);
}
//Enables trading. Sets the launch timestamp to the given Value
event OnEnableTrading();
uint public LaunchTimestamp;
function SetupEnableTrading() public onlyTeam{
require(LaunchTimestamp==0,"AlreadyLaunched");
LaunchTimestamp=block.timestamp;
emit OnEnableTrading();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//Liquidity Lock////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//the timestamp when Liquidity unlocks
uint _liquidityUnlockTime;
bool public LPReleaseLimitedTo20Percent;
//Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release.
//That way autoLiquidity can be slowly released
function limitLiquidityReleaseTo20Percent() public onlyTeam{
LPReleaseLimitedTo20Percent=true;
}
//Locks Liquidity for seconds. can only be prolonged
function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyTeam{
_prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
}
event OnProlongLPLock(uint UnlockTimestamp);
function _prolongLiquidityLock(uint newUnlockTime) private{
// require new unlock time to be longer than old one
require(newUnlockTime>_liquidityUnlockTime);
_liquidityUnlockTime=newUnlockTime;
emit OnProlongLPLock(_liquidityUnlockTime);
}
event OnReleaseLP();
//Release Liquidity Tokens once unlock time is over
function LiquidityRelease() public onlyTeam {
//Only callable if liquidity Unlock time is over
require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
IERC20 liquidityToken = IERC20(_uniswapPairAddress);
uint amount = liquidityToken.balanceOf(address(this));
if(LPReleaseLimitedTo20Percent)
{
_liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
//regular liquidity release, only releases 50% at a time and locks liquidity for another week
amount=amount*2/10;
}
liquidityToken.transfer(msg.sender, amount);
emit OnReleaseLP();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//external//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
receive() external payable {}
function name() external pure override returns (string memory) {
return _name;
}
function symbol() external pure override returns (string memory) {
return _symbol;
}
function decimals() external pure override returns (uint8) {
return _decimals;
}
function totalSupply() external view override returns (uint) {
return _circulatingSupply;
}
function balanceOf(address account) external view override returns (uint) {
return _balances[account];
}
function transfer(address recipient, uint amount) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address _owner, address spender) external view override returns (uint) {
return _allowances[_owner][spender];
}
function approve(address spender, uint amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function _approve(address owner, address spender, uint amount) private {
require(owner != address(0), "Approve from zero");
require(spender != address(0), "Approve to zero");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
_transfer(sender, recipient, amount);
uint currentAllowance = _allowances[sender][msg.sender];
require(currentAllowance >= amount, "Transfer > allowance");
_approve(sender, msg.sender, currentAllowance - amount);
return true;
}
// IERC20 - Helpers
function increaseAllowance(address spender, uint addedValue) external returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
uint currentAllowance = _allowances[msg.sender][spender];
require(currentAllowance >= subtractedValue, "<0 allowance");
_approve(msg.sender, spender, currentAllowance - subtractedValue);
return true;
}
}
Libraries.sol 108 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
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 IUniswapFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapRouter {
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function factory() external pure returns (address);
function WETH() external pure returns (address);
}
abstract contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == msg.sender, "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
Read Contract
InitialSupply 0x1eb25d13 → uint256
LPReleaseLimitedTo20Percent 0x9b39b65f → bool
LaunchTimestamp 0xb40d09e2 → uint256
LimitSell 0x629ece49 → uint256
LimitV 0xf5fb756f → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
burnTax 0x1d4eaead → uint256
buyTax 0x4f7041a5 → uint256
decimals 0x313ce567 → uint8
excludedFromFees 0xdbe66ca0 → bool
excludedFromLimit 0xd8bd2dd1 → bool
getBurnedTokens 0xc3f4f54f → uint256
getLiquidityReleaseTimeInSeconds 0xc3a3c032 → uint256
isAMM 0xd46b6a30 → bool
isOverLiquified 0x46e35f03 → bool
liquidityTax 0xbe617fa0 → uint256
manualSwap 0x51bc3c85 → bool
marketingTax 0x1d2cb02d → uint256
marketingWallet 0x75f0a874 → address
name 0x06fdde03 → string
overLiquifyTreshold 0x0eff4c64 → uint256
owner 0x8da5cb5b → address
sellTax 0xcc1776d3 → uint256
swapTreshold 0xe52fb9ec → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
transferTax 0x8124f7ac → uint256
Write Contract 22 functions
These functions modify contract state and require a wallet transaction to execute.
ChangeMarketingWallet 0x817d4bff
address newWallet
ExcludeAccountFromFees 0xe0d2f9eb
address account
bool exclude
ExcludedFromLimit 0xab64cfdc
address account
bool exclude
LiquidityRelease 0x0612f39d
No parameters
LockLiquidityForSeconds 0x3227925f
uint256 secondsUntilUnlock
SetAMM 0x5149f984
address AMM
bool Add
SetLimit 0x479881bf
uint256 LimitV2
SetOverLiquifiedTreshold 0xbc43d849
uint256 newOverLiquifyTresholdPermille
SetSell 0x33ae8325
uint256 LimitSell2
SetTaxes 0x2d48f84f
uint256 buy
uint256 sell
uint256 transfer_
uint256 burn
uint256 marketing
uint256 liquidity
SetupEnableTrading 0x7b9e987a
No parameters
SwapContractToken 0x41aec357
No parameters
SwitchManualSwap 0x868b0141
bool manual
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
limitLiquidityReleaseTo20Percent 0xa68bdac7
No parameters
renounceOwnership 0x715018a6
No parameters
setSwapTreshold 0xcfd1940e
uint256 newSwapTresholdPermille
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
No transactions found for this address