Marinate chicken with grated garlic, grated ginger and chilli powder for 10-15 minutes.
Heat a wok over medium-high heat till hot, then add 1 tbsp of oil. Add marinated chicken and fry until surface is browned, for around 4-5 minutes. Remove chicken from wok and set aside. NOTE: There's no need to wash the wok even if there is any brown residue (fond) left behind. When cooking the sauce, the fond will be deglazed and will add more flavour to your sauce.
In the same wok, add butter and diced onions. Reduce fire to medium to prevent butter from burning. Fry until onions until they turn translucent.
Add grated garlic, garam masala and ground cumin, and fry until fragrant and well-combined.
Add canned tomatoes and chilli powder, and cook until liquid starts bubbling. Turn off the heat.
Transfer the mixture from the wok into a blender, and blend until smooth. NOTE: If you're using fresh tomatoes and there's not enough liquid for the mixture to blend well, add some water to the blender.
If your mixture is not smooth enough to your liking, strain the mixture through a sieve, back into the wok. Turn on the heat to medium, then add evaporated milk and combine well. Add sugar and salt to taste.
Add cooked chicken back into the wok and cook for another 2-3 minutes. Serve butter chicken with buttered naan or over rice.