- Force Field > Curve Guide (set Free like 0.8 so particles didn't end up at the end of curve)
- Final object > Collision (set some Friction and Stickiness)
- Inside place one Empty > Force and for second Empty > Vortex or Turbulence let particles fly around the object before they stack on surface
- To try keep distance between particles I tried to use in Particle Properties > Force Field Settings > enabled Self Effect and for Type 1 > Charge ...
- probably good to disable Gravity under Scene Properties or under Particle Properties > Field Weights ... so you don't have to fight with another force if you don't need it :)
It is all about forces so you would have to play a lot with settings ...
Notes:
There is a quite unnatural way to control speed particles on Curve Guide (for me), because speed is based on Particles LifeTime - at the end of lifetime particles has to reach the end of curve - long LifeTime = slow / short LifeTime = fast.
That could be fine if you don't need let particles live longer, but in your case it is an issue. That is why I used Free parametr that is described in Mannual as ...
Free
Fraction of particle life time, that is not used for the curve.
That way it was easy to set, but hour of experimenting to discover.
Naturally (in terms of blender) I would expect the Path Animation to be a factor for speed, like for object animation (more of that because it is enabled by default ... btw disabling brings crash for me in 2.93) ... hmm, what to say.
Anyway another option to let particles follow a curve is to add Curve object and assign Force Field > Type-Force, Shape-Curve ... that works more natural for lifetime, but it was impossible for me to keep particles follow curve up to end of curve ... they just more and more accelerated out of curve path.
You can also use "final" object as Force Field and Collision at the same time ... but I wanted to separate them to better see what is causing issue.
If you would need to let particles spin around curve you can change Tilt parametr for each vertex of curve.