Nice solution @Anvar_Xadja
Your transfer event and corresponding emit statement are both well coded. The emit statement is in the correct position within your transfer function body, and will log appropriate data when the function is successfully executed.
Your additional modifier isSenderEqualReceiver is also very well coded and implemented. Just bear in mind that we would only want to add a require() statement to a modifier if we needed to use it more than once, in order to avoid code duplication. Otherwise, it’s actually more concise just to place the require() statement directly within the function body. But I’m sure your idea here was to practise coding and implementing modifiers — which is great!
You are missing the constructor to set the contract owner’s address on deployment, and also the _transfer() helper function. Or did you mean to only include extracts from your full code? That’s OK as well, but when you’ve added a lot of your own adaptations, it’s usually best to post your full code, because that makes it easier to review, and also means we can deploy it, if necessary. It’s always nice to see the full code for an assignment where someone has put as much effort into it as you have with this one
Just let me know if you have any questions.