Step 1Open the cans of coconut milk and carefully skim off the top layer of cream until you get ½ cup (1 can’s worth of cream should suffice). Pour the liquid milk into a liquid measuring cup and add more milk from the second can until you have 1 ½ cups. Scrape the coconut cream into a medium saucepan.
Step 2Pour the coconut milk into a small saucepan. Finely chop half the cilantro leaves and add them to the coconut milk. Place the small saucepan over medium-high heat and bring the coconut milk to a simmer. Once it starts bubbling, reduce the heat to low to keep warm.
Step 3Meanwhile, combine the shallots and ginger in a mortar and pestle and pound until they form a uniform paste (alternatively, blend them together in a food processor).
Step 4Heat the medium saucepan with the coconut cream over medium-high heat until the fat and cream start to separate from each other. Scrape the shallot-ginger paste into the pan and cook, stirring occasionally, until the aromatics start sticking and the coconut solids just start to lightly brown on the bottom of the pan, 5 to 6 minutes. Add the curry powder and cook, stirring, until toasted, about 1 minute. Stir in the tomato paste and cook, stirring, for another minute. Pour in the stock and scrape the bottom of the pot as you stir until the liquid comes to a boil.
Step 5Pour the warm coconut milk into the curry mixture, add the potatoes and Thai chiles and bring to a boil. Reduce the heat to maintain a gentle simmer and cook the potatoes until almost done, about 12 minutes. Add the fish, season the liquid with chile flakes and fish sauce to taste and cook, stirring occasionally, until the fish is just cooked through and the tip of a paring knife inserted in each potato piece slides in and out easily, 4 to 5 minutes more. Remove the pan from the heat and season with more fish sauce, if you like.
Step 6Spoon the curry over rice to serve and garnish with scallions and the remaining cilantro leaves.