Squeeze the firm tofu into fine crumbles and put in a large mixing bowl. Add all the ingredients for the meatballs. Use your clean hand to mix it is easier, though it can be messy. The consistency should be like a soft sticky paste but not too soft that it can't hold its shape. If it's too dry you can add a bit more chicken stock.
Cover and let it sit for 15 minutes at room temperature
Shaping:
Lightly wet your palms and scoop about 1/2 to 1 cup of meat paste (it's up to you how big or small you want to make this). I use 1 cup for jumbo size. Shape it into a round ball. Repeat with the rest of the meat paste
Cooking:
Preheat oil in a large skillet. The oil should come up halfway of the meatballs. When you put a chopstick or a skewer into the oil, you will see some bubbles around it. The oil is ready. Gently place one meatball at a time into the oil. You need to cook in batches. I would say about 4 at a time. Cook until the meatballs are golden brown. Remove from the oil and place on an absorbent paper towel
Prepare the red-braised broth:
Separate the stalks of the Napa cabbage from the soft leaves
Preheat 2 Tbsp of oil in a large pot. Add ginger slices, scallion pieces, cinnamon, and star anise. Stir fry for about 3 minutes over medium heat. Then add the sugar and cook until it melts. Add the water and the seasonings for the gravy
Arrange the Napa cabbage stalks inside the pot. Put the meatballs on top of the cabbage. Then cover the meatballs with the soft leaves of the cabbage. Let it come to a simmer and then close the lid and let it to let the meatballs braised for about 30 minutes
Have a taste and adjust the seasoning by adding more soy sauce and/or sugar to suite your taste. You can serve it as is or you can thicken the broth
If you want to thicken the broth, remove the meatballs and the leaves and then strain the broth and pour it back into the pan. Combine 1 Tbsp of cornstarch with 1 Tbsp of water. Pour the starch solution into the broth and keeps stirring until the gravy starts to thicken.