Hello zeeshanmazhar, welcome to the forums.
You should start by following this great tutorial OpenZeppelin Upgrades: Step by Step Tutorial for Hardhat
That should get you to speed on a basic contract format as well as a proxy for updates.
You will need to build your own function for reward distributions.
I would suggest taking a look at RFI if you would like a reward based on a tax for every single transaction.
If you want to reward users periodically, then perhaps build a mint function that is called, then it mints tokens as a reward to whoever you want.